다음 코드는 Python에서 합법적이라는 것을 알았습니다. 내 질문은 왜? 특별한 이유가 있습니까?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
after:
.
다음 코드는 Python에서 합법적이라는 것을 알았습니다. 내 질문은 왜? 특별한 이유가 있습니까?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
after:
.
답변:
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()
while {} something
제외 (가) 것을 something
당신이 경우 생략됩니다 break
에 while
루프.
else
당신이 try 블록의 바닥을 루프 조건을 누르거나 떨어지는으로, 일반적으로 블록을 종료하면 절은 실행됩니다. 그것은되어 있지 당신이 경우 실행 break
또는 return
블록의 아웃, 또는 예외를 발생. while 및 for 루프뿐만 아니라 블록도 시도합니다.
일반적으로 일반적으로 루프를 일찍 종료하는 장소에서 찾을 수 있으며 루프 끝에서 벗어나는 것은 예기치 않은 / 특별하지 않은 경우입니다. 예를 들어 값을 찾는 목록을 반복하는 경우 :
for value in values:
if value == 5:
print "Found it!"
break
else:
print "Nowhere to be found. :-("
found_it=False
루프를 시작할 때 몇 번이나했는지 모르고 found_it
마지막 에 if 체크를 수행하십시오
에 대한 답으로 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
사용 되지 않는 한 마지막에 실행 됩니다.
대부분의 경우이 작업을 수행하는 더 좋은 방법이 있지만 (기능에 래핑하거나 예외를 발생시키는) 작동합니다!
else-clause는 while 조건이 false로 평가 될 때 실행됩니다.
로부터 문서 :
while 문은 표현식이 참인 한 반복 실행에 사용됩니다.
while_stmt ::= "while" expression ":" suite ["else" ":" suite]
이것은 반복적으로 표현식을 테스트하고, 참이면 첫 번째 스위트를 실행합니다. 표현식이 false 인 경우 (처음 테스트 될 수 있음)
else
절의 스위트가 있으면 실행되고 루프가 종료됩니다.
break
최초의 제품군에서 실행 문은 실행하지 않고 루프를 종료else
조항의 스위트 룸.continue
최초의 제품군에서 실행 문은 제품군의 나머지 부분을 건너 뛰고 식을 테스트로 돌아갑니다.
저의 대답은 우리가 언제 / 어떻게 사용할 수 있는지에 초점을 맞출 것입니다.
언뜻보기에, 사용할 때 아무런 차이가없는 것 같습니다
while CONDITION:
EXPRESSIONS
print 'ELSE'
print 'The next statement'
과
while CONDITION:
EXPRESSIONS
else:
print 'ELSE'
print 'The next statement'
print 'ELSE'
명령문이 항상 두 경우 모두 실행되는 것처럼 보이기 때문에 ( while
루프가 완료되거나 실행되지 않은 경우).
그러면 명령문 print 'ELSE'
이 실행되지 않을 때만 다릅니다 . break
코드 블록 안에 내부 가있을 때입니다.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
다른 경우 :
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
위의 두 경우에 대해 동일한 효과를 나타 내기 때문에이 범주에 속하지 않습니다.
예외 발생은 다음 코드가 실행될 위치에서 예외 처리기 (블록 제외)에있을 때 else
절에서 또는 절 바로 뒤의 코드 while
가 실행되지 않기 때문에 차이가 발생하지 않습니다.
나는 이것이 오래된 질문이라는 것을 알고 있지만 ...
Raymond Hettinger가 말했듯이 while/no_break
대신 대신 호출해야합니다 while/else
.
이 스 니펫을 보면 이해하기 쉽다는 것을 알았습니다.
n = 5
while n > 0:
print n
n -= 1
if n == 2:
break
if n == 0:
print n
이제 while 루프 후 상태를 확인하는 대신이를 교체하고 else
해당 확인을 제거 할 수 있습니다 .
n = 5
while n > 0:
print n
n -= 1
if n == 2:
break
else: # read it as "no_break"
print n
나는 항상 while/no_break
코드를 이해하기 위해 그것을 읽었고 그 구문은 나에게 훨씬 더 합리적입니다.
else 절은 while 조건 이 false가 될 때만 실행됩니다 .
여기 몇 가지 예가 있어요.
예 1 : 처음에 조건이 false이므로 else-clause 가 실행됩니다.
i = 99999999
while i < 5:
print(i)
i += 1
else:
print('this')
산출:
this
예 2 : 동안 조건이 i < 5
있기 때문에 거짓이되었다 결코 i == 3
루프, 그래서 휴식 다른 절은 실행되지 않았습니다.
i = 0
while i < 5:
print(i)
if i == 3:
break
i += 1
else:
print('this')
산출:
0
1
2
3
예 3 : 동안 조건이 i < 5
때 거짓되었다 i
이었다가 5
, 그래서 다른 절은 실행되었다.
i = 0
while i < 5:
print(i)
i += 1
else:
print('this')
산출:
0
1
2
3
4
this
else:
문은 while 루프가 더 이상 조건을 충족하는 경우에만 (귀하의 예제에서, 때 때 실행되는 n != 0
거짓 없음).
결과는 다음과 같습니다.
5
4
3
2
1
what the...
while 루프가 중단되지 않으면 Else가 실행됩니다.
나는 '런너'비유로 생각하고 싶습니다.
"else"는 트랙의 시작 또는 끝에서 시작했는지에 관계없이 결승선을 통과하는 것과 같습니다. "else"는 중간에 어딘가에있을 경우 에만 실행 되지 않습니다 .
runner_at = 0 # or 10 makes no difference, if unlucky_sector is not 0-10
unlucky_sector = 6
while runner_at < 10:
print("Runner at: ", runner_at)
if runner_at == unlucky_sector:
print("Runner fell and broke his foot. Will not reach finish.")
break
runner_at += 1
else:
print("Runner has finished the race!") # Not executed if runner broke his foot.
주요 사용 사례는 이것을 중첩 루프에서 분리하거나 루프가 어딘가에서 깨지지 않은 경우에만 문을 실행하려는 경우입니다 (특별한 상황이 아닌 것을 생각하십시오).
예를 들어, 다음은 변수 나 try / catch를 사용하지 않고 내부 루프를 해제하는 방법에 대한 메커니즘입니다.
for i in [1,2,3]:
for j in ['a', 'unlucky', 'c']:
print(i, j)
if j == 'unlucky':
break
else:
continue # Only executed if inner loop didn't break.
break # This is only reached if inner loop 'breaked' out since continue didn't run.
print("Finished")
# 1 a
# 1 b
# Finished
파이썬에서 'while : else :'구성을 더 잘 사용하려면 'while'에서 루프가 실행되지 않으면 'else'문이 실행됩니다. 아래 코드를 동일한 결과로 사용할 수 있기 때문에 오늘날의 작동 방식은 의미가 없습니다 ...
n = 5
while n != 0:
print n
n -= 1
print "what the..."
else
루프 사용 break
또는 return
키워드를 떠나면 블록이 실행되지 않는다는 것 입니다. 귀하의 예에서 print
루프가 break
명령에 따라 종료 된 경우에도 실행됩니다 .
사회적 상호 작용에 유용합니다.
while (Date != "January 1st"):
time.sleep(1)
else:
print("Happy new year!")
else
여기 의 목적은 정확히 무엇 입니까? 코드가 없으면 코드가 정확히 동일합니다.
break
카운트 다운 중에 시계와 달력 을 사용하지 않으면 else
"새해 복 많이 받으세요!"라고 말하게됩니다. 말이 안되는 순간.
break
" 이라면 무엇을 의미 합니까? break
코드 에는 없습니다 .
else
용도로 사용 되는 단어의 선택은 상당히 나쁜 생각이며 더 이상 그렇게하지 않을 것이라고 생각합니다.