Python 有没有一种方法可以用最小值和最大值来写这个if-else?
这就是条件Python 有没有一种方法可以用最小值和最大值来写这个if-else?,python,Python,这就是条件 if (car.y < 100): car.y = 100 if (car.y + car.height) > 500: car.y = 500 - car.height 据我所知,min(500,car.y-car.height)如果500
if (car.y < 100): car.y = 100
if (car.y + car.height) > 500: car.y = 500 - car.height
据我所知,min(500,car.y-car.height)
如果500
,则返回500,这意味着它永远不能超过500,限制了上限,因为它在max(100,…)
中,下限值不能小于100
我使用了这个测试,一切正常。这些值的上限在100到500之间
for i in range(100):
print(max(100, min(500, random.randint(10, 1000) - random.randint(10, 1000))))
这就是我被困的地方
在下列情况下
y = 100
height = 10
while True:
if (y < 100): y = 100
if (y + height) > 500: y = 500 - height
y += 1
print(y)
它只是连续打印101,根本不增加。它卡在101。谢谢您的帮助。car.y的最大值是
500-car.height
(因此您需要选择两者中较小的一个)。它的最小值为100
(因此您需要选择这对中的较大者)
和蓝色笔记一样,答案正好相反
car.y = max(car.y, 100);
car.y = min(car.y, 500-car.height)
或者如果你想把它作为一行
car.y = min(max(car.y, 100),500 - car.height)
如果您尝试运行此代码(我使用了for循环而不是while,以使其更易于测试): 您将看到它卡在101。为什么?让我们一起进行迭代: 回路1
h
是min介于500和(100-10)之间,因此它将是90
y
是max介于100和90之间,因此它将是100
y
是+1,现在变成101
环路2
h
是min介于500和(101-10)之间,因此91
y
的max介于100和91之间,所以呢?100!
y
是+1,所以100+1现在变成101。。。这将永远持续下去,让我们继续证明这一点:
环路3
h
是min介于500和(101-10)之间,因此91
y
在100和91之间max。。。100!
y
等于+1,101…
如你们所见,y的乘积将保持为101,无论我们尝试多少次,最终都将保持为101
现在你知道它为什么卡住了。根据需要执行的操作或正在进行的实验,您可以添加另一个变量以允许y自由增长并使代码按预期工作:
y = 100
height = 10
for i in range(25):
h = min(500, y - height)
z = max(100, h)
y += 1
print(h , ' ' , z , ' ', y, '\n')
并根据需要将for循环转换为while
car.y = max(car.y, 100);
car.y = min(car.y, 500-car.height)
car.y = min(max(car.y, 100),500 - car.height)
y = 100
height = 10
while True:
if (y < 100): y = 100
if (y + height) > 500: y = 500 - height
y += 1
print(y)
y = 100
height = 10
while True:
y = min(500-height, max(100, y)) + 1
print(y)
y = 100
height = 10
for i in range(5):
h = min(500, y - height)
y = max(100, h)
print(h , ' ' , y , ' ', y+1, '\n')
y += 1
y = 100
height = 10
for i in range(25):
h = min(500, y - height)
z = max(100, h)
y += 1
print(h , ' ' , z , ' ', y, '\n')