我几天前刚开始自学编程,我有一个简单的问题,为什么下面的代码块会像它一样工作。
我在这里和谷歌搜索了相当多的时间,但是在查找特定答案时遇到了问题。所以我以为我会在这里打破僵局,并向真正能够理解我问题的人提问。
if randint(0,1):
print ("Choice 1")
else:
if randint(0,1):
print("Choice 2")
当我运行它时,它可以正常工作,但我的问题是“它为什么有效?”
所以在我看来,我看到生成一个随机数(0或1)。由于只有两个可能的数字,它是否会计入真/假语句?像0是真的,1是假的?我不是试图将它用于任何程序,这只是我用来说明我的问题的一个例子。
感谢阅读,如果我在这里发布错误,我会道歉。我计划使用这个很棒的网站,并且不想错误地开始使用。
编辑:感谢大家的回复如此之快,我希望我能回复所有回复的人。
答案 0 :(得分:2)
0计算结果为False,非零计算结果为True。
if 0:
print 'a'
elif 1:
print 'b'
# prints 'b'
您的代码有50%的机会输出选择1,输出选择2的概率为25%,输出任何数据的概率为25%。
答案 1 :(得分:1)
这是Python中duck typing的一个示例。每次调用randint
都会产生1或0,而0的布尔值为False。请注意,在您的示例中,25%的时间都不会满足条件。您可能尝试做的是这样的事情:
num = randint(0,1)
if num:
do something
else:
do something else
鸭子打字也可以在很多其他情况下使用。例如,空列表,词典和集合都评估为false,因此您可以使用while len(my_list)>0
而不是while my_list
。 None也评估为False,因此您可以执行if re.match(pattern, string)
而非if re.match(pattern, string) != None
之类的操作。
一个好的经验法则就是假设事物会以你认为的方式运作。 Python的鸭子打字非常强大。
答案 2 :(得分:0)
if语句不仅检查类型,还包括truthy和falsy语句。例如,0
是假的。所以if 0
会触发else语句。
所以,你的代码说:如果一个随机数是1,打印选择1.如果一个随机数是0,则else触发并再次询问一个随机数是否为1来打印选择2
答案 3 :(得分:0)
是的,它会自动将它们评估为布尔值。这是许多编程语言的常见行为。实际上0评估为False,1评估为True。