首页 > 解决方案 > 如何修复我的动态进度条,以便为它制作可自定义的长度,并且它仍然用正确数量的字符填充进度条?

问题描述

我无法让条形图一一填满符号。我的意思是它已填满,但它一次放置 2 或 3 个(取决于当前百分比)符号,当它计数到另一个 10% 时,它再次放置 2-3 个符号直到 100%

我尝试了我所知道的一切(我几周前才开始编程),但唯一能让它一个一个填满的方法是我取长条的长度并遍历它。那不是我想要的,因为百分比取决于填充了多少列表元素。这不好,因为我不想列出一个 100 个字符的长列表,只是为了逐个计算“百分比”,而不是每 5%。

例如:上次我制作了一个 20 字符长的列表,这意味着当最后一个元素被填满时,它是 100%,但在这种情况下,我必须在每个循环的 count 变量中添加 +5。但是如果我想让它变成一个 10 字符长的列表,并且在 1 个循环之后它将 5 添加到 count 变量,那么我得到的最大“百分比”是 50。

from time import sleep


def bar(blen):

    progress = []

    for p in range(blen):
        progress.append(' ')

    count = 0
    while True:
        count += 1
        sleep(0.1)
        for i in progress:
            indx = progress.index(i)
            if count == 10:
                percent = (blen * 10) // 100
                for m in range(percent + 1):
                    progress[m] = '■'

            elif count == 20:
                percent = (blen * 20) // 100
                for m in range(percent + 1):
                    progress[m] = '■'

            elif count == 30:
                percent = (blen * 30) // 100
                for m in range(percent + 1):
                    progress[m] = '■'

        print(''.join(progress), count, end='\r')

        if count >= 100:
            break


bar(19)

所以在上面的代码中,我做对了,每 10% 之后它会填充正确的数量,在每 10% 传递之后,但我希望它根据 count 变量的百分比一个一个地填充。如果我将它设为 5 个字符长列表,我仍然希望它计数到 100% 并同时以正确的速度填充。

我不想导入一个已经有一个完整工作进度条的模块,我想自己做,但遗憾的是,百分比陷入了死胡同:D

我不知道你是否能理解我的问题,但这是我能解释它的最好方法,对不起我的语法错误,我的主要语言不是英语。

标签: pythonpython-3.x

解决方案


如果你有 20 个元素,那么你应该每100/20 = 5百分比添加一个平方。如果您有 10 个元素,则每个100/10 = 10百分比添加平方。如果你有N元素,那么每个100/N百分比。然后平方数是count/(100/N)

为了使它看起来更好,您甚至可以将99/N其用作步骤。

我打印'123456789012345678901234567890'以轻松检查它打印了多少 suqares。

from time import sleep

def bar(blen):
    step = 99/blen
    for count in range(101):
        sleep(0.1)
        a = int(count/step)
        b = blen-a
        print('■'*a, end='')
        print(' '*b, end='')
        print(count, end='\r')

print('123456789012345678901234567890')
bar(20)

推荐阅读