2016-11-21 4 views
0

У меня есть следующий простой код:Бар Прогресс 5% шаги

import sys 
num_tasks = 1000000 
for i in range(num_tasks): 
    if ((i/(num_tasks-1)) % 5): 
     sys.stderr.write('\rdone {0:.0%}'.format(i/(num_tasks-1))) 

Моя проблема заключается в том, что я просто хочу, чтобы показать 5% шаги, как:

done 5%, done 10%, done 15%,... 

Что я делаю неправильно ?

+3

Какая ошибка/неожиданный результат? Пожалуйста, добавьте это на свой вопрос. – lucasnadalutti

ответ

0

Эта линия:

if ((i/(num_tasks-1)) % 5):

будет интерпретироваться как True в каждой итерации, в которой (i/(num_tasks-1)) является не делится на 5, так как (i/(num_tasks-1)) % 5 будут равны значениям, отличных от 0. Вы должны вместо этого сделать :

if ((i/(num_tasks-1)) % 5 == 0):

+0

Вы попробовали это решение? Потому что это просто покажет мне «сделано 0%», поскольку это просто «истина» для самого первого значения i. –

0

ошибка в этой строке:

if ((i/(num_tasks-1)) % 5):

Поскольку ((i/(num_tasks-1)) % 5) не логическое значение, ваше if заявление не будет вести себя должным образом. Here - это дополнительная информация об истинных значениях различных примитивных типов в Python. Попробуйте это вместо:

if i/(num_tasks-1) % 5 == 0: