제로베이스 데이터 취업 파트타임/100일 챌린지_일일 학습 일지

제로베이스 데이터 파트타임 스쿨 학습 일지 [25.04.06]

김뚱입니다 2025. 4. 6. 21:28

[강의 요약]

[Ch 04. 파이썬 중급 문제풀이] 강의 수강

40_[연습문제] 함수(01)부터 45_[연습문제] 함수(06)까지 강의 수강하였음

🐢 100일 챌린지 🔥 : [▰▰▰▰▰▰▰▰▰▰░                                           ] 21/100일 (21%)

주말에 너무 피곤했는데 쉴 시간이 없어서 울면서 작성 중

 

 

 

[연습문제_함수 (01)]

▶ 실습 코드 : 산술연산 계산기를 함수를 이용해서 만들자

# 각각의 연산을 함수로 정의
def add(n1, n2): return n1 + n2
def sub(n1, n2): return n1 - n2
def mul(n1, n2): return n1 * n2
def div(n1, n2): return n1 / n2
def mod(n1, n2): return n1 % n2
def flo(n1, n2): return n1 // n2
def exp(n1, n2): return n1 ** n2

# 무한 반복을 통해 사용자로부터 연산 선택 및 숫자 입력 받음
while True:
    print('-' * 60)
    selectNum = int(input('1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 '))
    
    if selectNum == 8:
        print('Bye~')
        break

    num1 = float(input('첫 번째 숫자 입력: '))
    num2 = float(input('두 번째 숫자 입력: '))

    if selectNum == 1:
        print(f'{num1} + {num2} = {add(num1, num2)}')
    elif selectNum == 2:
        print(f'{num1} - {num2} = {sub(num1, num2)}')
    elif selectNum == 3:
        print(f'{num1} * {num2} = {mul(num1, num2)}')
    elif selectNum == 4:
        print(f'{num1} / {num2} = {div(num1, num2)}')
    elif selectNum == 5:
        print(f'{num1} % {num2} = {mod(num1, num2)}')
    elif selectNum == 6:
        print(f'{num1} // {num2} = {flo(num1, num2)}')
    elif selectNum == 7:
        print(f'{num1} ** {num2} = {exp(num1, num2)}')
    else:
        print('잘못 입력했습니다. 다시 입력하세요.')

    print('-' * 60)

★ 출력 결과 ★

------------------------------------------------------------
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 1
첫 번째 숫자 입력: 10
두 번째 숫자 입력: 3.14
10.0 + 3.14 = 13.14
------------------------------------------------------------
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 2
첫 번째 숫자 입력: 3.14
두 번째 숫자 입력: 0.12
3.14 - 0.12 = 3.02
------------------------------------------------------------
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 3
첫 번째 숫자 입력: 3
두 번째 숫자 입력: 7
3.0 * 7.0 = 21.0
------------------------------------------------------------
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 4
첫 번째 숫자 입력: 10
두 번째 숫자 입력: 3
10.0 / 3.0 = 3.3333333333333335
------------------------------------------------------------
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 5
첫 번째 숫자 입력: 10
두 번째 숫자 입력: 3
10.0 % 3.0 = 1.0
------------------------------------------------------------
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 6
첫 번째 숫자 입력: 10
두 번째 숫자 입력: 3
10.0 // 3.0 = 3.0
------------------------------------------------------------
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 7
첫 번째 숫자 입력: 10
두 번째 숫자 입력: 3
10.0 ** 3.0 = 1000.0
------------------------------------------------------------
1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 8
Bye~

☆ 설명 ☆

  • 함수 분리를 통해 연산 기능을 구조화
    • 코드의 재사용성과 가독성 향상
  • 무한 루프 + 조건문을 활용
    • 메뉴 기반 사용자 인터페이스 구현
  • float형 입력
    • 정수뿐만 아니라 실수 계산도 가능

 

 

 

 

 

[연습문제_함수 (02)]

▶ 실습 코드 : 이동 거리 계산

# 거리(km) = 속도(km/h) * 시간(h)
def getDistance(speed, hour, minute):
    distance = speed * (hour + (minute / 60))
    return distance

print('-' * 60)
s = float(input('속도(km/h) 입력: '))
h = float(input('시간(h) 입력: '))
m = float(input('시간(m) 입력: '))
d = getDistance(s, h, m)
print(f'{s}(km/h)속도로 {h}(h)시간 {m}(m)분 동안 이동한 거리: {d}(km)')
print('-' * 60)

