Лучший способ отображения информации после того, как условие было превышено [duplicate]

Помните, если вы используете sudo для привязки к порту 80 и используете переменные env PORT & amp; NODE_ENV вы должны повторно экспортировать эти вары, поскольку теперь вы находитесь под корневым профилем, а не с вашим профилем пользователя. Итак, чтобы заставить это работать на моем Mac, я сделал следующее:

sudo su
export NODE_ENV=production
export PORT=80
docpad run
224
задан Trevor Hickey 27 June 2016 в 02:13
поделиться

8 ответов

Предложение else выполняется только тогда, когда ваше условие while становится ложным. Если вы break вышли из цикла или если возникло исключение, оно не будет выполнено.

Один из способов думать об этом - это как конструкция if / else относительно условия:

if condition:
    handle_true()
else:
    handle_false()

аналогична конструкции цикла:

while condition:
    handle_true()
else:
    # condition is false now, handle and go on with the rest of the program
    handle_false()

Пример может быть в строках:

while value < threshold:
    if not process_acceptable_value(value):
        # something went wrong, exit the loop; don't pass go, don't collect 200
        break
    value = update(value)
else:
    # value >= threshold; pass go, collect 200
    handle_threshold_reached()
273
ответ дан ars 15 August 2018 в 18:08
поделиться
  • 1
    +1: хороший пример того, как это влияет на использование! :-) – eruciform 21 July 2010 в 03:54
  • 2
    "Предложение else выполняется только тогда, когда ваше условие становится ложным. & quot; Формулировка здесь означает, что ваше состояние while переходит из состояния true в false, а другое будет выполнено. Однако, если while никогда не является истинным, предложение else все равно будет выполнено. – user597608 10 October 2014 в 22:11
  • 3
    pseudocode Так исправьте меня, если я ошибаюсь, но это точно так же, как while {} something except , что something будет пропущен, если вы break в while. – Daniel Kaplan 18 March 2015 в 22:48
  • 4
    Возможно, самым точным псевдокодом будет: while (True) {if (cond) {handle_true (); } else {handle_false (); ломать; }} – VinGarcia 5 December 2016 в 15:46

Оператор else: выполняется тогда и только тогда, когда цикл while больше не соответствует его условию (в вашем примере, когда n != 0 является ложным).

Таким образом, выход будет следующим:

5
4
3
2
1
what the...
0
ответ дан BoltClock 15 August 2018 в 18:08
поделиться
  • 1
    Я знаю, но этот вид while / else не работает на Java. Мне очень интересно, когда я понял, что это работает на Python. Мне было просто любопытно и хотелось знать техническую причину. – Ivan 21 July 2010 в 03:57
  • 2
    @Ivan: Это не так, что в Java это не работает work , но в Java это не существует . Его можно заставить работать, если кто-то захочет добавить его на язык. – Ignacio Vazquez-Abrams 21 July 2010 в 08:52

Это полезно для социального взаимодействия.

while (Date != "January 1st"):
    time.sleep(1)
else:
    print("Happy new year!")
0
ответ дан Guimoute 15 August 2018 в 18:08
поделиться

Мой ответ будет сосредоточен на КОГДА мы можем использовать while / for-else.

На первый взгляд кажется, что при использовании

while CONDITION:
    EXPRESSIONS
print 'ELSE'
print 'The next statement'

и

while CONDITION:
    EXPRESSIONS
else:
    print 'ELSE'
print 'The next statement'

Поскольку оператор print 'ELSE', как представляется, всегда выполняется в обоих случаях (оба, когда цикл while закончен или не запущен).

Тогда это отличается только тогда, когда оператор print 'ELSE' не будет выполнен. Когда внутри [code] while

In [17]: i = 0

In [18]: while i < 5:
    print i
    if i == 2:
        break
    i = i +1
else:
    print 'ELSE'
print 'The next statement'
   ....:
0
1
2
The next statement

имеется break, есть break, если он отличается от:

In [19]: i = 0

In [20]: while i < 5:
    print i
    if i == 2:
        break
    i = i +1
print 'ELSE'
print 'The next statement'
   ....:
0
1
2
ELSE
The next statement

return, поскольку он делает тот же эффект для двух вышеприведенных случаев.

exception raise также не вызывает различий, потому что когда он поднимается, где следующий код будет выполнен, в обработчике исключений (кроме блока), код в else или сразу после того, как предложение while не будет выполнено.

