Я хочу создать простой список [0, 0.05, 0.10, 0.15, ....., 1.00], используя цикл while в python - PullRequest
1 голос
/ 18 октября 2019

Я хочу создать цикл в Python, который выдаст вывод в виде списка [0,00, 0,05, 0,10, 0,15, ...., 1,00]

Я попытался сделать это следующим способом:

alpha=0

alphalist=list()
while alpha<=1:
    alphalist.append(alpha)
    alpha+=0.05

print(alphalist)

Я получил вывод в виде [0, 0,05, 0,1, 0,15000000000000002, 0,2, 0,25, 0,3, 0,35, 0,39999999999999997, 0,44999999999999996, 0,49999999999999994, 0,549999999999999999, 0,6, 0,6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000, 0,9000000000000002, 0,9500000000000003]

Но я хочу вот что: [0,00, 0,05, 0,10, 0,15, ...., 1,00]

Ответы [ 2 ]

2 голосов
/ 18 октября 2019

Это результат ошибки с плавающей точкой. 0.05 на самом деле не является рациональным числом 1/20, поэтому любая арифметика с ним может отличаться от ожидаемой.

Деление двух целых, а не начало со значения с плавающей запятой, помогаетсмягчить проблему.

>>> [x/100 for x in range(0, 101, 15)]
[0.0, 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.55, 0.6, 0.65, 0.7, 0.75, 0.8, 0.85, 0.9, 0.95, 1.0]
1 голос
/ 18 октября 2019

Существуют некоторые числа, которые могут привести к неточностям, когда компьютеры с плавающей запятой используют . Вы просто видите пример этого.

Что бы я сделал, если вы хотите продолжать использовать цикл while таким образом, это добавить еще одну строку с

alpha = round(alpha,2)
...