python中的行为:
我已经编写了以下代码,我所要做的就是,如果传递的数字是1、0或2的字符串表示形式,则打印yes,对于其他所有内容,则打印false:python中的行为:,python,Python,我已经编写了以下代码,我所要做的就是,如果传递的数字是1、0或2的字符串表示形式,则打印yes,对于其他所有内容,则打印false: number=raw_input() if number is "1" or "0" or "2": print "Yes" else: print "no" 我知道如何使预期的逻辑工作,但我只想知道为什么它会为我传递给原始输入的任何数字打印yes。我希望答案尽可能详细,因为我无法理解它为什么会失败,对我来说,它似乎已经够Python的了。问题
number=raw_input()
if number is "1" or "0" or "2":
print "Yes"
else:
print "no"
我知道如何使预期的逻辑工作,但我只想知道为什么它会为我传递给原始输入的任何数字打印yes。我希望答案尽可能详细,因为我无法理解它为什么会失败,对我来说,它似乎已经够Python的了。问题是,对于Python,您的代码如下所示:
if (number is "1") or "0" or "2":
try:
value = int(number)
except ValueError:
value = None
if value is not None and 0 <= value <= 2:
...
当任何非空字符串的计算结果为True
,它总是True
要执行您想要执行的操作,一个很好的语法是:
if number in {"1", "0", "2"}:
请注意,我在这里使用了一个集合——虽然在这种情况下(只有三个值)没有太大关系,但检查集合要比检查列表快,因为集合的成员资格测试是O(1)而不是O(n)
这只是一个更好、更容易的写作方式:
if number == "1" or number == "0" or number == "2":
这正是你想要的
注意:在对值进行比较时,应始终使用==
而不是is
-is
是身份检查(两个值是相同的对象)。通常,您应该使用is
来处理is True
或is None
之类的内容
如果您想将其作为一个数字处理,可以执行以下操作:
if (number is "1") or "0" or "2":
try:
value = int(number)
except ValueError:
value = None
if value is not None and 0 <= value <= 2:
...
试试看:
值=整数(数字)
除值错误外:
值=无
if值不是None和0,因为或
之间的每个表达式都作为布尔表达式计算
如果为真
计算结果为真,如果1:
计算结果为真,如果为“0”:
计算结果为真
因此,您所写的内容大致相当于:
if number is "1":
print "Yes"
elif "0":
print "Yes"
elif "2":
print "Yes"
else:
print "no"
如果数字为“1”或数字为“0”或数字为“2”,则应编写:
或更通俗的:如果数字为(“1”、“0”、“2”):
正确的语法如下:
if number == "1" or number == "0" or number == "2":
print "Yes"
或者更像蟒蛇:
if number in ["1", "2", "3"]:
print "Yes"
或者您可以强制转换到int
并尝试:
if int(number) in range(1,4):
print "Yes"
代码始终计算为True
的原因是,它计算的是“0”
和“2”
的真值,这两个语句在Python中都是真的。+1表示set-literal(在Python 2.7+中提供),此外,使用is
时,还警告不要进行字符串比较。谢谢…特别是最后的注释,我不知道。请注意,使用列表进行比较是一个坏主意-在这种情况下,使用一小组检查并不重要,但检查列表中的成员身份速度较慢,因此使用集合是有意义的。还值得注意的是,如果输入可能不是数字,您的上一个示例将抛出异常。我知道异常的可能性,但不知道检查列表成员资格对性能的影响。谢谢你的提示!