Python имеет проблем со сравнением двух чисел с плавающей запятой из-за проблем с точностью / округлением. Python фактически оценивает y
до ближайшего приближения 21,0, когда вы ожидаете, что оно равняется 21. Из-за этого они не равны, а условие y != x
никогда не оценивается как False
, вызывая бесконечный цикл, в котором вы находитесь.
Вы можете использовать функцию math.isclose
вместо равенства, чтобы решить проблему:
import math
x = math.ceil(20.4)
y = 20.4
while not math.isclose(x,y):
y += 0.1
print(y)
Теперь ваш цикл должен завершиться, когда y
"близко к" 21- это был мой вывод:
20.5
20.6
20.700000000000003
20.800000000000004
20.900000000000006
21.000000000000007