파이썬 출력 관련 질문

조회수 694회

2~17의 수 중 자릿수를 입력받아서 피보나치 수열을 만들고 입력받은 자릿수에서 피보나치 수열중에 소수가 있으면 출력하고, 입력받은 자릿수에서 피보나치 수열중에 소수가 없으면 "소수 없음"을 출력하는 프로그램을 작성하고 있습니다.

while True:
    p_n = int(input("구하는 피보나치 수열의 자릿수를 입력해 주세요.(2~17) : "))
    if 1>= p_n or p_n>=18:
        print("범위에 맞는 수를 입력해주세요.")
        continue
    elif 1 < p_n < 18: # Search Range
        a = 10**(p_n-1); b = 10**p_n
        print("Search Range:", [a,b-1])
        break

i_1 = 0 ; i_2 = 1 ; fibo = 0 #i_1:1항, i_2:2항

while fibo<100000000000000000:#18자리이하
    fibo = i_1 + i_2 
    i_1 = i_2
    i_2 = fibo
    if fibo<100000000000000000:

        import math
        i = 0 ; x = 0
        if a < int(fibo) and 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("피보 소수 아님")

이런 상황에서 p_n이 2이면

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

이렇게 뜨고,

p_n이 7이면

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

이렇게 뜨는데 피보 소수가 있을 때는(예를들어 2를 입력했을때) '피보 소수가 없음'을 안뜨게 하고 피보 소수가 없을 때는 (예를 들어 7을 입력했을때) '피보 소수가 없음'을 뜨게 하고 싶습니다. 어떻게 해야 할까요

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

1 답변

  • 위의 코드가 의도하시는대로 잘 돌아간다고 생각하고 말씀드리겠습니다.

    현재 구현하신 코드를 보면 원하는 자릿수의 피보나치 수를 구한 상태에서 그 수가 소수이면 출력, 소수가 아니면 피보 소수 없음 을 출력하고 있습니다.

    이걸 피보나치 수가 소수인 경우에만 출력하고 그렇지 않을 경우 피보 소수 없음을 출력하려면 아래와 같이 하면 됩니다.

    pn = []
    
    # 피보나치 수 구하는 부분
        if result == 0:
            pn.append(fibo_)
    
    if len(pn) == 0:
        print('피보 소수 없음')
    else:
        for i in range(len(pn)):
            print('피보 소수:', pn[i])
    
    

    그게 아니라 (별 차이는 없습니다만) 일단 소수가 나오면 그 숫자는 출력하되 최종적으로 아무 숫자도 출력하지 않았을 경우에만 피보 소수 없음을 출력하고 싶으시다면 아래와 같은 방법이 있습니다.

    i = 0
    
    # 피보나치 수 구하는 부분
        if result == 0:
            print('피보 소수:', fibo_)
            i += 1
    
    if i == 0:
        print('피보 소수 없음')
    

    어려운 개념이 필요했던 건 아니니까 각 코드의 정확한 위치는 조금만 생각하시면 찾으실 수 있으실거예요

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

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

(ಠ_ಠ)
(ಠ‿ಠ)