使用while循环计算百分比时的怪癖

2 投票
1 回答
920 浏览
提问于 2025-04-17 12:32

我正在尝试做一个简单的百分比计数器,代码如下:

percentage = 1
while chunk:
    chunk = f.read(size/100)
    read += len(chunk)
    m.update(chunk)
    if size > 500000000:
        print '%s done for %s.'%(percentage, name)
        percentage += 1

这个代码返回了102个打印语句,结果是[1,102],而我想要的是[1,100]。出现这个问题的原因似乎是它在第一次循环(0%)和最后一次循环(100%)时都进行了打印。请问有什么简单的方法可以解决这个问题吗?

1 个回答

7

不,这不是一个简单的越界错误。

假设这个文件有199个字节长。每次循环会读取size/100个字节,也就是每次读取一个字节。因此,这个循环会执行199次,而“百分比”的范围会从1到199。

考虑到你只会在处理大文件时打印出百分比,所以实际上你不会看到像199这么高的数字。不过,正如你已经发现的那样,这个逻辑还是有问题的。

一个更好的方法是去掉percentage这个变量,直接进行计算:

while chunk:
    chunk = f.read(size/100)
    read += len(chunk)
    m.update(chunk)
    if size > 500000000:
        print '%s done for %s.'%(100.0 * read / size, name)

撰写回答