12
ответ дан HVNSweeting 15 August 2018 в 18:08
поделиться

Лучше использовать конструкцию «while: else:» в Python, если цикл «while» не выполняется, тогда выполняется оператор «else». То, как он работает сегодня, не имеет смысла, потому что вы можете использовать код ниже с теми же результатами ...

n = 5
while n != 0:
    print n
    n -= 1
print "what the..."
-1
ответ дан Jean Ferri 15 August 2018 в 18:08
поделиться
  • 1
    Нет, разница в том, что блок else не будет выполнен, если вы покидаете цикл, используя ключевое слово break или return. В вашем примере print будет запущен также, если цикл закончился в команде break. – Mariusz Pluciński 21 October 2013 в 17:43
  • 2
    Вы описываете, как большинство людей желает, чтобы эта функция работала, а не как она работает на самом деле! – dotancohen 29 February 2016 в 10:42

Предложение else выполняется, если вы выходите из блока в обычном режиме, нажав на условие цикла или опустив нижнюю часть блока try. Это not выполняется, если вы break или return вышли из блока или вызвали исключение. Он работает не только во время и за циклами, но и пытается блокировать.

Обычно вы находите его в местах, где обычно вы выходите из цикла раньше, а отключение конца цикла является неожиданным / необычным повод. Например, если вы просматриваете список, ищущий значение:

for value in values:
    if value == 5:
        print "Found it!"
        break
else:
    print "Nowhere to be found. :-("
69
ответ дан John Kugelman 15 August 2018 в 18:08
поделиться

В ответ на Is there a specific reason? здесь представлено одно интересное приложение: разрыв нескольких уровней цикла.

Вот как это работает: внешний контур имеет разрыв в конце, поэтому он будет выполняется только один раз. Однако, если внутренний цикл завершает (не находит делителя), он достигает выражения else, и внешний разрыв никогда не достигается. Таким образом, разрыв во внутреннем цикле будет выходить из обеих петель, а не только из одного.

for k in [2, 3, 5, 7, 11, 13, 17, 25]:
    for m in range(2, 10):
        if k == m:
            continue
        print 'trying %s %% %s' % (k, m)
        if k % m == 0:
            print 'found a divisor: %d %% %d; breaking out of loop' % (k, m)
            break
    else:
        continue
    print 'breaking another level of loop'
    break
else:
    print 'no divisor could be found!'

Для циклов while и for оператор else выполняется в конец, если не было использовано break.

В большинстве случаев есть лучшие способы сделать это (обертывание его в функцию или создание исключения), но это работает!

29
ответ дан Mark 15 August 2018 в 18:08
поделиться
  • 1
    Почему нисходящий? – Mark 17 October 2014 в 19:21
  • 2
    Я не спускал вниз, но я думаю, что знаю, почему кто-то это сделал. Вы не отвечаете на вопрос, и вы предоставляете 14 строк кода только с двумя строками описания. Если есть вопрос к интересующему вас вопросу, вы не говорите нам ... – BlueEel 1 December 2014 в 13:01
  • 3
    @BlueEel благодарит за отзыв! Я добавил больше объяснений по поводу кода и дал понять, как это отвечает на вопрос (потому что он отвечает на часть его). – Mark 3 December 2014 в 13:52
  • 4
    Вам удалось разместить свой код в контексте, и хотя вы не отвечаете на все вопросы, которые я вижу сейчас. Я поддержал ваш ответ, поскольку теперь он полезен новичкам и новичкам (как я в отношении python). - Спасибо, я кое-что узнал. – BlueEel 4 December 2014 в 00:31
  • 5
    Мне нравится простое приложение - теперь я понимаю, почему кто-то может его использовать. Хотя я никогда не видел необходимости. – gabe 25 February 2015 в 11:23

Предложение else выполняется, когда условие while оценивается как false.

Из документации :

Оператор while используется для повторного выполнения, если выражение истинно:

while_stmt ::=  "while" expression ":" suite
                ["else" ":" suite]

Это многократно проверяет выражение и, если оно истинно, выполняет первый набор; если выражение ложно (это может быть первый раз, когда оно проверено), набор else, если он присутствует, выполняется и цикл завершается.

Оператор break, выполняемый в первый набор завершает цикл без выполнения пакета предложения else. Оператор continue, выполненный в первом пакете, пропускает остальную часть пакета и возвращается к тестированию выражения.

15
ответ дан trss 15 August 2018 в 18:08
поделиться
Другие вопросы по тегам:

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