将逻辑运算符与 If 语句一起使用不会输出预期的结果 [重复]

Posted

技术标签:

【中文标题】将逻辑运算符与 If 语句一起使用不会输出预期的结果 [重复]【英文标题】:Using logical operators with If statements won't output what is expected [duplicate] 【发布时间】:2022-01-19 02:21:14 【问题描述】:

我开始学习 Python 并写了这个:


num1 = int(input('First number '))
num2 = int(input('second number '))
num3 = int(input('third number '))

if num1 > (num2 and num3):
    print(f'num1:2 is bigger')
    if num2 > num3:
        print(f'num3:2 is smaller')
    if num3 > num2:
        print(f'num2:2 is smaller')

if num2 > (num1 and num3):
    print(f'num2:2 is bigger')
    if num1 > num3:
        print(f'num3:2 is smaller')
    if num3 > num1:
        print(f'num1:2 is smaller')
    

if num3 > (num1 and num2):
    print(f'num3:2 is bigger')
    if num1 > num2:
        print(f'num2:2 is smaller')
    if num2 > num1:
        print(f'num1:2 is smaller')

如果我为第一个数字输入“5”,为第二个数字输入“4”,为第三个数字输入“2” 它输出:

"5 is bigger
 2 is smaller
 4 is bigger
 2 is smaller"

为什么他会读取带有错误条件语句的行?

我错过了什么?

另外一种写法是:

"if num2 > (num1 and num3) and (num1 < num3):
    #print(f'num2:2 is bigger and num1:2 is smaller')"

但也没有用。

谢谢大家。

【问题讨论】:

num1 &gt; (num2 and num3) 不会做你认为的那样。与其解释它到底做了什么,我只想说我想你想说if num1 &gt; num2 and num1 &gt; num3 我建议你做print(num2 and num3) 看看你实际比较的是什么。逻辑运算符不会自动分配。 当条件互斥时也应该使用elif。并使用else: 代替最后一个条件。 【参考方案1】:
num1 > (num2 and num3)

这并不像你想象的那样起作用,你需要这样的东西:

num1 > num2 and num1 > num3

# Or if there's lots of them:
num1 > max(num2, num3, num4, num5)

您当前的方法首先计算num2 and num3,如果它为假,则给您num2(见下文),否则为num3。所以3 &gt; (4 and 2)3 &gt; 2 相同,因为4 and 22。以下记录说明了这一点:

>>> print(0 and 99)
0
>>> print(1 and 99)
99
>>> print(2 and 99)
99
>>> print(-1 and 99)
99

基本上,如果数字为零,则认为数字为假,因此输出如上所示。


顺便说一句,您可能还想考虑如果两个或多个数字相等会发生什么。

【讨论】:

【参考方案2】:
num1 > (num2 and num3)

这件事并没有按照您希望的方式工作。 您需要将条件分开,然后在其中添加“和”。它应该看起来像这样。

num1 > num2 and num1 > num3

另外,在您编写的代码中,您从未使用过elifelse,这很方便。使用它可以减少一些条件和歧义。

num1 = int(input('First number '))
num2 = int(input('second number '))
num3 = int(input('third number '))

if num1 > num2 and num1 > num3:
    print(f'num1:2 is bigger')
    if num2 > num3:
        print(f'num3:2 is smaller')
    else: # as num2 > num3 is not true, then the opposite one should be true
        print(f'num2:2 is smaller')

elif num2 > num1 and num2 > num1:
    print(f'num2:2 is bigger')
    if num1 > num3:
        print(f'num3:2 is smaller')
    else:
        print(f'num1:2 is smaller')
    
elif num3 > num1 and num3 > num2:
    print(f'num3:2 is bigger')
    if num1 > num2:
        print(f'num2:2 is smaller')
    else:
        print(f'num1:2 is smaller')

【讨论】:

你应该用print(4 and 5)之类的东西检查断言(“...返回一个不能与num1比较的布尔值”),这非常不是布尔值。如果它是真的,它返回第一个值,否则返回第二个。这恰好也适用于实际的布尔值:-)

以上是关于将逻辑运算符与 If 语句一起使用不会输出预期的结果 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

js基础语法

实验四——多分支结构及本章总结

Python基础(if判断语句/逻辑运算符)

C语言逻辑运算符和if语句

if 判断语句与shell运算

python中的条件语句,分支语句以及逻辑运算符和比较运算符