2016-10-03 42 views
0

下面的代码给了我每个第20次迭代0%,而不是我希望它显示的实际百分比。分区给出0循环,为什么?

n=100 
for i in range(n): 
    if i% 20 ==0: 
     print str(i/n*100) + '%, Progress' 

结果:

0%, Progress 
0%, Progress 
etc..... 

我必须失去了一些东西真的很简单。谢谢。

回答

1

将除法更改为i /(float)n * 100,以便由python解释器将结果输出格式化为小数点。

+0

谢谢大家,非常感谢您的帮助。因为我是初学者,这对我来说是新的,而且我必须看看我的其他一些代码,我可能会通过分区来犯同样的错误。 – AlmostGr

1

分区自动舍入到最接近的整数。 在代码发生的是: I = 20 N = 100

I/N = 20/100,其变为0 然后(I/N)* 100 = 0 * 100 = 0。 您可以通过首先乘以100 i和然后除以n解决这个问题: 我* 100/N

0

在每次迭代中i/n*100被向下舍入到最接近的整数(这是除法运算符是如何工作的上整数在python2)。

您可以使用明确的铸造float()或预先执行from __future__ import division。这会阻止分隔操作员自动舍入。

Here你可以找到类似问题的详细描述。

1

n=100 for i in range(n): print(i); if i% 20 ==0: print str((float(i)/float(n))*100) + '%, Progress'

根据你的变量声明蟒I/n是一个(INT)/(INT)。所以ti试图给我一个int的答案,它始终为0.