就是这个条件。
if (car.y < 100): car.y = 100
if (car.y + car.height) > 500: car.y = 500 - car.height
我想知道如何使用min和max来写这个
这就是我所尝试的。
car.y = max(100, min(500, car.y - car.height))
据我所知,min(500, car.y - car.height)
如果500 < car.y - car.height
返回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)
它的行为符合预期,但在以下情况下:
y = 100
height = 10
while True:
y = max(100, min(500, y - height))
y += 1
print(y)
它只是连续打印101,根本不增加。它被困在101。谢谢你的帮助。
与Blue_notes的答案相反
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)为了使它更易于测试):
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
你会看到它卡在101. 为什么?让我们一起进行迭代:
循环1
h
ismin在500和(100-10)之间,因此它将是90
y
ismax在100到90之间,所以是100
y
是+ 1,现在变成101
循环2
h
ismin在500和(101-10)之间,所以是91
y
ismax在100到91之间,怎么样?100年!
y
是+ 1,所以100 + 1现在变成101…这个会一直持续下去,我们继续证明这个:
3
h
ismin在500和(101-10)之间,所以是91
y
ismax在100到91之间…100年!
y
is plus 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。
y = 100
height = 10
while True:
if (y < 100): y = 100
if (y + height) > 500: y = 500 - height
y += 1
print(y)
上面的代码片段使它停留在491。max - min样式的类似代码如下:
y = 100
height = 10
while True:
y = min(500-height, max(100, y)) + 1
print(y)
car.y
的最大值是500 - car.height
(因此您需要选择两者中较小的一个)。它的最小值是100
(所以你需要选择这对中较大的一个)
car.y = max(min(car.y, 500 - car.height), 100)