循环行为时帮助Python

时间:2009-08-21 14:50:13

标签: python while-loop

我有一个脚本,它使用一个简单的while循环来显示进度条,但它似乎没有像我预期的那样工作:

count = 1
maxrecords = len(international)
p = ProgressBar("Blue")
t = time
while count < maxrecords:
    print 'Processing %d of %d' % (count, maxrecords)
    percent = float(count) / float(maxrecords) * 100
    p.render(int(percent))
    t.sleep(0.5)
    count += 1

它似乎在“p.render ...”循环,并且不会返回“打印'处理%d的%d ...'”。

更新:道歉。 ProgressBar.render()在呈现进度条时会删除“print'Processing ...”的输出。进度条来自http://nadiana.com/animated-terminal-progress-bar-in-python

4 个答案:

答案 0 :(得分:5)

我看到你在我的网站上使用ProgressBar实现。如果要打印消息,可以使用render

中的message参数
p.render(percent, message='Processing %d of %d' % (count, maxrecords))

答案 1 :(得分:3)

这不是用Python编写循环的方法。

maxrecords = len(international)
p = ProgressBar("Blue")
for count in range(1, maxrecords):
    print 'Processing %d of %d' % (count, maxrecords)
    percent = float(count) / float(maxrecords) * 100
    p.render(int(percent))
    time.sleep(0.5)

如果你真的想对记录做些什么,而不是只是渲染吧,你会这样做:

maxrecords = len(international)
for count, record in enumerate(international):
    print 'Processing %d of %d' % (count, maxrecords)
    percent = float(count) / float(maxrecords) * 100
    p.render(int(percent))
    process_record(record)   # or whatever the function is

答案 2 :(得分:2)

ProgressBar.render()的实施方式是什么?我假设它正在输出移动光标的终端控制字符,以便覆盖先前的输出。这可能会造成错误的印象,即控制流不能正常工作。

答案 3 :(得分:1)

(1)[不是问题的一部分,但是...] t = time后来t.sleep(0.5)跟随t会让任何人看到裸露的count烦恼向后看以找到它是什么。

(2)[不是问题的一部分,但是......] maxrecords永远不能进入与maxrecords具有相同值的循环。例如。如果maxrecords为10,则循环中的代码仅被激活9次。

(3)你所展示的代码中没有任何东西可以支持它是“在p.render()循环”的想法 - 除非渲染方法本身循环,如果它的arg为零,这将是如果print "pretend-render: pct =", int(percent)是17909.请尝试暂时替换p.render(....)(比如说)

{{1}}