将逻辑运算符与 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 > (num2 and num3)
不会做你认为的那样。与其解释它到底做了什么,我只想说我想你想说if num1 > num2 and num1 > 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 > (4 and 2)
与3 > 2
相同,因为4 and 2
是2
。以下记录说明了这一点:
>>> 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
另外,在您编写的代码中,您从未使用过elif
或else
,这很方便。使用它可以减少一些条件和歧义。
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 语句一起使用不会输出预期的结果 [重复]的主要内容,如果未能解决你的问题,请参考以下文章