0

我无法在 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";

但是输入基本字后出现以下错误:

糟糕,再试一次!您的单词以辅音开头,但打印的是“basicay”而不是“asicbay”。

4

3 回答 3

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 中转换为“真”,因此该语句始终为真。

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

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

但幸运的是,在 Python 中有一种更简单的方法可以做到这一点:

if first in "aeiou":
于 2013-05-09T07:31:00.107 回答
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 不需要;在行尾。

于 2013-05-09T07:28:56.037 回答
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').

于 2013-05-09T07:29:18.087 回答