我正在编写一个Python程序,在输入的数字之前打印所有10的幂。例如,如果输入是12345,程序应输出10,100,1000,10000。这是我的程序 -
import math
limit = raw_input('Check until: ');
tenpowers=1
for i in range(1, int(limit)+1):
if math.log(i, 10)==tenpowers:
print 'tenpower! - ', i
tenpowers=tenpowers+1
仅当输入值小于或等于100时,我的程序才能正常工作。这是输出 -
D:\py>python prog.py
Check until: 100
tenpower! - 10
tenpower! - 100
D:\py>python prog.py
Check until: 12345
tenpower! - 10
tenpower! - 100
注意第二次输入12345时它仍然只输出10和100.这里出了什么问题?
答案 0 :(得分:2)
math.log
使用浮动,这几乎总是涉及一些舍入错误。
>>> math.log(1000, 10)
2.9999999999999996
如果你需要它是准确的,你应该改变算法以产生10的幂(简单地将最后的功率乘以10)并且只要新功率小于你的输入数就继续。
>>> limit = 12345
>>> power = 10
>>> while power < limit:
... print power
... power = power * 10
...
10
100
1000
10000
这保证是精确的,因为它不涉及任何浮点数。 (而且速度也快得多)
答案 1 :(得分:1)
Floating-point math再次罢工!查看math.log
返回的值:
>>> math.log(10000, 10)
4.0
>>> math.log(1000, 10)
2.9999999999999996
>>> math.log(100, 10)
2.0
>>> math.log(10, 10)
1.0