我无法在Python中解决此错误

时间:2013-05-09 07:25:37

标签: python

我无法在Python中解决this problem


我写了这段代码:

pyg = 'ay'

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':
        new_word =  word + pyg;
    else:
        new_word = word[1:] + first_2 + pyg;
        print new_word;
else: 
    print "Null";

但是在输入 Basic 字后出现以下错误:

  

哎呀,再试一次!你的单词以辅音开头,但是打印出“basicay”而不是“asicbay”。

3 个答案:

答案 0 :(得分:4)

您的错误就在这一行:

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

这基本上转化为:

if (first == 'a') or 'e' or 'i' or 'o' or 'u':

和'e','i','o'和'u'在Python中翻译为“True”,因此该语句始终为真。

您实际上需要对每个字母进行相等检查:

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

但幸运的是,在Python中有一种更简单的方法:

if first in "aeiou":

答案 1 :(得分:3)

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

评估为

if (first == 'a') or 'e' or 'i' or 'o' or 'u':

始终为真,因为即使first != 'a',以下部分'e'也是如此。

将其替换为

if first in ('a', 'e', 'i', 'o', 'u'):

或者,如果first始终是单个字符:

if first in 'aeiou':

此外,Python在行尾不需要;

答案 2 :(得分:1)

if first == 'a' or 'e' or 'i' or 'o' or 'u'突出了我。

原因是:Python将从左到右评估其布尔语句,并将您的语句解释为if (first == 'a') or ('e') or ('i') or ('o') or ('u')。任何非空字符串都是一个“真实”的值,基本上会让你回到'e'。

这不是你想要的行为。您应该将其更改为使用if first in ('a', 'e', 'i', 'o', 'u')