2016-10-24 7 views
-1

안녕하세요 저는이 프로그램을 만들어 숫자가 소수인지 확인했습니다. 그것은 작동하지만 어떤 이유로 999가 소수임을 말합니다. 내 실수는 어디 갔지. 누군가 설명하면 좋을 것입니다. 고맙습니다!숫자가 소수인지 검사하는 프로그램

number = raw_input('Enter a Number: ') 
nnumber = int(number) 
prime_range = range(2, nnumber) 

for x in prime_range: 

    if nnumber % x == 0: 
     print 'Not a Prime Number!' 
     break 

    else: 
     print 'Prime Number!' 
     break 
+1

프로그램이 실제로 짝수을 테스트한다 : 당신은 그것이 주요 아니라고 찾을 수없는 경우 아래의 모든 값을 확인 만 종료해야합니다. 홀수이기 때문에 프라임으로 선언하는 9를 테스트하면이 사실을 알 수 있습니다. – davejagoda

답변

6

추적하십시오. x2으로 시작한 다음 999 % 2을 테스트합니다. 1이므로 else이 실행되면 "소수!" 인쇄되고 루프가 분리됩니다. 프로그램이 종료됩니다.

대신 "소수 번호!"를 인쇄해야합니다. x에 대한 모든 가능성을 테스트 한 경우에만 이 작업을 수행하는 가장 쉬운 방법은 else:내어 쓰 (거기 break 삭제)하는 것입니다 : 당신이 원하는 정확히 :

for x in prime_range: 

    if nnumber % x == 0: 
     print 'Not a Prime Number!' 
     break 

else: 
    print 'Prime Number!' 

파이썬은 for 파괴되는 withoout for 완료 될 때의 else 실행합니다.

+0

좋은 점. Else는 while 루프 나 예외 처리와 같은 파이썬의 다른 많은 상황에서도 사용될 수 있습니다. 자세한 내용은 http://python-notes.curiousefficiency.org/en/latest/python_concepts/break_else.html을 참조하십시오. –

+0

고마워요 선생님! :) –

+0

하지만 선생님, 내 코드가 다른 정수에서 작동하는 이유는 무엇입니까? –

1

숫자가 소수 인 경우, 즉 어떤 숫자가 균등 한 자체 외에 그것을 구분 없음을 의미합니다 :

여기 내 프로그램입니다. 즉, 숫자가 소수라고 말할 수 있기 전에 모든 숫자를 확인해야합니다.

코드에서 숫자의 크기에 관계없이 첫 번째 반복에서 루프를 종료합니다.

0

판단에 문제가 있거나 소수 만 가능하거나 소수를 나눌 수 있습니다. 당신은 재판관이 전체가 2인데 소수가 아니라면 판결 조건을 수행하기 위해 이중 루프를 사용해야합니다.

0

첫 번째 반복 만 확인하고 있습니다. 프라임인지 아닌지에 관계없이 섹션 중 하나 인 'if'또는 'else'가 실행되어 루프가 끊어지기 때문에 루프에서 빠져 나옵니다. 논리는 2에서 (number/2)까지의 전체 숫자 범위를 확인하는 것이고, 어떤 지점에서 숫자를 나눌 경우 소수가 아닐 것입니다. 루프가 전체 루프를 반복 한 후에 종료하면 소수가됩니다. 당신이 지금 그것을 할 수 있기를 바랍니다. 감사!.

0

기존 코드는 입력 한 숫자가 2로 나눌 수 있고 그 중 루프에서 벗어나는 경우에만 테스트합니다. 그것은 '첫 번째'확인 if` 후 break`를 호출하기 때문에

number = raw_input('Enter a Number: ') 
nnumber = int(number) 
prime_range = range(2, nnumber) 

prime = True 

for x in prime_range: 
    if nnumber % x == 0: 
     prime = False 
     break 

if prime: 
    print 'Prime Number!' 
else: 
    print 'Not a Prime Number!'