파이썬 : TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

조회수 56회

2이상의 정수를 입력 받아 2부터 n까지 정수들의 약수의 개수와 소수를 출력하는 프로그램을 만들어야 하는데, 출력부분에서 막혀요.

def readNumber():
    while True:
        n = int(input("정수를 입력하세요: "))
        if (n >= 2):
            break
        else:
            print("2 이상의 숫자를 입력하세요.")
            continue

def getCountsOfDivisors(n):
    count = 0

    for i in range(1, n+1):
        if n % i == 0:
            count += 1

    print(count)

def isPrime(n):
    for f in range(2, n-1):
        if n % f == 0:
            print("False")
        else:
            print("True")


num = readNumber()
for t in range (2, num + 1):
    print("정수: " + str(t) + " 약수 개수: " + str(getCountsOfDivisors(t)) + " 소수: " + str(isPrime(t)))

이렇게 코드를 짰는데

Traceback (most recent call last):
  File "C:\Users\Desktop\Desktop\202110943 안세호 실습과제 #07.py", line 28, in <module>
    for t in range (2, num + 1):
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'

이런 오류가 떠요 뭐가 문제죠? 이미지 제가 원하는 출력 모습이에요.

1 답변

  • readNumber 함수의 리턴 값(반환 값)이 없어서 그렇습니다.

    아래와 같이 리턴 값을 추가해 주세요.

    def readNumber():
        while True:
            n = int(input("정수를 입력하세요: "))
            if (n >= 2):
                break
            else:
                print("2 이상의 숫자를 입력하세요.")
                continue
        return n
    

    일단 오류의 원인은 위와 같고요.

    그런데 다른 함수들도 리턴 값이 있어야 할것 같네요.

    보고 계신 교재에서 함수의 리턴 값을 다루는 부분을 꼭 찾아서 읽어보셔야 할 것 같아요.

    • 오류는 고쳐졌는데, 혹시 실행을 했을 때 왜 정수가 2, 3에서 함수 값이 None으로 출력되는지 알 수 있을까요? 안세호 2021.5.3 16:01

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

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.