★ 출력 결과 ★

속도(km/h) 입력: 90
시간(h) 입력: 2
시간(m) 입력: 45
90.0(km/h)속도로 2.0(h)시간 45.0(m)분 동안 이동한 거리: 247.5(km)

 

 

 

▶ 실습 코드 : 이동 시간 계산

def getTime(speed, distance):
    time = distance / speed
    print(f'time: {time}')
    h = int(time)
    m = int((time - h) * 100 * 60 / 100)
    return [h, m]

print('-' * 60)
s = float(input('속도(km/h) 입력: '))
d = float(input('거리(km) 입력: '))
t = getTime(s, d)
print(f'{s}(km/h) 속도로 {d}(km) 이동한 시간: {t[0]}(h)시간 {t[1]}(m)분')
print('-' * 60)

★ 출력 결과 ★

속도(km/h) 입력: 90
거리(km) 입력: 247.5
time: 2.75
90.0(km/h) 속도로 247.5(km) 이동한 시간: 2(h)시간 45(m)분

 

 

▶ 요약

  • getDistance(speed, hour, minute)
    • 속도와 시간(h, m)을 입력받아 이동 거리를 반환
  • getTime(speed, distance)
    • 속도와 이동 거리를 입력받아 이동 시간(h, m)을 리스트로 반환
  • convertFloatToMinute(f)
    • 소수점 시간 분(minute)으로 변환 (보조 함수)

 

 

 

 

[연습문제_함수 (03)]

▶ 실습 코드 : 비행기 티켓 영수증 출력 함수

childPrice = 18000        # 24개월 미만
infantPrice = 25000       # 만 12세 미만
adultPrice = 50000        # 만 12세 이상
specialDC = 50            # 할인율 50%


def formatedNumber(n):
    return format(n, ',')

def printAriPlaneReceipt(c1, c2, i1, i2, a1, a2):
    print('=' * 40)
    cp = c1 * childPrice
    cp_dc = int(c2 * childPrice * 0.5)
    print(f'유아 {c1}명 요금: {formatedNumber(cp)}원')
    print(f'유아 할인 대상 {c2}명 요금: {formatedNumber(cp_dc)}원')

    ip = i1 * infantPrice
    ip_dc = int(i2 * infantPrice * 0.5)
    print(f'소아 {i1}명 요금: {formatedNumber(ip)}원')
    print(f'소아 할인 대상 {i2}명 요금: {formatedNumber(ip_dc)}원')

    ap = a1 * adultPrice
    ap_dc = int(a2 * adultPrice * 0.5)
    print(f'성인 {a1}명 요금: {formatedNumber(ap)}원')
    print(f'성인 할인 대상 {a2}명 요금: {formatedNumber(ap_dc)}원')

    print('=' * 40)
    print(f'Total: {formatedNumber(c1 + c2 + i1 + i2 + a1 + a2)}명')
    print(f'TotalPrice : {formatedNumber(cp + cp_dc + ip + ip_dc + ap + ap_dc)}원')
    print('=' * 40)

★ 출력 결과 ★

childPrice(24개월 미만)		: 18,000원
infantPrice(만12세 미만)		: 25,000원
adultPrice(만12세 이후)		: 50,000원
국가 유공자 및 장애우 할인		: 50%

유아 입력: 1
할인대상 유아 입력: 1
소아 입력: 2
할인대상 소아 입력: 1
성인 입력: 2
할인대상 성인 입력: 0
========================================
유아 1명 요금: 18,000원
유아 할인 대상 1명 요금: 9,000원
소아 2명 요금: 50,000원
소아 할인 대상 1명 요금: 12,500원
성인 2명 요금: 100,000원
성인 할인 대상 0명 요금: 0원
========================================
Total: 7명
TotalPrice : 189,500원
========================================

 

 

▶ 요약

  • formatedNumber(n)
    • 금액에 쉼표를 붙여 가독성 있게 변환
  • printAriPlaneReceipt(...)
    • 인원수와 할인대상 수를 입력받아 총 인원 및 요금 출력
  • 할인율
    • 국가유공자 및 장애우는 50% 할인 적용

 

 

 

 

[연습문제_함수 (04)]

▶ 실습 코드 : 팩토리얼 계산 함수

