2013-05-09 61 views
0

我不能在Python中解决this problem我不能在Python中解决这个错误


我写了这个代码:

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"; 

但我得到以下错误进入基本字后:

哎呀,再试一次!你的话开头是一个辅音,但“基本”是印刷而不是“asicbay”。

+0

首先出现在一个错误if语句,你必须用所有元音评估第一个变量。 '如果first =='a'或第一个=='b'...'您可以使用'str.startswith()'来为这个propouse – jvallver 2013-05-09 07:29:25

+0

Python不需要';'来结束行。 – 2013-05-09 07:30:37

回答

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

虽然在最后两条语句(与这个用例不相关)之间有一个区别:如果'first'是'“ae”',那么'aeiou“中的第一个将是'True'。 – 2013-05-09 07:33:07

+0

@TimPietzcker:'first'应该是一个字符,基于这一行:'first = word [0]'。 – mipadi 2013-05-09 07:36:56

+0

是的,我只想指出两者并不相同。这就是为什么我写“与这个案子不相关”的原因。 – 2013-05-09 07:50:39

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并不在行的结尾需要;

+0

虽然分号不会伤害。如果这就是从Java/C#/ C++/C转换为EM ... – Makoto 2013-05-09 07:31:22

+0

@Makoto,Python不需要那些必须被说服的人转换 – 2013-05-09 07:33:08

+0

@gnibbler Woa。粗。 – cwallenpoole 2013-05-09 07:35:19

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')

相关问题