如果声明没有评估所有条件并且仍然执行

时间:2016-07-07 21:40:06

标签: python

好的,所以我是python的新手,并试图学习如何编码。我今天遇到了一个我不明白的问题。因此,此代码按预期执行,并打印三个数字中最大的一个,无论最大数字是什么位置。

    if num1 >= num2 and num3:
        print(num1, 'Is the greatest number!')

    elif num2 >= num3 and num1:
        print(num2, 'Is the greatest number!')

    else:
        print(num3, 'Is the greatest number')

但如果我将elif语句更改为:

    elif num2 >= num1 and num3:
        print(num2, 'Is the greatest number!')

即使num3是最大的,else语句也不会执行,它将显示更大数量的num1或num2。

2 个答案:

答案 0 :(得分:2)

你的第一个版本完全是巧合。你需要做

if num1 >= num2 and num1 >= num3:
    print(num1, 'Is the greatest number!')

elif num2 >= num3 and num2 >= num1:
    print(num2, 'Is the greatest number!')

else:
    print(num3, 'Is the greatest number')

虽然如果任何数字相等,这仍然会打印错误的信息

答案 1 :(得分:1)

这里的问题是关键字and的工作方式存在误解。

在python中,cond1 and cond2用于分隔两个完整的逻辑语句:cond1。它首先检查cond1。如果Truecond2,则会继续检查cond2。如果True也是True,则整个语句的结果为if num1 >= num2 and num3

执行True时,如果以下是num1 >= num2,您实际上是在询问python:

  1. num3
  2. 0存在且不是if num1 >= num2 and num1 >= num3(因为它是一个数字)
  3. 检查num1 = 2, num2 = 1, num3 = 3

    因此,如果True,您的条件仍然会为if num1 >= num2 and num3返回python-docx

    同样的概念适用于您的问题条件。