Python

4.2.4 연습 문제: 각 자리 숫자의 합을 구하는 함수(리스트를 이용)

수현조 2024. 11. 29. 11:57

문제

정수 num을 매개변수로 받아 각 자리 숫자(digit)의 합을 계산하는 sumOfDigits() 함수를 작성하세요. 단, 나눗셈을 이용하지 말고 리스트를 사용해서 풀어보세요.

예 1

입력:

643

출력(6 + 4 + 3 = 13):

13

예 2

입력:

47253

출력:

21

내가 쓴 답..

코드 설명

  1. 리스트 컴프리헨션
    • 입력받은 문자열 num에서 각 문자를 정수로 변환하여 리스트 digits를 생성합니다.
    • 예: "12345" → [1, 2, 3, 4, 5]
  2. digits = [int(digit) for digit in num]
  3. 리스트의 합 계산
    • sum(digits)는 리스트 digits의 요소를 모두 더한 값을 반환합니다.
    • 예: [1, 2, 3, 4, 5] → 15
  4. return sum(digits)
  5. 사용자 입력
    • 사용자가 입력한 숫자는 문자열로 저장됩니다. 예: 12345 → "12345"
  6. num = input("숫자를 입력하세요: ")
  7. 출력
    • 함수가 반환한 값을 출력합니다.
  8. print("각 자릿수의 합:", sumOfDigits(num))

테스트 결과

입력값

숫자를 입력하세요: 12345

출력값

각 자릿수의 합: 15

문제가 발생한 원인 (사실 내가 처음에 쓴 코드다)

기존 코드

def sumOfDigits(num):
    [int(digit) for digit in num]  # 결과를 저장하지 않음
    print(sum(digits))  # digits 변수가 정의되지 않음

문제점:

  1. 리스트 컴프리헨션 결과를 저장하지 않음
    • **[int(digit) for digit in num]**는 리스트를 생성하지만, 이를 변수에 저장하지 않아 결과를 사용할 수 없습니다.
  2. 정의되지 않은 변수 사용
    • **sum(digits)**에서 digits가 정의되지 않았기 때문에 NameError가 발생합니다.

 

힌트

정수의 나눗셈과 나머지 구하는 법: 1.2 숫자 계산을 보세요.

사용자 입력을 받는 방법: 1.5. 명령해석기를 보세요.

??? 정답 복붙 했는데 틀렸다네요?

 

코드가 제대로 동작하지 않는 이유는 변수 이름으로 **sum**을 사용했기 때문입니다. sum은 Python 내장 함수인데, 사용자가 같은 이름으로 변수를 선언하면 내장 함수가 덮어씌워져서 오류가 발생합니다. 😅


수정된 코드

def sumOfDigits(num):
    total = 0  # 'sum' 대신 다른 변수명 사용
    for c in list(str(num)):
        total += int(c)
    return total

if __name__ == '__main__':
    print(sumOfDigits(47253))  # 출력: 21
    print(sumOfDigits(643))    # 출력: 13

변경된 부분

  1. sum을 total로 변경
    • **sum**은 파이썬 내장 함수로 이미 정의되어 있습니다.
    • 변수 이름을 **total**로 변경하여 충돌을 방지했습니다.
  2. 나머지 로직은 문제없이 작동합니다.

코드 동작 설명

1. 숫자를 문자열로 변환

list(str(num))
  • 입력받은 숫자를 문자열로 변환하고, 각 자릿수를 리스트로 나눕니다.
  • 예: 47253 → ['4', '7', '2', '5', '3'].

2. for문으로 각 자릿수를 더함

for c in list(str(num)):
    total += int(c)
  • 각 문자(c)를 정수(int)로 변환하여 total에 더합니다.

3. 결과 반환

return total
  • 최종적으로 합계를 반환합니다.

실행 결과

입력값:

print(sumOfDigits(47253))
print(sumOfDigits(643))

출력값:

21
13

문제가 발생한 이유

  1. sum을 변수 이름으로 사용:
    • sum은 이미 파이썬 내장 함수로 정의되어 있어, 덮어쓰면 예상치 못한 동작이 발생합니다.
    • 이로 인해 코드 실행 중 오류가 발생했습니다.
  2. 변수명 충돌 방지:
    • total 같은 다른 이름을 사용하면 문제를 해결할 수 있습니다.

이제 수정한 코드로 문제없이 동작할 거예요! 😊 추가로 궁금한 점이 있다면 언제든지 물어보세요!

네~~~~