интерфейс процентов

У меня имеется данный код:

storage.py

percent = float(0)
unload_percent = float(100)
percif = "[ ░░░░░░░░░░░ ]"
slp = 0.0001

def percents_interface(perc):
    if perc < 10:
        percif = "[ ░░░░░░░░░░ ]"
    elif perc >= 10 and perc < 20:

        percif = "[ ▓░░░░░░░░░ ]"
    elif perc >= 20 and perc < 30:

        percif = "[ ▓▓░░░░░░░░ ]"
    elif perc >= 30 and perc < 40:

        percif = "[ ▓▓▓░░░░░░░ ]"
    elif perc >= 40 and perc < 50:

        percif = "[ ▓▓▓▓░░░░░░ ]"
    elif perc >= 50 and perc < 60:

        percif = "[ ▓▓▓▓▓░░░░░ ]"
    elif perc >= 60 and perc < 70:

        percif = "[ ▓▓▓▓▓▓░░░░ ]"
    elif perc >= 70 and perc < 80:

        percif = "[ ▓▓▓▓▓▓▓░░░ ]"
    elif perc >= 80 and perc < 90:

        percif = "[ ▓▓▓▓▓▓▓▓░░ ]"
    elif perc >= 90 and perc < 100:

        percif = "[ ▓▓▓▓▓▓▓▓▓░ ]"
    elif perc == 100:

        percif = "[ ▓▓▓▓▓▓▓▓▓▓ ]" 

ru_localization.py

from colorama import init
from time import sleep
from storage import codes
from storage import yes_variants
from storage import percents_interface
from storage import percif

init()


def script_ru_start():
    sleep(1)
    choice = input("Взломать Пентагон? ")
    if choice in yes_variants:
        script_ru()
    else:
        print("Ошибка!")
        return


def script_ru():
    from storage import percent
    from storage import slp
    print("Начинается взлом Пентагона...")
    sleep(2)
    print("")
    print("")
    while percent < 99.9:
        sleep(slp)
        print(f"\033[2AПроцент взлома: {round(percent, 1)}%\n{percif}")
        percents_interface(percent)
        percent = percent + 0.1
        slp = slp + 0.00005
    sleep(0.5)
    print(f"Процент взлома: {round(percent, 1)}\n{percif}\nПентагон успешно взломан!")
    sleep(1)
    print(f"Спасибо за игру!")
    sleep(2)

при работе script_ru() должен брать переменную percif, которая должна изменяться при выполнении. но все выше сказанное не работает. не могу понять почему. Программа исправно работает.


Ответы (3 шт):

Автор решения: CrazyElf

Возможно, так заработает:

def percents_interface(perc):
    global percif
    ...

Сейчас у вас percif внутри функции percents_interface - это локальная переменная этой функции, глобальную переменную вы так не поменяете.

Но вообще лучше не пользоваться глобальными переменными, а делать, например, классы и пользоваться переменными классов. И не пользоваться в функциях не переданными в них явно переменными. Тоже самое с изменением переменных функциями, если что-то поменяли - лучше это вернуть в явном виде из функции через return и принять в том месте, где функция была вызвана.

→ Ссылка
Автор решения: Дмитрий Девятков

я решил это редактированием функции, теперь она сразу выводит print, а не передает переменную "percif"

→ Ссылка
Автор решения: Эникейщик

percents_interface() можно записать в одну строчку: percif = ("▓"*(perc//10)).ljust(10,"░"). И сразу вставить в нужное место

print(f"Процент взлома: {round(percent, 1)}%\n {('▓'*(percent//10)).ljust(10, '░')}")
→ Ссылка