无法从辅音中确定元音

时间:2012-08-04 13:43:24

标签: python character

使用下面的代码,无论输入的第一个字母是什么,它总是被确定为元音:

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"。为什么呢?

5 个答案:

答案 0 :(得分:8)

Python不是英语。如果你有一堆表达式orand,那么每个表达式都必须有意义。请注意,它本身:

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你可以看到所有这些评估为假:

  • 任何数字类型的零,例如,0,0L,0.0,0j。
  • 任何空序列,例如'',(),[]。
  • 任何空映射,例如{}。
  • 用户定义类的实例,如果类定义非零()或 len ()方法,则该方法返回整数零或bool值False。 3.1

>>> 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"

将检查一封信是否为元音。