Python百分比完成度计算器
更新:我搞定了。:) 我只需要在 100
后面加个 .0
(还加了一个 int()
语句)。:P 浮点数/小数万岁!
我在做一个因数计算器。它运行得很好。下面是代码的一个示例输出:
获取 {10} 的因数
[1, 2, 5, 10]
获取 {120} 的因数
[1, 2, 3, 4, 5, 6, 8, 10, 12, 15, 20, 24, 30, 40, 60, 120]
依此类推(你在大括号( { } )内输入文本)。这个程序是用 Python 2.7 写的。为了让它更完美(比之前更好 :P),我想让它显示计算的进度。虽然我的电脑很快,可以几乎瞬间计算出 120 的因数,但如果我输入一个像 5000 这么大的数字,计算大约需要 30 秒。这有点长(这是因为它要计算 2500 万个方程)。如果能在屏幕底部显示一个完成百分比,那就太好了,这样你就能知道还剩多少时间。
所以我的代码(我马上会给你看)在你输入 5 作为数字时会输出这个:
获取 5 的因数
计算完成:20%
计算完成:40%
计算完成:60%
计算完成:80%
[1, 5]
(我不知道为什么它不显示 100%,不过我可以很容易加上,所以别担心。)好吧,它运行得很好。太棒了!现在我遇到了一个问题……
获取 101 的因数
计算完成:0%
计算完成:0%
计算完成:0%
计算完成:0%
计算完成:0%
计算完成:0%
计算完成:0%
计算完成:0%
计算完成:0%
[1, 101]
这显然是个问题。只有输入小于或等于 100 的数字时它才有效,而 100 的计算几乎是瞬间完成的,这样就没什么意义了。:P
在这个时候,可能是时候展示我的代码了:
def getFactors(n):
out = [1]
for i in range(1, n):
for j in range(1, n):
if (i * j == n):
out.append(i)
print "Calculation completed: " + str(100 / n * i ) + "%"
out.append(n)
return out
while(0 < 1):
number = int(raw_input("Get factors of "))
print getFactors(number)
print ""
主要关注的部分:第一个 print
函数。:P
有没有什么线索为什么它不工作?如果你能帮忙,非常感谢。 :)
2 个回答
当你写 100 / n
的时候,计算机把它当作两个整数来处理,所以结果也会是一个整数。
你可以通过把那一行改成下面这样,强制它变成小数:
str(100.0 / n * i)
只要在这个计算中有一个小数,结果也会变成小数。
默认情况下,如果所有参与运算的数字都是整数,Python 2会进行整数运算。
print "Calculation completed: " + str(100. / n * i ) + "%"
# ^
# the "dot" here force calculation
# using floating point values
Padraic Cunningham建议的一个替代方法是,在你的源文件中添加这个导入:
from __future__ import division
这样做会让Python 2中的除法运算表现得像Python 3中的一样(详细信息请查看PEP-238)。