>, В конце концов, ответы должны быть где-нибудь, не так ли?:)
Umm, нет.
Как несколько отмеченных ответов, вопрос под-указанным способами, которые приглашают вопросы в ответ, не ответы. Взять всего один путь:
И затем который программы? Какая машина? Который ОС? Какой набор данных?
Это аналогичная конструкция, взятая из приведенной выше ссылки.
while True:
do_something()
if condition():
break
Предварительно упакованного "do-while" не существует, но общий способ Python для реализации специфических конструкций циклов - через генераторы и другие итераторы, например:
import itertools
def dowhile(predicate):
it = itertools.repeat(None)
for _ in it:
yield
if not predicate(): break
так, например:
i=7; j=3
for _ in dowhile(lambda: i<j):
print i, j
i+=1; j-=1
выполняет одну ногу, если хотите, даже если предикат уже ложен в начале.
Обычно лучше инкапсулировать больше логики цикла в ваш генератор (или другой итератор) - например, если у вас часто есть случаи, когда одна переменная увеличивается, один уменьшается, и вам нужен цикл do / while для их сравнения, вы можете написать:
def incandec(i, j, delta=1):
while True:
yield i, j
if j <= i: break
i+=delta; j-=delta
, который вы можете использовать как:
for i, j in incandec(i=7, j=3):
print i, j
Это зависит от вас, сколько логики, связанной с циклом, вы хотите поместить в свой генератор ( или другой итератор) и сколько вы хотите иметь за его пределами (как и при любом другом использовании функции, класса,или другой механизм, который вы можете использовать для рефакторинга кода из основного потока выполнения), но, вообще говоря, мне нравится видеть генератор, используемый в цикле for
, который имеет небольшое (в идеале никакое) управление циклом логика »(код, связанный с обновлением переменных состояния для следующего участка цикла и / или проверкой того, следует ли вам снова выполнять цикл).
Я предпочитаю использовать переменную цикла, так как она имеет тенденцию читать немного лучше, чем просто «while 1:», и без уродливого оператора break
:
finished = False
while not finished:
... do something...
finished = evaluate_end_condition()
Нет, нет. Вместо этого используйте цикл while
, например:
while 1:
...statements...
if cond:
break