2016-08-10 2 views
-3

내가 코딩에 새로운 오전과 내가 10힘든 시간 이해 아래 파이썬 스크립트

N = 10      
primes = []  
for n in range(2,N+1):      
    for p in primes:   
     if n % p == 0: break   
    else:      
     primes.append(n)    
print(primes) 

내 질문 아래의 모든 소수를 인쇄하는 하드 이해 아래의 코드를 데하는의 값이 무엇인지 - 이것도 처음 반복하는 동안? 0 아닌가요? 그렇다면 n % p는 항상 0입니다. 이해 좀 도와주세요.

+3

당신은 ... ...이 코드가 무엇을 이해하기 위해 여기 저기 몇 가지'print' 문을 추가 할 수 있습니다! – deceze

+1

보기 힘들지 만'else'는'for' 루프의 일부처럼 보입니다. 그래서 처음에는 2를 추가하고, 이후 for 반복문에'if' 조건문을 사용하기 시작합니다. –

+0

코드가 잘못되었습니다. 수정했는지 확인하십시오. –

답변

0

for..in 빈 목록의 루프는 기본적으로 아무 것도하지 않습니다. "이 목록의 각 요소에 대해 무언가를하십시오"라고 표시되며 목록에 아무 것도 없으므로 아무 것도 수행하지 않습니다. 따라서 외부 루프의 첫 번째 반복에서 for p in primes은 아무 작업도 수행하지 않으며 else 절이 호출됩니다. 이 이후의 반복에

primes에서 뭔가, 그래서 루프가 호출 얻을 것이다 p 값으로 채워집니다. 루프가 break에 의해 중단되지 않는 한

for..in 루프의 else 절은 루프, 의 끝에서 실행됩니다. 그게 바로 당신의 코드에서 일어나고있는 것입니다 : 루프가 나누는 숫자를 찾으면 루프가 break이고 아무 것도 일어나지 않습니다. 그렇지 않으면 숫자가 primes에 추가됩니다.

간단한 알고리즘은 다음과 같습니다. 2 ~ 10의 숫자는 이미 발견 된 소수의 배수가 아닌 경우 소수입니다.