关于字符串:在Python中检测元音与辅音

Detecting Vowels vs Consonants In Python

本问题已经有最佳答案,请猛点这里访问。

我在这里犯了什么愚蠢的错误,阻止我确定用户输入的第一个字母是辅音?无论我输入什么,它都允许计算第一个字母是元音。

1
2
3
4
5
6
7
8
9
10
11
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"


变化:

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

到:

1
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"),因为非空字符串始终为真,所以计算结果为真。

1
2
>>> bool('e')
True


你在if语句中所做的是检查first =="a"是否为真,然后检查"e"是否为真,这一直是真的,所以if语句的计算结果总是为真。你应该做的是:

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

或者更好的是:

1
if first in"aeiou":


你的问题是,first =="a" or"e"被评估为(first =="a") or"e",所以你总是会得到'e',这是True声明,导致"vowel"被打印。另一种选择是:

1
2
3
4
5
6
7
8
9
10
11
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"