Cannot determine vowels from consonants

浪子不回头ぞ 提交于 2019-12-12 07:23:33

问题


With the code below, no matter what the first letter of the input is, it is always determined as a vowel:

original = raw_input("Please type in a word: ")
firstLetter = original[0]
print firstLetter

if firstLetter == "a" or "e" or "i" or "o" or "u":
    print "vowel"
else:
    print "consonant"

In fact, it doesn't matter what the boolean is in the if statement... if it is == or != , it is still return "vowel". Why?


回答1:


Python is not the English language. If you have a bunch of expressions with or or and between them, each one must make sense on its own. Note that on its own:

if "e":
    print("something")

will always print something, even if letter doesn't equal "e".

You need to do it like this:

if letter == "a" or letter == "e"  # (...)

Or, more concisely:

if letter in "aeiouy":



回答2:


if firstLetter in ("a", "e", "i", "o", "u"):

what your test does is the following:

if (firstLetter == "a") or "e" or "i" or "o" or "u":

and each of the latter 4 tests is true.




回答3:


Try this for your Boolean expression:

firstLetter = 'a'
firstLetter in 'aeiou' 
True

firstLetter = 'x'
firstLetter in 'aeiou' 
False

This is equivalent to

      firstLetter in ['a', 'e', 'i', 'o', 'u']

i.e., you want to put this into your if statement like this:

if firstLetter  in 'aeiou':
   print 'vowel'
else:
   print 'consonant'

Note:

Your original approach was on the right track, but you would have had to compare each letter separetely like

if firstLetter == 'a' or firstLetter == 'e' or firstLetter == 'i' or ... 

Using the above is much more concise.




回答4:


Your test doesn't work like you think it does. You are asking, "If the variable equals 'a'", then the rest of your test basically asks if the letters e, i, o or u are False. Only an empty string evaluates to False (try "e" == False in the interpreter to see). Use the "in" test from other answers. Also, make sure to lower-case firstLetter so you're always comparing like to like.




回答5:


First you should know how or works, it evaluates both the left and right expression and it returns the first expression that evaluates true, otherwise it returns the last expression:

From this source you can see that all of these evaluate false:

  • None
  • False
  • zero of any numeric type, for example, 0, 0L, 0.0, 0j.
  • any empty sequence, for example, '', (), [].
  • any empty mapping, for example, {}.
  • instances of user-defined classes, if the class defines a nonzero() or len() method, when that method returns the integer zero or bool value False.3.1

>>> False or True
True
>>> '' or False
False
>>> '' or 0
0

So a non-empty string will evaluate as true and it will be returned:

>>> 'abc' or False
'abc

 if firstLetter == "a" or "e" or "i" or "o" or "u":
     print "vowel"
 else:
     print "consonant"

For a string 'foo', 'f' is the first letter. In the first part of your code, firstLetter == "a" or "e", the left expression will evaluate as false, but 'e' is not an empty string so it evaluates as true and it will print "vowel"

You can see my other answer here which answers your question, something like this:

if c.upper() in "AEIOU"

will check if a letter is a vowel.



来源:https://stackoverflow.com/questions/11809126/cannot-determine-vowels-from-consonants

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!