문제
정수 num을 매개변수로 받아 각 자리 숫자(digit)의 합을 계산하는 sumOfDigits() 함수를 작성하세요. 단, 나눗셈을 이용하지 말고 리스트를 사용해서 풀어보세요.
예 1
입력:
643
출력(6 + 4 + 3 = 13):
13
예 2
입력:
47253
출력:
21
코드 설명
- 리스트 컴프리헨션
- 입력받은 문자열 num에서 각 문자를 정수로 변환하여 리스트 digits를 생성합니다.
- 예: "12345" → [1, 2, 3, 4, 5]
- digits = [int(digit) for digit in num]
- 리스트의 합 계산
- sum(digits)는 리스트 digits의 요소를 모두 더한 값을 반환합니다.
- 예: [1, 2, 3, 4, 5] → 15
- return sum(digits)
- 사용자 입력
- 사용자가 입력한 숫자는 문자열로 저장됩니다. 예: 12345 → "12345"
- num = input("숫자를 입력하세요: ")
- 출력
- 함수가 반환한 값을 출력합니다.
- print("각 자릿수의 합:", sumOfDigits(num))
테스트 결과
입력값
숫자를 입력하세요: 12345
출력값
각 자릿수의 합: 15
문제가 발생한 원인 (사실 내가 처음에 쓴 코드다)
기존 코드
def sumOfDigits(num):
[int(digit) for digit in num] # 결과를 저장하지 않음
print(sum(digits)) # digits 변수가 정의되지 않음
문제점:
- 리스트 컴프리헨션 결과를 저장하지 않음
- **[int(digit) for digit in num]**는 리스트를 생성하지만, 이를 변수에 저장하지 않아 결과를 사용할 수 없습니다.
- 정의되지 않은 변수 사용
- **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
변경된 부분
- sum을 total로 변경
- **sum**은 파이썬 내장 함수로 이미 정의되어 있습니다.
- 변수 이름을 **total**로 변경하여 충돌을 방지했습니다.
- 나머지 로직은 문제없이 작동합니다.
코드 동작 설명
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
문제가 발생한 이유
- sum을 변수 이름으로 사용:
- sum은 이미 파이썬 내장 함수로 정의되어 있어, 덮어쓰면 예상치 못한 동작이 발생합니다.
- 이로 인해 코드 실행 중 오류가 발생했습니다.
- 변수명 충돌 방지:
- total 같은 다른 이름을 사용하면 문제를 해결할 수 있습니다.
이제 수정한 코드로 문제없이 동작할 거예요! 😊 추가로 궁금한 점이 있다면 언제든지 물어보세요!
네~~~~
'Python' 카테고리의 다른 글
데이터 전처리: 이상치 탐지 및 처리 (0) | 2024.12.03 |
---|---|
데이터 전처리: 결측치 탐지와 처리 방법 (0) | 2024.12.03 |
4.2.3 연습 문제: 회문 판별 함수 만들기 (2) | 2024.11.29 |
4.2.2 슬라이싱 (0) | 2024.11.29 |
4.2.1. 연습 문제: 아이돌 팬 (1) (1) | 2024.11.29 |