2

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

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 语句中的布尔值是什么并不重要……如果它是 == 或 != ,它仍然是 return "vowel"。为什么?

4

5 回答 5

8

Python 不是英语。or如果您在它们之间或之间有一堆表达式and,则每个表达式都必须独立。请注意,它本身:

if "e":
    print("something")

将始终打印something,即使letter不等于"e"

你需要这样做:

if letter == "a" or letter == "e"  # (...)

或者,更简洁地说:

if letter in "aeiouy":
于 2012-08-04T13:48:44.313 回答
2
if firstLetter in ("a", "e", "i", "o", "u"):

您的测试所做的如下:

if (firstLetter == "a") or "e" or "i" or "o" or "u":

并且后4个测试中的每一个都是正确的。

于 2012-08-04T13:48:28.987 回答
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 ... 

使用上述内容更加简洁。

于 2012-08-04T13:47:36.860 回答
0

你的测试不像你想象的那样工作。您在问,“如果变量等于 'a'”,那么其余的测试基本上会询问字母 e、i、o 或 u 是否为 False。只有空字符串的计算结果为 False(在解释器中尝试 "e" == False 以查看)。使用其他答案中的“in”测试。此外,请确保将 firstLetter 小写,以便您始终比较喜欢。

于 2012-08-04T13:52:16.303 回答
0

首先你应该知道它是如何or工作的,它计算左右表达式,并返回第一个计算结果为真的表达式,否则返回最后一个表达式:

从这个来源你可以看到所有这些都评估为假:

  • 没有任何
  • 错误的
  • 任何数字类型的零,例如 0、0L、0.0、0j。
  • 任何空序列,例如,''、()、[]。
  • 任何空映射,例如 {}。
  • 用户定义类的实例,如果该类定义了一个非零()或len()方法,当该方法返回整数零或布尔值 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"

您可以在此处查看我的其他答案,该答案回答了您的问题,如下所示:

if c.upper() in "AEIOU"

将检查一个字母是否是元音。

于 2012-08-04T13:56:48.720 回答