使用下面的代码,无论输入的第一个字母是什么,它总是被确定为元音:
original = raw_input("Please type in a word: ")
firstLetter = original[0]
print firstLetter
if firstLetter == "a" or "e" or "i" or "o" or "u":
print "vowel"
else:
print "consonant"
实际上,if语句中的布尔值是什么并不重要......如果它是==或!=,它仍然返回"vowel"
。为什么呢?
答案 0 :(得分:8)
Python不是英语。如果你有一堆表达式or
或and
,那么每个表达式都必须有意义。请注意,它本身:
if "e":
print("something")
将始终打印something
,即使letter
不等于"e"
。
你需要这样做:
if letter == "a" or letter == "e" # (...)
或者,更简洁:
if letter in "aeiouy":
答案 1 :(得分:2)
if firstLetter in ("a", "e", "i", "o", "u"):
您的测试的作用如下:
if (firstLetter == "a") or "e" or "i" or "o" or "u":
后四项测试中的每一项都是真的。
答案 2 :(得分:1)
尝试使用布尔表达式:
firstLetter = 'a'
firstLetter in 'aeiou'
True
firstLetter = 'x'
firstLetter in 'aeiou'
False
这相当于
firstLetter in ['a', 'e', 'i', 'o', 'u']
即,你想把它放到你的if语句中:
if firstLetter in 'aeiou':
print 'vowel'
else:
print 'consonant'
注意:
你原来的方法是在正确的轨道上,但你必须比较每个字母,如
if firstLetter == 'a' or firstLetter == 'e' or firstLetter == 'i' or ...
使用上述内容更为简洁。
答案 3 :(得分:0)
您的测试不像您认为的那样有效。你问,“如果变量等于'a'”,那么你的测试的其余部分基本上会询问字母e,i,o或u是否为假。只有空字符串的计算结果为False(在解释器中尝试“e”== False)。使用其他答案中的“in”测试。另外,请确保使用小写的firstLetter,以便始终比较喜欢。
答案 4 :(得分:0)
首先你应该知道or
如何工作,它会评估左右表达式,并返回第一个计算结果为true的表达式,否则返回最后一个表达式:
从这个source你可以看到所有这些评估为假:
>>> False or True
True
>>> '' or False
False
>>> '' or 0
0
因此非空字符串将评估为true并将返回:
>>> 'abc' or False
'abc
if firstLetter == "a" or "e" or "i" or "o" or "u":
print "vowel"
else:
print "consonant"
对于字符串'foo'
,'f'
是第一个字母。
在代码的第一部分firstLetter == "a" or "e"
中,左表达式将计算为false,但'e'
不是空字符串,因此它的计算结果为true,它将print "vowel"
您可以看到我的其他答案here,它可以回答您的问题,例如:
if c.upper() in "AEIOU"
将检查一封信是否为元音。