Существует ли, “делают … до” в Python? [дубликат]

>, В конце концов, ответы должны быть где-нибудь, не так ли?:)

Umm, нет.

Как несколько отмеченных ответов, вопрос под-указанным способами, которые приглашают вопросы в ответ, не ответы. Взять всего один путь:

И затем который программы? Какая машина? Который ОС? Какой набор данных?

131
задан Community 23 May 2017 в 12:10
поделиться

4 ответа

В Python нет цикла do-while.

Это аналогичная конструкция, взятая из приведенной выше ссылки.

 while True:
     do_something()
     if condition():
        break
237
ответ дан 24 November 2019 в 00:15
поделиться

Предварительно упакованного "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 , который имеет небольшое (в идеале никакое) управление циклом логика »(код, связанный с обновлением переменных состояния для следующего участка цикла и / или проверкой того, следует ли вам снова выполнять цикл).

24
ответ дан 24 November 2019 в 00:15
поделиться

Я предпочитаю использовать переменную цикла, так как она имеет тенденцию читать немного лучше, чем просто «while 1:», и без уродливого оператора break :

finished = False
while not finished:
    ... do something...
    finished = evaluate_end_condition()
24
ответ дан 24 November 2019 в 00:15
поделиться

Нет, нет. Вместо этого используйте цикл while , например:

while 1:
 ...statements...
  if cond:
    break
10
ответ дан 24 November 2019 в 00:15
поделиться
Другие вопросы по тегам:

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