1

我正在尝试用 Python 制作这个 Pig Latin 翻译器,它运行良好,直到我试图缩小它的大小。

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

代码:

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

6 回答 6

8

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

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

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

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

你应该这样做: -

if low_original[0] in 'aeiou':

或者: -

if low_original[0] in ('a', 'e', 'i', 'o', 'u'):
于 2012-11-09T09:18:16.703 回答
3

您应该替换字符串:

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

和:

if low_original[0] in ('a', 'e', 'i', 'o', 'u'):
于 2012-11-09T09:17:44.917 回答
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'

于 2012-11-09T09:21:46.843 回答
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'
于 2012-11-09T09:18:08.663 回答
0

问题出在 'if low_original[0] == 'a' or 'e' or 'i' or 'o' or 'u':' - first is not pythonic second is not give you not what you want.

尝试将您的代码更新为:

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'
于 2012-11-09T09:18:23.387 回答
0

将 if 语句替换为

if low_original[0] in ['a', 'e', 'i', 'o', 'u']
于 2012-11-09T09:19:10.170 回答