[python 파이썬 기초] 무엇이 문제인가요~~~~~~

조회수 769회

n=int(input("user input :"))


numlist= [2];
listnum=1;
def numberOfPrime (n):
    for i in range(3,n):    
        if (n % i == 0):            
            numlist.append(n)
            listnum+=1;
            return numlist
            return listnum
        else:
            return print("소수가 아니므로 출력 X")

print(numberOfPrime(n))



소수이면 numlist 에 append하고 아니면 아니라고 출력하는 def 만드려고 하는데 뭐가 문젤까여...........

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

1 답변

  • n=int(input("user input :"))
    
    
    numlist= [2];
    listnum=1;
    def numberOfPrime (n):
        global  numlist
        global  listnum
        for i in range(3,n):    
            if (n % i == 0):            
                numlist.append(n)
                listnum+=1;
                return numlist ,listnum
            else:
                return  "소수가 아니므로 출력 X"
    
    print(numberOfPrime(n))
    

    문법적으로는 이정도 수정을 해야 할 것 같습니다. 그렇다고 알고리즘이 옳다는 것은 아닙니다.

    global 이라는 키워드를 쓰지 않은면 함수안의 listnum는 지역변수로 간주됩니다. 그런데 초기화하지 않고 연산에 이용하므로 에러가 발생합니다.

    재미있는 것은 global numlist를 생략하도 numlist 는 전역변수로 이해됩니다.

    numlist.append(n)에서 numlist는 이미 존재하는 인스턴스로 이해해서 로칼영역에 해당 변수를 찾고 없으므로 전역변수에서 찾는 것입니다.

    만약

    numlist =  numlist + [n] ( numlist  += [n] )
    

    로 하면 listnum+=1 와 동일한 에러가 발생합니다.

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

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

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

(ಠ_ಠ)
(ಠ‿ಠ)