randint()如何在if和else语句中进行求值?

时间:2014-06-13 15:02:38

标签: python

我几天前刚开始自学编程,我有一个简单的问题,为什么下面的代码块会像它一样工作。

我在这里和谷歌搜索了相当多的时间,但是在查找特定答案时遇到了问题。所以我以为我会在这里打破僵局,并向真正能够理解我问题的人提问。

    if randint(0,1):
        print ("Choice 1")
    else:
        if randint(0,1):
            print("Choice 2")

当我运行它时,它可以正常工作,但我的问题是“它为什么有效?”

所以在我看来,我看到生成一个随机数(0或1)。由于只有两个可能的数字,它是否会计入真/假语句?像0是真的,1是假的?我不是试图将它用于任何程序,这只是我用来说明我的问题的一个例子。

感谢阅读,如果我在这里发布错误,我会道歉。我计划使用这个很棒的网站,并且不想错误地开始使用。

编辑:感谢大家的回复如此之快,我希望我能回复所有回复的人。

4 个答案:

答案 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。