# 함수 정의
def recursionFun(n):
    if n == 1:
        return n
    return n * recursionFun(n - 1)
# 출력 형식 정리 함수
def formatedNumber(n):
    return format(n, ',')
# 실행 코드
inputNumber = int(input('input number: '))
result = recursionFun(inputNumber)
print(formatedNumber(result))

★ 출력 결과 ★

input number: 5
120

input number: 10
3,628,800

input number: 20
2,432,902,008,176,640,000

 

 

 

▶ 실습 코드 : 단리/월복리 계산기

# 단리 계산 함수
def singleRateCalculator(m, t, r):
    total = m + m * (r * 0.01) * t
    return int(total)
# 월복리 계산 함수
def multiRateCalculator(m, t, r):
    t *= 12
    rpm = (r / 12) * 0.01
    total = m
    for i in range(t):
        total += total * rpm
    return int(total)
# 실행 코드
money = int(input('예치금(원): '))
term = int(input('기간(년): '))
rate = int(input('연 이율(%): '))

# 단리 계산 결과 출력
print('[단리 계산기]')
print(f'{term}년 후 총 수령액: {formatedNumber(singleRateCalculator(money, term, rate))}원')

# 월복리 계산 결과 출력
print('[월복리 계산기]')
print(f'{term}년 후 총 수령액: {formatedNumber(multiRateCalculator(money, term, rate))}원')

★ 출력 결과 ★

예치금(원): 10000000
기간(년): 3
연 이율(%): 3

[단리 계산기]
3년 후 총 수령액: 10,900,000원

[월복리 계산기]
3년 후 총 수령액: 10,940,514원

 

 

▶ 요약

  • formatedNumber(n)
    • 숫자에 쉼표를 붙여 가독성 있게 출력
  • recursionFun(n)
    • 재귀 함수를 사용해 n! (팩토리얼) 계산
  • singleRateCalculator(m, t, r)
    • 단리 계산: 원금과 이율, 기간을 이용해 총 수령액 계산
    • 연 단위로 단순 누적 이자 계산
  • multiRateCalculator(m, t, r)
    • 월복리 계산: 매달 복리로 원금에 이자를 더해 수령액 계산
    • 기간은 연 단위를 월 단위로 환산
  • 이자 계산 방식
    • 단리: 원금 × 이율 × 기간
    • 월복리: 매달 이자를 원금에 더한 뒤 다음 이자 계산에 반영

 

 

 

 

 

[연습문제_함수 (05)]

▶ 실습 코드 : 등차수열의 항과 합 구하기

# 반복문 계산 함수
def sequenceCal(n1, d, n):
    valueN = 0
    sumN = 0
    i = 1
    while i <= n:
        if i == 1:
            valueN = n1
            sumN += valueN
            print('{}번째 항의 값: {}'.format(i, valueN))
            print('{}번째 항까지의 합: {}'.format(i, sumN))
            i += 1
            continue
        valueN += d
        sumN += valueN
        print('{}번째 항의 값: {}'.format(i, valueN))
        print('{}번째 항까지의 합: {}'.format(i, sumN))
        i += 1
# 등차수열 공식 계산 함수
def sequenceCal01(n1, d, n):
    # 일반항 공식: an = a1 + (n-1) * d
    valueN = n1 + (n-1) * d
    print('{}번째 항의 값: {}'.format(n, valueN))

    # 합 공식: sn = n(a1 + an) / 2
    sumN = n * (n1 + valueN) / 2
    print('{}번째 항까지의 합: {}'.format(n, int(sumN)))
# 사용자 입력 및 함수 호출
inputN1 = int(input('a1 입력: '))
inputD = int(input('공차 입력: '))
inputN = int(input('n 입력: '))

sequenceCal(inputN1, inputD, inputN)
print('-' * 50)
sequenceCal01(inputN1, inputD, inputN)

★ 출력 결과 ★

a1 입력: 2  
공차 입력: 3  
n 입력: 7  

1번째 항의 값: 2  
1번째 항까지의 합: 2  
2번째 항의 값: 5  
2번째 항까지의 합: 7  
3번째 항의 값: 8  
3번째 항까지의 합: 15  
4번째 항의 값: 11  
4번째 항까지의 합: 26  
5번째 항의 값: 14  
5번째 항까지의 합: 40  
6번째 항의 값: 17  
6번째 항까지의 합: 57  
7번째 항의 값: 20  
7번째 항까지의 합: 77  
--------------------------------------------------  
7번째 항의 값: 20  
7번째 항까지의 합: 77

 

 

