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