Прогресс-бар с 9 различными символами - PullRequest
0 голосов
/ 08 марта 2020

Я создаю дискорд-бота и хочу отобразить xp-bar с эмодзи. (в этом примере я заменил смайлики на символы ascii) Бар длиной 10 смайликов, с 3 разными типами фигур. Левая сторона, средняя и правая сторона. Каждый из них может быть пустым, наполовину полным и полным. Мое текущее решение использует много операторов if-else, и в целом оно довольно грязное.

Вот мое решение на данный момент. i - это состояние, в котором находится бар: 0 - пустой, 20 - полный. Этот код печатает все столбцы от 0 до 20.

def main():
for i in range(21):
    if i in [0,1]:
        if i == 0:
            print("[00", end="")
        else:
            print("[X0", end="")
        for x in range(8):
            print("00", end="")
        print("00]", end="")
    elif i in [19,20]:
        print("[XX", end="")
        for x in range(8):
            print("XX", end="")
        if i == 19:
            print("X0]", end="")
        else:
            print("XX]", end="")
    else:
        print("[XX", end="")
        for x in range(i//2-1):
            print("XX", end="")
        if i % 2 == 1:
            print("X0", end="")
        for x in range(8-(i % 2)-(i//2-1)):
            print("00", end="")
        print("00]", end="")
    print("")

Вывод:

[....................]
[X...................]
[XX..................]
[XXX.................]
[XXXX................]
[XXXXX...............]
[XXXXXX..............]
[XXXXXXX.............]
[XXXXXXXX............]
[XXXXXXXXX...........]
[XXXXXXXXXX..........]
[XXXXXXXXXXX.........]
[XXXXXXXXXXXX........]
[XXXXXXXXXXXXX.......]
[XXXXXXXXXXXXXX......]
[XXXXXXXXXXXXXXX.....]
[XXXXXXXXXXXXXXXX....]
[XXXXXXXXXXXXXXXXX...]
[XXXXXXXXXXXXXXXXXX..]
[XXXXXXXXXXXXXXXXXXX.]
[XXXXXXXXXXXXXXXXXXXX]

Мой вопрос: есть ли более простой и умный способ сделать это?

Ответы [ 3 ]

0 голосов
/ 10 марта 2020

Я должен создать функцию, которая создает индикатор выполнения (учитывая, насколько заполнен индикатор выполнения и его размер):

    def progress_bar(full, length_progress_bar):
        # Adds a '[' then for how full the progress bar is adds '*', 
        # then add '.' for the remaining bit, then adds ']'
        progress_bar_ = f"[{'*' * full}{'.' * (length_progress_bar - full)}]"
        return progress_bar_

    width_progress_bar = 20
    for full in range(0, width_progress_bar + 1):
        print(f'{full}: {progress_bar(full, width_progress_bar)}')
0 голосов
/ 11 марта 2020

Вот программа, которую я написал. Надеюсь, это поможет:

def main():
   for i in range(21):
       print("[" + "X" * i + "0" * (20-1) + "]")
0 голосов
/ 10 марта 2020

Написал это для вас, если вы прочитаете это, надеюсь, вы получите лучшее понимание предпосылки автоматизации, которая python это все о!

def squareBrackets(string:str):
    newString = "[" + string + "]"
    return newString

def fillGaps(string:str):
    amountToFill = 20 - len(string)
    return string + "." * amountToFill # If you multiply strings, it will just make a bunch of them over and over in the same string. So "hello"*3 would give you "hellohellohello"

def main():
    for i in range(21):
        string = "X"*i
        print(squareBrackets(fillGaps(string)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...