Python中检测元音和辅音

8
我在这里犯了什么愚蠢的错误,导致我无法确定用户输入的第一个字母是辅音?无论我输入什么,它都会评估第一个字母是元音。
original = raw_input('Enter a word:')
word = original.lower()
first = word[0]

if len(original) > 0 and original.isalpha():
    if first == "a" or "e" or "i" or "o" or "u":
        print "vowel"
    else:
        print "consonant"
else:
    print "empty"

另一种方法是使用startswith()方法。将单词分配给变量first,然后进行比较:first == first.startswith(('a', 'e', 'i', 'o', 'u'));如果为True,则您将知道该单词不以辅音开头。 - seeker
3个回答

30

更改:

if first == "a" or "e" or "i" or "o" or "u":

to:

if first in ('a', 'e', 'i', 'o', 'u'):  #or `if first in 'aeiou'`

first == "a" or "e" or "i" or "o" or "u" 总是被认为是 True,因为它被解释为

(first == "a") or ("e") or ("i") or ("o") or ("u"),由于非空字符串总是被视为True,所以这个表达式被计算为True。

>>> bool('e')
True

10
既然这里都是单个字母,那么可以这样写:如果第一个字母是元音字母('aeiou' 中的任意一个),则……。请注意,翻译保持了原文的意思,并添加了更通俗易懂的表述。 - Andrew Clark

9

你在if语句中所做的是检查first == "a"是否为真,然后再检查"e"是否为真,它总是为真,因此if语句总是评估为真。
相反,你应该这样做:

if first == "a" or first == "e" ...

或者更好的是:
if first in "aeiou":

4

你的问题在于first == "a" or "e"被解释为(first == "a") or "e",所以你总是会得到'e',这是一个True语句,导致打印出"vowel"。另一种方法是这样做:

original = raw_input('Enter a word:')
word = original.lower()
first = word[0]

if len(original) > 0 and original.isalpha():
    if first in 'aeiou':
        print "vowel"
    else:
        print "consonant"
else:
    print "empty"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接