Как можно упростить цикл while?
Хочется упростить код, который состоит из нескольких циклов while. Каждый из циклов - возобновляет свое собственное сообщение со своими данными, так что просто сделать 1 цикл с одинаковым для всех сообщением - не в рамках задачи.
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")
Ответы (2 шт):
Учитесь писать функции, как вам справедливо заметили в комментариях. Просто берёте весь повторяющийся функционал, и оформляете его функцией. А всё, что в разных фрагментах кода различается - передаёте в функцию в виде аргументов и используете их:
def input_while(text, limit):
while True:
n = int(input(f"Введите кол-во для {text}: "))
if n <= limit:
return n
print(f'ВНИМАНИЕ! Превышено. Введите меньшее кол-во.', end="\n")
number_maps_1_3 = input_while(interval_1, levels_1_3)
number_maps_4_7 = input_while(interval_2, levels_4_7)
number_maps_8_11 = input_while(interval_3, levels_8_11)
Дальше можно ещё код сократить, он тут тоже явно повторяется и напрашивается какой-то цикл по разным данным и одинаковому коду. Совершенствовать код можно бесконечно.
По хорошему, у вас два цикла. Во внешнем вы перебираете разные пары interval, level и в зависимости от них фильтруете входящие значения во внутреннем. Соответственно, оптимизацию вы можете провести на уровне структурирования данных, чтобы по ним можно было организовать внешний цикл. Например:
interval_level_seq = [
['A', 10],
['B', 20],
['C', 30],
]
number_maps = []
for interval, level in interval_level_seq:
while True:
number = input(f"Введите кол-во для {interval}: ")
try:
number = int(number)
assert number <= level
number_maps.append(number)
break
except ValueError:
print('ВНИМАНИЕ! Нужно ввести целое число')
except AssertionError:
print(f'ВНИМАНИЕ! Число не должно превышать {level}')