파이썬 피보나치 수열에서 소수 찾기 질문입니다.

조회수 777회
 import math
        i = 0 
        if a < int(fibo) < b-1 : #int(fibo) : p_n자리수
            k = int(math.sqrt(int(fibo)))  # 루트 씌워서 나눌 준비
            for i in range(2,k+1):
                result = int(fibo)%i 
                fibo_ = fibo
                if result == 0: # 나머지 0 : 소수아님
                    break
            if result != 0: # 나머지 != 0 :소수
                print("피보 소수:",fibo_)
            else:
                print("피보 소수 없음")

2이상 17이하의 자리수를 받아서 피보나치 수열을 만든뒤에 해당되는 자리수의 피보나치 수 중에서 소수가 되는 수를 모두 구하고 출력하는 프로그램을 작성하려고 합니다.

자리수가 두자리일때 프로그램을 run 하니

피보 소수: 13
피보 소수 없음
피보 소수 없음
피보 소수 없음
피보 소수: 89

이렇게 나오고 자리수가 7자리일때는

피보 소수 없음
피보 소수 없음
피보 소수 없음
피보 소수 없음
피보 소수 없음

으로 나옵니다. 자리수가 두자리일때 피보 소수 없음을 안뜨게 하는 방법이 뭐가 있을까요..

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 코드 일부분이 빠진 것 같아서 정확히는 모르겠습니다.

    올려주신 코드만 보면 출력하는 부분이 하나밖에 없는데 다섯번이나 찍힌다고 하셔서요..

    일단 눈에 보이는 부분만 지적해드리자면

    a < int(fibo) < b-1 이런 표현은 사람들에게는 익숙하지만 파이썬은 제대로 이해할 수 없는 표현입니다.

    파이썬에서는 True가 1, False가 0에 해당합니다.

    위 부등식은 (a < int(fibo)) < b-1와 같기 때문에 a < int(fibo)가 참이면 저 식은 곧 True < b-1이 되고, 이건 1 < b-1이 되는 거라서 만약에 b가 2 이상의 숫자이면 혹시 fibo가 b보다 큰 수라 하더라도 참이 됩니다.

    이런 부분에서도 문제가 있었을 것 같아요.

    그리고 올려주신 질문만으로는 정확히 어떻게 동작하는 코드를 원하시는건지 잘 모르겠습니다.

    피보 소수 없음을 안 뜨게 하는 방법은.. 그 출력문을 지우면 됩니다.

    그런데 아마 모든 상황에서 뜨지 않는 것을 원하신 것 같지는 않으니, 다음부터는 정확히 어떤 조건에서 어떻게 동작하기를 원하시는지 자세히 말씀해 주세요

    • 모든 코드를 다 올려보면 될까요? 알 수 없는 사용자 2020.4.29 14:06
    • 제가 원하는건 피보 소수가 뜰때는 피보 소수 없음이 안뜨게 하고 피보 소수가 안뜰때에는 피보 소수 없음이 뜨게 하는 겁니다. 알 수 없는 사용자 2020.4.29 14:08
    • 순차적으로 출력하는 대신 fibo_를 리스트로 저장해뒀다가 리스트에 값이 저장되어 있으면 그 숫자를 출력하고 리스트가 비어있을 때에만 없다는 내용을 출력하는건 어떠세요? HIAOAIH 2020.4.29 14:31

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)