是否有一种方法来写这个if-else使用最小和最大?



就是这个条件。

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

hismin在500和(100-10)之间,因此它将是90

yismax在100到90之间,所以是100

y是+ 1,现在变成101

循环2

hismin在500和(101-10)之间,所以是91

yismax在100到91之间,怎么样?100年!

y是+ 1,所以100 + 1现在变成101…这个会一直持续下去,我们继续证明这个:

循环

3

hismin在500和(101-10)之间,所以是91

yismax在100到91之间…100年!

yis 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)

最新更新