2014-10-08 2 views
-2
for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
      break 
    else : 
     print(n,"prime") 

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
     else : 
      print(n,"prime") 

은 일찍 외부 루프, 현재 사용하지 않는 구문 오류가 휴식이 해킹 모두 코드두 프로그램의 차이점은 무엇입니까?

+1

들여 쓰기를 고려해보십시오. 의미가 명확하지 않습니다. – bereal

+0

'break' 문은 실제로 가장 작은 둘러싸는'for' 또는'while' 루프에서 빠져 나옵니다. –

+0

가능한 복제본 [왜 for 및 while 루프 뒤에 'else'를 사용합니까?] (http://stackoverflow.com/questions/9979970/why-does-python-use-else-after-for-and-while- 루프) – KillianDS

답변

-1

에서 다른 사람의 사용의 차이를 알고 싶어요. 예를 들어,

https://stackoverflow.com/a/654002/921082

는하지만 종종 이해를 나누기 때문에 당신이 그것을하는 것이 좋습니다 않을 것입니다. 내부 루프가 중지되면 항상 외부 루프를 중지하기 위해 True/False 플래그를 사용할 수 있습니다.

+0

이것은 기괴합니다. 나는 몰랐다. 그래서 우리가 깰 수없는 경우에만 다른 사람에게 들어갑니다. 그것은 실제로 냉담한 것입니다. else를 사용하여 루프에 정리 절을 코딩 할 수 있습니다. –

+1

-1 : 1) 그것은 해킹이 아니며 (실제로는 표준 파이썬 기능입니다. 이상하게 보입니다) 2) 루프를 벗어나는 것은 break 문이하는 것입니다. 'else' 사실, 그것은 실제로 질문이었습니다. – KillianDS

+0

확실히 해킹이 아닙니다! –

0

코드 예제 1 :이 코드는 n이 소수가 될 수 없다는 것을 확인하자마자 루프에서 깨집니다. for 루프가 정상적으로 종료 할 때마다 다른 문은 'm에 대한'루프와 관련, 및 실행 (즉이 쉬지 않고 범위의 끝에 도달입니다)

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
      break 
    else : 
     print(n,"prime") 

다른 사람이 사용하지 않습니다 해킹 (다른 곳에서 제안 된 바와 같이 해킹은 실제로 작동해서는 안되는 것이지만 실제로는 언어가 의도적으로 설계된 부분이며 이러한 경우에 맞게 설계되었습니다.

코드 예제 2 : 여기서 n은 소수가 아니며 여기에있는 else는 if와 연결되어 if 문에서 조건부가 거짓 일 때마다 실행됩니다 (예 : n % m! = 0). 이 버전은 버그가 있습니다. 잠재적으로 주어진 숫자가 프라임이 아닌 여러 번 프라임이 아님을 알게 될 것입니다.

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
     else : 
      print(n,"prime") 

요약 - 코드 예제 1은 3과 9 사이의 각 숫자에 대해 소수인지 여부를 올바르게보고한다는 점에서 정확합니다. 엄밀히 말하면 내부 루프는 다음과 같습니다.

for m in range(3, n/2): 

기능 손실이 없습니다.

0
for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
      break 
    else: 
     print(n,"prime") 

출력 : -

여기
(3, 'prime') 
(4, 'prime') 
(5, 'prime') 
(6, 'not prime') 
(7, 'prime') 
(8, 'not prime') 
(9, 'not prime') 

for 루프 내부를 중단하고 다른 문을 실행 break. 동안 2

for n in range(3,10): 
    for m in range (3,n): 
     if n%m==0: 
      print(n, "not prime") 
     else : 
      print(n,"prime") 

OUPUT에서 -

(4, 'prime') 
(5, 'prime') 
(5, 'prime') 
(6, 'not prime') 
(6, 'prime') 
(6, 'prime') 
(7, 'prime') 
(7, 'prime') 
(7, 'prime') 
(7, 'prime') 
(8, 'prime') 
(8, 'not prime') 
(8, 'prime') 
(8, 'prime') 
(8, 'prime') 
(9, 'not prime') 
(9, 'prime') 
(9, 'prime') 
(9, 'prime') 
(9, 'prime') 
(9, 'prime') 

그 내부 루프에서 계속된다. 체크 아웃 : for else 절.

관련 문제