Задать вопрос
@natalya1000

Как оптимизировать цикл while?

Можно ли несколько циклов while соединить в один, либо как-то иначе оптимизировать данный код?
нюанс в том - что каждый из циклов - подвязан на свое собственное сообщение с определенными параметрами и просто сделать один цикл с одним одинаковым для всех сообщением - не вариант и не решение данной задачки.

можно ли данный код оптимизировать? и если да, то как?

while True:
    number_maps_1_3 = int(input(f"Введите кол-во для {interval_1}: "))
    if number_maps_1_3 <= levels_1_3:
        break
    print(f'ВНИМАНИЕ! Превышено. Введите меньшее кол-во.', end="\n")

while True:
    number_maps_4_7 = int(input(f"Введите кол-во для {interval_2}: "))
    if number_maps_4_7 <= levels_4_7:
        break
    print(f'ВНИМАНИЕ! Превышено. Введите меньшее кол-во.', end="\n")

while True:
    number_maps_8_11 = int(input(f"Введите кол-во карт для {interval_3}: "))
    if number_maps_8_11 <= levels_8_11:
        break
    print(f'ВНИМАНИЕ! Превышено. Введите меньшее кол-во.', end="\n")
  • Вопрос задан
  • 241 просмотр
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 4
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Если у вас в коде появились нумерованные переменные, вы точно что-то делаете не так.

Кроме рекомендации Rsa97 вынести однотипные действия в функцию, можно однотипные данные вынести в структуру. Например, словарь, список или что-то такое. И в одном цикле по условию переходить к «следующему» элементу структуры.

Можно вообще всё в класс объединить - однотипные данные и однотипные методы для работы с ними.
Ответ написан
Комментировать
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
def get_number(text:str, limit: int) -> int:
    while True:
        number = int(input(text))
        if number <= limit:
            return number
        print('ВНИМАНИЕ! Превышено. Введите меньшее кол-во.', end="\n")


number_maps_1_3 = get_number(f"Введите кол-во для {interval_1}: ", levels_1_3)
number_maps_4_7 = get_number(f"Введите кол-во для {interval_2}: ", levels_4_7)
...

И разберитесь с неймингом переменных как советуют выше
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вынести в отдельную функцию, которая принимает название интервала и ограничение и возвращает полученное значение.
Ответ написан
Комментировать
xottsy
@xottsy
Владимир Куц уже предоставил хорошее решение , но я все же дополню.
Так же можно использовать numba для ускорения или написать все на cython
cython = python но со строгой типизацией, вычислительный код на cython может работать в 5-30 раз быстрее
Придется установить Microsoft Visual C++ (MSVC)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы