Python

3.1.1 연습 문제: 자릿수를 구하는 함수 만들기

수현조 2024. 11. 27. 12:44

문제

양(陽)의 정수를 입력받아, 그 수가 몇 자리 숫자인지 출력하는 함수 numOfDigits()를 만들어 보세요.

>>> numOfDigits(12345)
5
>>> numOfDigits(1234567890)
10

 

ㅋㅋㅋ

나는 풀어보았다.

그리고 지피티한테 검사받으니,

 

작성하신 코드는 동작은 하지만 문제 요구사항과 정확히 일치하지 않을 가능성이 있습니다.
문제에서 요구하는 것은 **"숫자(정수)의 자릿수를 구하는 함수"**이기 때문에, 아래 사항들을 점검해야 합니다:

정답 여부

작성하신 코드:

def numOfDigits():
    print(len(input()))

numOfDigits()
  • 동작은 잘 됩니다.
  • 간단히 문자열 길이를 구할 수 있습니다.

단점:

  • 문제 요구사항과 약간 다릅니다. 숫자가 아닌 입력도 처리될 수 있습니다.
  • 반환값 대신 출력값을 사용하므로 유연성이 낮습니다.

 

작성한 코드 점검

  1. 코드 동작:
    • input()으로 입력받은 문자열의 길이를 구합니다.
    • 이 방식은 입력이 숫자가 아니어도 작동합니다.
      예: "hello"를 입력해도 자릿수를 출력합니다.
  2. 제약사항:
    • 문제는 정수의 자릿수를 구하는 것이므로, 입력 값이 반드시 숫자여야 합니다.

수정이 필요한 부분

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())

 

 

 

작성한 코드와의 차이점

  1. 입력 값 처리:
    • 작성하신 코드는 input()을 바로 문자열로 처리하므로, 숫자가 아닌 문자열 입력도 처리됩니다.
    • 수정된 코드는 int(input())을 사용해 입력 값이 정수임을 보장합니다.
  2. 출력 vs 반환:
    • 작성하신 코드는 바로 결과를 출력합니다.
    • 수정된 코드는 **결과를 반환(return)**해 필요한 경우 출력하거나 다른 작업에 활용할 수 있습니다.

 

 

아아 그렇구나 나는 정수만 입력받은 게 아니라 모든 문자열의 갯수를 세는 엄청난 함수를 만들어버린 거구나...

오늘도 한 수 배웁니다,,,

 

부록

return의 기본 개념

  1. 함수가 값을 반환할 때 사용:
    • 함수 내부에서 처리한 결과를 호출한 곳으로 돌려줍니다.
    • 반환된 값은 다른 변수에 저장하거나 출력에 사용할 수 있습니다.
  2. 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 print
값을 반환하여 함수 외부에서 사용 가능 단순히 값을 출력하여 화면에 표시
반환된 값으로 계산, 저장, 조작 가능 출력된 값은 저장하거나 조작 불가능
함수 내부에서 호출한 곳으로 결과 전달 결과를 단순히 사용자에게 보여줌

예시:

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의 장점

  1. 유연성:
    • 함수 결과를 호출한 곳에서 자유롭게 활용 가능.
    • 변수에 저장하거나, 다른 함수로 전달하거나, 바로 출력할 수 있음.
  2. 재사용성:
    • 함수로 분리된 코드는 재사용하기 쉽고, 반환값을 다르게 처리 가능.
  3. 가독성:
    • 함수 내부와 외부의 역할을 명확히 분리.

결론

  • **return**은 함수를 작성할 때 핵심적인 역할을 합니다.
  • 값을 반환하면 호출한 코드에서 자유롭게 그 값을 사용할 수 있습니다.
  • 필요에 따라 return을 생략할 수도 있지만, 대부분의 함수는 반환값을 사용하는 것이 유용합니다.

이해가 잘 되셨나요? 😊 추가로 예제를 보거나 질문이 있으면 알려주세요! 🚀

 

 

다시 보며 복습을 해야겠따...