Как я могу запускать цикл вечно до тех пор, пока не будет достигнуто условие завершения или для фиксированного количеств ⇐ Python

Программы на Python
Anonymous
Как я могу запускать цикл вечно до тех пор, пока не будет достигнуто условие завершения или для фиксированного количеств

Сообщение Anonymous »

У меня есть программа, которая выполняет операцию либо фиксированное количество раз, либо «вечно», пока не будет достигнуто какое-то условие. Реализация была хорошей, но у меня были проблемы с получением структуры кода, которая меня устраивала.
Моя первоначальная логика сводилась к следующему:

Код: Выделить всё

max_iterations = 5 # Either an integer or None (the number actually comes from user input)
stop_flag = False

i = 0
while not stop_flag:
do_some_operation(i)
i += 1
stop_flag = (i == max_iterations) or test_some_stop_condition()
Но мне это не очень понравилось, мне не нравится, что есть и переменная i, и флаг остановки.Флаг остановки можно убрать, переместив логику в while:

Код: Выделить всё

i = 0
while not ((i == max_iterations) or test_some_stop_condition()):
do_some_operation(i)
i += 1
но мне это кажется еще менее читабельным. Это условие не совсем понятно, теперь оно перенесено в while.
Итак, я использовал itertools.count для выполнения итерации:

Код: Выделить всё

import itertools
max_iterations = 5 # Either an integer or None (the number actually comes from user input)
for i in itertools.count():
do_some_operation(i)
if (i == max_iterations) or test_some_stop_condition():
break
Мне это тоже не очень нравится, но я думаю, что это достаточно понятно и читабельно. В идеале я думаю, что условие завершения должно полностью находиться в for или while, оставляя тело цикла полностью для фактической работы, но я не могу придумать, как сделать это чисто.< /p>
Есть ли лучшее решение?
Некоторые примечания:
  • i Переменная обязательна, так как do_some_operation использует ее.
  • Код: Выделить всё

    test_some_stop_condition()
    по-прежнему может возвращать значение True независимо от того, равно ли i None или int. Это нормально.
(Этот вопрос может лучше подойти к https://codereview.stackexchange.com/, я, честно говоря, нет. конечно...)

Подробнее здесь: https://stackoverflow.com/questions/790 ... xed-number

Вернуться в «Python»