2016-12-15 10 views
2

私はいくつかの行のデータにいくつかのことをしています。これには時間がかかり、進捗率を表示したいと思います。Python:操作の割合を表示

だから私は次のコードを持っている:

for y in range(0, height): 
    if (y * 100/height).is_integer(): 
     print("... ", int(y * 100/height), "%") 

heightを処理する必要がある行数です。

ただし、このコードでは正しい割合が印刷されません。高さが100の場合はうまく動作します。 4050では、2%ごとに印刷します(0%、2%、4%、...)。 2025年には4%ごとに印刷されます。

なぜこれが起こりますか?それをどうやって修正することができますか?

+4

[既製のライブラリを使用しない理由](https://pypi.python.org/pypi/tqdm) –

+3

replの最初の数回の反復をシミュレートすると、 'i + 1 '回目の反復までのi回目の反復は、例えば0.8%から完全に1.2%の完了まで容易に進む可能性があります。どちらも整数ではありません。 – Cameron

+0

うーん、それはとても素敵ですね。それでも、答えを知りたいです:P –

答えて

2

正確に自分のコードを誇りに思って、とにかくない:

last = -1 # Start it as -1, so that it still prints 0%. 
for y in range(0, height): 
    work = int(y * 100/height) # I assigned the percentage to a variable for neatness. 
    if work != last: # so it doesn't print the same percent over and over. 
     print("... ", work, "%") 
    last = work # Reset 'last'. 

これは/完全に正確であってもなくてもよいです。しかし、それは動作します

あなたが問題を抱えていた理由は、is_integer()が特定の値にのみ当てはまるからです。

希望すると便利です。