-1

我不知道为什么当我输入“鱼”这个词作为原始的印刷元音时。

#Begin program

original = raw_input('Enter a word:')

if len(original) > 0 and original.isalpha():
    word = original.lower() #make sure original is lowercase
    first = word[0]
    if first == 'a' or 'e':
        print "vowel"
    else:
        print "consonant"
else:
    print 'empty'
4

4 回答 4

3
if first == 'a' or 'e'

将其更改为

if first == 'a' or first == 'e':

或者

if first in ('a', 'e'):

您的 if 语句正在评估,True因为您正在使用 True 值 ( 'e') 进行布尔 OR。

Python 中的非空字符串计算为True.

>>> bool('')
False
>>> bool('a')
True

因此,您的代码被评估为

if (first == 'a') or True:

它总是被评估True并因此if执行该语句。

于 2013-07-30T17:50:33.790 回答
2

你的 if 条件是错误的。具体来说,

if first == 'a' or 'e':

不会工作。它需要是

if first == 'a' or first == 'e':

原始语句的评估如下:

if (first == 'a') or ('e'):

if (False) or (True):

这是Python中真值的解释。请注意,字符评估为真。

于 2013-07-30T17:50:48.043 回答
1

那是因为if first == 'a' or 'e':被当作if (first == 'a') or ('e'):

由于 'e' 是真实的,所以or返回true

于 2013-07-30T17:51:13.147 回答
1

为了避免这种情况并使您的代码更清晰,请编写

if first in ('a', 'e'):
    ...

或者

if first in 'ae':
    ...
于 2013-07-30T17:55:14.593 回答