在此代码中:
if raw_input("\n Enter 'y' or 'Y': ")==("y" or "Y"):
print("\n Success!")
没有正确地采用“或”,相反,如果输入非资本“y”,则满足条件。如果我输入首都'Y',我就不会获得成功!
这里有什么问题?
答案 0 :(得分:1)
试试这个
if raw_input("\n Enter 'y' or 'Y': ").lower() == "y":
答案 1 :(得分:1)
尝试制作值列表并使用in
关键字。像这样的东西会起作用,
if raw_input("\n Enter 'y' or 'Y': ") in ('y', 'Y'):
print("\n Success!")
in
关键字根据字符串元组测试字符串,并在正确匹配时返回True
。
由于此处只有一个字符,因此您可以构建字符串"yY"
。像这样的东西会起作用,
if raw_input("\n Enter 'y' or 'Y': ") in "yY":
print("\n Success!")
这里字符串的每个字符都像上面元组的一个元素。
代码中的错误:
您使用了("y" or "Y")
。这在Python中不起作用。这只会返回"y"
,因为"y"
和"Y"
都被视为True
值。但是,如果您键入(0 or "Y")
,则会"Y"
,因为0
被视为False
值。
答案 2 :(得分:0)
你的if语句的右边是错误的,我认为你需要更好地理解or
运算符在字符串之间的行为。
请记住,or
的返回值是最后评估的值,并且Python将空字符串计算为布尔值False
而将非空字符串计算为布尔值True
在你的情况下,解释器读取("y" or "Y")
,然后它会评估" y"的布尔值。这是True
,因为它是非空字符串。因此,or
语句True
的布尔值和语句的返回值变为" y",最后一个评估值。
这就是我写这段代码的方法。我会在raw_input
中保留_input
的返回值,这将使我和其他人更容易阅读和理解if语句:
_input = raw_input("\n Enter 'y' or 'Y': ")
if input in ["y", "Y"]:
print("\n Success!")
答案 3 :(得分:0)
这里有什么问题?
在许多编程语言中,OR
是一个布尔运算符。您将它应用于TRUE或FALSE值。如果至少有一个操作数为TRUE,则操作的计算结果为TRUE:
TRUE OR TRUE == TRUE
TRUE OR FALSE == TRUE
FALSE OR TRUE == TRUE
FALSE OR FALSE == FALSE
In Python, you can apply or
on non-boolean operands:
x or y
如果x
投放到x
的{{1}}为boolean
,则返回True
;否则返回y
。对于布尔操作数,这会导致与上面相同的结果,但对于非布尔操作数,这会产生有趣的效果:
[] or {}
为{}
(因为在投放到时,空列表为False
boolean
)[1] or {}
为[1]
(因为非空列表在投放到True
时为boolean
)[1] or 1/0
也是[1]
(当左边的操作数为True
时,右边的操作数甚至不会被评估,因此我们不会点击ZeroDivisionError
。被称为(left-to-right) short-circuit evaluation。)因此,除了自然语言之外, Python or
不能被解释为分隔替代值。(只有替代条件/布尔表达式。)
如何使代码按预期运行,有几种可能性:
天真的方法:
answer = raw_input("\n Enter 'y' or 'Y': ")
if answer == "y" or answer == "Y":
print("\n Success!")
规范化输入:
if raw_input("\n Enter 'y' or 'Y': ").lower() == 'y':
print("\n Success!")
与成员资格运算符in
的替代值集合进行比较:
if raw_input("\n Enter 'y' or 'Y': ") in {'y', 'Y'}:
print("\n Success!")