2012-02-07 91 views
2

我試圖做一個快速的百分比計的百分比如下:夸克計算while循環

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個打印報表,[1102],而不是我所試圖做的,[1,100]。原因似乎是它在第一次迭代(0次讀取)和最後一次迭代(100%讀取)上執行打印語句。解決這個問題最簡單的方法是什麼?

回答

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)