▶ 요약

  • sequenceCal(n1, d, n)
    • 반복문을 사용하여 등차수열의 각 항과 합을 출력
  • sequenceCal01(n1, d, n)
    • 등차수열의 공식을 사용해 n번째 항과 총합을 한 번에 계산
  • 공식 요약
    • aₙ = a₁ + (n - 1) × d
    • Sₙ = n × (a₁ + aₙ) / 2

 

 

 

 

 

[연습문제_함수 (06)]

▶ 실습 코드 : 등비수열의 항과 합 구하기

# 반복문을 이용해서 등비 수열 계산
def sequenceCal(n1, r, n):
    valueN = 0
    sumN = 0
    i = 1

    while i <= n:
        if i == 1:
            valueN = n1
            sumN += valueN
            print('{}번째 항의 값: {}'.format(i, valueN))
            print('{}번째 항까지의 합: {}'.format(i, sumN))
            i += 1
            continue

        valueN *= r
        sumN += valueN
        print('{}번째 항의 값: {}'.format(i, valueN))
        print('{}번째 항까지의 합: {}'.format(i, sumN))
        i += 1
# 등비 수열의 공식 이용한 계산
def sequenceCal01(n1, r, n):
    # 일반항 공식: an = a1 * r^(n-1)
    valueN = n1 * (r ** (n - 1))
    print('{}번째 항의 값: {}'.format(n, valueN))

    # 합 공식: sn = a1 * (1 - r^n) / (1 - r)
    sumN = n1 * (1 - (r ** n)) / (1 - r)
    print('{}번째 항까지의 합: {}'.format(n, int(sumN)))
# 사용자 입력 및 함수 호출
inputN1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))

sequenceCal(inputN1, inputR, inputN)
print('-' * 50)
sequenceCal01(inputN1, inputR, inputN)

★ 출력 결과 ★

a1 입력: 2  
공비 입력: 3  
n 입력: 5

1번째 항의 값: 2  
1번째 항까지의 합: 2  
2번째 항의 값: 6  
2번째 항까지의 합: 8  
3번째 항의 값: 18  
3번째 항까지의 합: 26  
4번째 항의 값: 54  
4번째 항까지의 합: 80  
5번째 항의 값: 162  
5번째 항까지의 합: 242  
--------------------------------------------------
5번째 항의 값: 162  
5번째 항까지의 합: 242

 

 

▶ 요약

  • sequenceCal(n1, r, n)
    • 반복문을 통해 등비수열의 n번째 항과 누적 합을 계산하여 출력
    • i == 1일 때는 초항을 그대로 사용하고, 이후부터 공비만큼 곱함
  • sequenceCal01(n1, r, n)
    • 등비수열의 공식을 이용해 n번째 항과 총합을 계산하여 출력
      • 일반항: aₙ = a₁ × rⁿ⁻¹
      • 합: Sₙ = a₁ × (1 - rⁿ) / (1 - r)
  • 입력값
    • a₁ : 초항 (첫 번째 항의 값)
    • r : 공비 (항마다 곱해지는 값)
    • n : 출력할 항의 개수



 

 

 

[나의 생각 정리]

  • 함수로 나누니 코드가 깔끔하고 재사용이 쉬워졌음
  • 조건이나 계산 방식이 명확히 분리되어 가독성이 좋음

 

 

[적용점]

 

  • 복잡한 계산 로직을 분리하고 싶을 때?
    • 함수로 따로 정의해두자
  • 입력값에 따라 다양한 출력을 하고 싶을 때?
    • 조건문 + 함수 조합으로 깔끔하게 처리
  • 금액, 거리, 시간 등 반복 계산이 필요할 때?
    • 함수와 반복문을 활용해 자동화 가능
  • 수식 기반 문제를 풀 때?
    • 공식 기반 계산 함수(return)로 빠르게 구현 가능
  • 재사용 가능한 기능을 모듈화하고 싶을 때?
    • 함수로 정리해두면 다른 프로젝트에서도 쉽게 가져다 쓸 수 있음

 

 

 

 

 

“이 글은 제로베이스 데이터 스쿨 주 3일반 강의 자료 일부를 발췌하여 작성되었습니다.”