Python
3.1.1 연습 문제: 자릿수를 구하는 함수 만들기
수현조
2024. 11. 27. 12:44
문제
양(陽)의 정수를 입력받아, 그 수가 몇 자리 숫자인지 출력하는 함수 numOfDigits()를 만들어 보세요.
예
>>> numOfDigits(12345)
5
>>> numOfDigits(1234567890)
10
나는 풀어보았다.
그리고 지피티한테 검사받으니,
작성하신 코드는 동작은 하지만 문제 요구사항과 정확히 일치하지 않을 가능성이 있습니다.
문제에서 요구하는 것은 **"숫자(정수)의 자릿수를 구하는 함수"**이기 때문에, 아래 사항들을 점검해야 합니다:
정답 여부
작성하신 코드:
def numOfDigits(): print(len(input())) numOfDigits() |
- 동작은 잘 됩니다.
- 간단히 문자열 길이를 구할 수 있습니다.
단점:
- 문제 요구사항과 약간 다릅니다. 숫자가 아닌 입력도 처리될 수 있습니다.
- 반환값 대신 출력값을 사용하므로 유연성이 낮습니다.
작성한 코드 점검
- 코드 동작:
- input()으로 입력받은 문자열의 길이를 구합니다.
- 이 방식은 입력이 숫자가 아니어도 작동합니다.
예: "hello"를 입력해도 자릿수를 출력합니다.
- 제약사항:
- 문제는 정수의 자릿수를 구하는 것이므로, 입력 값이 반드시 숫자여야 합니다.
수정이 필요한 부분
1. 함수 매개변수 추가
- numOfDigits() 함수에 매개변수를 추가해, 숫자를 직접 전달받도록 수정하는 것이 일반적입니다.
2. 입력 값을 정수로 처리
- 입력받은 값이 반드시 정수(int)임을 보장해야 합니다.
3. 출력이 아니라 반환
- 문제에서 함수는 **결과를 반환(return)**하는 것이 일반적입니다.
수정된 코드
1. 숫자 입력을 매개변수로 받는 방식
def numOfDigits(number): return len(str(number)) # 숫자를 문자열로 변환한 뒤 길이를 반환 # 함수 호출 print(numOfDigits(12345)) # 예: 5 |
2. 사용자 입력을 처리하는 방식
def numOfDigits(): number = int(input("숫자를 입력하세요: ")) # 입력 값을 정수로 변환 return len(str(number)) # 숫자를 문자열로 변환한 뒤 길이를 반환 # 함수 호출 print(numOfDigits()) |
작성한 코드와의 차이점
- 입력 값 처리:
- 작성하신 코드는 input()을 바로 문자열로 처리하므로, 숫자가 아닌 문자열 입력도 처리됩니다.
- 수정된 코드는 int(input())을 사용해 입력 값이 정수임을 보장합니다.
- 출력 vs 반환:
- 작성하신 코드는 바로 결과를 출력합니다.
- 수정된 코드는 **결과를 반환(return)**해 필요한 경우 출력하거나 다른 작업에 활용할 수 있습니다.
아아 그렇구나 나는 정수만 입력받은 게 아니라 모든 문자열의 갯수를 세는 엄청난 함수를 만들어버린 거구나...
오늘도 한 수 배웁니다,,,
부록
return의 기본 개념
- 함수가 값을 반환할 때 사용:
- 함수 내부에서 처리한 결과를 호출한 곳으로 돌려줍니다.
- 반환된 값은 다른 변수에 저장하거나 출력에 사용할 수 있습니다.
- return으로 반환하면 함수 실행이 종료됩니다:
- return 이후의 코드는 실행되지 않습니다.
return 사용 예시
1. 함수가 값을 반환하는 경우
def add(a, b): return a + b # 두 숫자의 합을 반환 result = add(3, 5) # 반환된 값을 변수에 저장 print(result) # 출력: 8 |
설명:
- add 함수는 두 숫자를 더한 결과를 반환합니다.
- 반환된 값 8은 result 변수에 저장됩니다.
- 출력: 8
2. return으로 함수 종료
def check_positive(num): if num > 0: return "양수입니다" # 조건을 만족하면 결과를 반환하고 종료 return "음수 또는 0입니다" print(check_positive(10)) # 출력: 양수입니다 print(check_positive(-5)) # 출력: 음수 또는 0입니다 |
설명:
- 조건이 만족되면 return으로 값을 반환하고 함수가 종료됩니다.
- 이후의 코드는 실행되지 않습니다.
return과 print의 차이
return | |
값을 반환하여 함수 외부에서 사용 가능 | 단순히 값을 출력하여 화면에 표시 |
반환된 값으로 계산, 저장, 조작 가능 | 출력된 값은 저장하거나 조작 불가능 |
함수 내부에서 호출한 곳으로 결과 전달 | 결과를 단순히 사용자에게 보여줌 |
예시:
def multiply(a, b): return a * b # `return` 사용 result = multiply(3, 4) # 함수의 결과를 변수에 저장 print(result) # 출력: 12 # `print`만 사용 def multiply_and_print(a, b): print(a * b) multiply_and_print(3, 4) # 출력: 12 |
return 없는 함수
1. 값을 반환하지 않는 함수
함수에서 return을 생략하면 **None**을 반환합니다.
def say_hello(): print("Hello, world!") result = say_hello() print(result) # 출력: None |
설명:
say_hello는 print만 수행하고 반환값이 없으므로 None이 출력됩니다.
return 활용 사례
1. 여러 값을 반환
- 함수에서 한 번에 여러 값을 반환할 수 있습니다.
def get_stats(numbers): total = sum(numbers) average = total / len(numbers) return total, average # 여러 값 반환 # 반환값을 각각 저장 total, avg = get_stats([1, 2, 3, 4, 5]) print(f"합계: {total}, 평균: {avg}") # 출력: 합계: 15, 평균: 3.0 |
2. 조건에 따라 다른 결과 반환
def check_number(num): if num > 0: return "양수" elif num < 0: return "음수" else: return "0" print(check_number(10)) # 출력: 양수 print(check_number(-5)) # 출력: 음수 print(check_number(0)) # 출력: 0 |
return의 장점
- 유연성:
- 함수 결과를 호출한 곳에서 자유롭게 활용 가능.
- 변수에 저장하거나, 다른 함수로 전달하거나, 바로 출력할 수 있음.
- 재사용성:
- 함수로 분리된 코드는 재사용하기 쉽고, 반환값을 다르게 처리 가능.
- 가독성:
- 함수 내부와 외부의 역할을 명확히 분리.
결론
- **return**은 함수를 작성할 때 핵심적인 역할을 합니다.
- 값을 반환하면 호출한 코드에서 자유롭게 그 값을 사용할 수 있습니다.
- 필요에 따라 return을 생략할 수도 있지만, 대부분의 함수는 반환값을 사용하는 것이 유용합니다.
이해가 잘 되셨나요? 😊 추가로 예제를 보거나 질문이 있으면 알려주세요! 🚀
다시 보며 복습을 해야겠따...