问题描述
我已经编写了这段代码来测试某物相对于其他物的位置。它产生我想要的结果,例如x = 4 -> True
,x = 11 -> False
。但是我想知道如何用一种更pythonic的方式/一行写出来。
x = 4
z = 5
y = z + 5
n = z - 5
if x <= y and x => n:
print(True)
else:
print(False)
解决方法
如果要检查x
是否在z
的某个范围内,请使用简单的差异并取绝对值:
x = 4
z = 5
span = 5
print(abs(x - z) <= span)
在python中,比较运算符的结果几乎总是布尔值。您不需要if
即可将表达式的结果转换为布尔值。而是直接打印。
如果由于某种原因不想调用abs
,则可以使用以下事实:在python中,链接的运算符与and
隐式组合:
print(z - span <= x <= z + span)
这等效于您的原始代码,以及
print(z - span <= x and x <= z + span)
链接运算符的好处是,如果用复杂的表达式替换x
,则在我显示的前两个示例中将只对它进行一次评估,而在第三个示例中将对其进行两次评估。
此解决方案仅适用于整数,并且行数相同,唯一的区别是代替了两个条件,我使用一个列表检查x是否在range(n,y + 1)内
x = 4
z = 5
y = z + 5
n = z - 5
if x in range(n,y+1):
print(True)
else:
print(False)