Я создаю дискорд-бота и хочу отобразить 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]
Мой вопрос: есть ли более простой и умный способ сделать это?