Python中if / else循环的问题

时间:2012-11-09 09:15:19

标签: python if-statement

我正在尝试用Python创建这个Pig Latin翻译器,但是在我尝试缩小它之前它运行良好。

有人可以看看这段代码并告诉我为什么,当我在开头输入一个没有元音的单词时,它仍会在if语句中打印“元音”代码?

CODE:

pyg = 'ay'

original = raw_input('Enter a word: ')
low_original = original.lower()

if len(low_original) > 0 and low_original.isalpha():
        print low_original
        if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u':
                print "vowel"
                pyg_vowel = low_original + pyg
                print pyg_vowel
        else:
                print "consonant"
                pyg_cons = low_original[1: ] + low_original[0] + pyg
                print pyg_cons
else:
        print 'empty'

6 个答案:

答案 0 :(得分:8)

您需要分别检查所有元音。

目前,您的if条件评估为: -

if (low_original[0] == 'a') or 'e' or 'i' or 'o' or 'u':

or返回其条件中的第一个真值,此值为Truee,具体取决于您的第一个条件是否为True。现在,由于'e'已评估为True,因此两个值均为true,因此您的条件将始终为true

你应该这样做: -

if low_original[0] in 'aeiou':

或: -

if low_original[0] in ('a', 'e', 'i', 'o', 'u'):

答案 1 :(得分:3)

你应该替换字符串:

if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u':

使用:

if low_original[0] in ('a', 'e', 'i', 'o', 'u'):

答案 2 :(得分:0)

if总是返回True!

pyg = 'ay'

original = raw_input('Enter a word: ')
low_original = original.lower()

if len(low_original) > 0 and low_original.isalpha():
    print low_original
    if low_original[0] in ['a' , 'e' , 'i' , 'o' , 'u']:
            print "vowel"
            pyg_vowel = low_original + pyg
            print pyg_vowel
    else:
            print "consonant"
            pyg_cons = low_original[1: ] + low_original[0] + pyg
            print pyg_cons
else:
    print 'empty'

答案 3 :(得分:0)

问题在'如果low_original [0] =='a'或'e'或'i'或'o'或'u':' - 首先不是pythonic第二不是没有给你你所期望的

尝试将您的代码更新为:

pyg = 'ay'

original = raw_input('Enter a word: ')
low_original = original.lower()

if len(low_original) > 0 and low_original.isalpha():
    print low_original
    if low_original[0] in ('a', 'e', 'i', 'o', 'u'):
            print "vowel"
            pyg_vowel = low_original + pyg
            print pyg_vowel
    else:
            print "consonant"
            pyg_cons = low_original[1: ] + low_original[0] + pyg
            print pyg_cons
else:
    print 'empty'

答案 4 :(得分:0)

替换if语句
if low_original[0] in ['a', 'e', 'i', 'o', 'u']

答案 5 :(得分:0)

if中的条件将始终评估为True

 if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u':
            print "vowel"
            pyg_vowel = low_original + pyg
            print pyg_vowel

if (low_original[0] == 'a') or 'e' or 'i' or 'o' or 'u'

相同

您应该使用if low_original[0] in 'aeiou'

之类的内容