我正在尝试用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'
答案 0 :(得分:8)
您需要分别检查所有元音。
目前,您的if条件评估为: -
if (low_original[0] == 'a') or 'e' or 'i' or 'o' or 'u':
or
返回其条件中的第一个真值,此值为True
或e
,具体取决于您的第一个条件是否为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'