def generator(x):
while True:
yield x ** (1 / 3)
x = x ** (1 / 3)
gen = generator(19683)
for i in range(10):
print(next(gen))
вывод 26.999999999999996, а должно быть: 27.0, 3.0, ... Как исправить код
Это вопрос представления. float в питоне имеет ограниченную точность, поэтому точных значений при вычислении может не быть. Но вы можете получить нужные значения при выводе. Ограничьте число выводимых знаков после запятой, например до 5 знаков, и будет вам 27.0 и 3.0:
for i in range(10):
print(f'{next(gen):.5}')
Вывод:
27.0
3.0
1.4422
1.1298
1.0415
1.0137
1.0045
1.0015
1.0005
1.0002