관리 메뉴

log.Sehee

[데이터 취업 스쿨 스터디 노트] 파이썬 중급문풀 1 본문

Zerobase DS School

[데이터 취업 스쿨 스터디 노트] 파이썬 중급문풀 1

Sehe_e 2024. 7. 10. 21:59

 


함수 1

 

def add(n1, n2):
    return print(f'{n1} + {n2} = {n1 + n2}')


def sub(n1, n2):
    return print(f'{n1} - {n2} = {n1 - n2}')


def mul(n1, n2):
    return print(f'{n1} * {n2} = {n1 * n2}')


def div(n1, n2):
    return print(f'{n1} / {n2} = {n1 / n2}')


def mod(n1, n2):
    return print(f'{n1} % {n2} = {n1 % n2}')


def flo(n1, n2):
    return print(f'{n1} // {n2} = {n1 // n2}')


def exp(n1, n2):
    return print(f'{n1} ** {n2} = {n1 ** n2}')


btn = input('1.덧셈, 2.뺄셈, 3.나눗셈, 4.나머지, 6.몫, 7.제곱셈, 8.종료 ')
btn_calculator = {
    '1': add,
    '2': sub,
    '3': mul,
    '4': div,
    '5': mod,
    '6': flo,
    '7': exp
}

if btn == '8':
    print('종료')
else:
    first = float(input('첫 번째 숫자 입력: '))
    second = float(input('두 번째 숫자 입력: '))
    btn_calculator[btn](first, second)

 

 


함수 2

 

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)

 

 


함수 3

 

human_type = ['유아', '소아', '성인']
price = [18000, 25000, 50000]
discount = 50
total, total_count = 0, 0
result = ''

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

def cost_calculator(human, dc_human, type_num):
    human_cost = human * price[type_num]
    human_dc_cost = dc_human * price[type_num] * discount * 0.01
    return human_cost, int(human_dc_cost)

for i, n in enumerate(human_type):
    basic_count, dc_count = int(input(f'{n} 입력: ')), int(input(f'할인대상 {n} 입력: '))
    cost, dc_cost = cost_calculator(basic_count, dc_count, i)
    
    total += cost + dc_cost
    total_count += basic_count + dc_count
    
    result += f'{n} {basic_count}명 요금: {cost:,}원\n'
    result += f'{n} 할인 대상 {dc_count}명 요금: {dc_cost:,}원\n'

print()
print('=' * 30)
print(result.strip())
print('=' * 30)
print(f'Total: {total_count}명')
print(f'TotalPrice: {total:,}원')
print('=' * 30)

 

 


함수 4

 

def factorial(n):
    if n == 1:
        return n
    return n * factorial(n-1)

num = int(input('input number: '))
print(f'{factorial(num):,}')

 

아래는 조금 고민하면서 작성한 코드

더보기

 

처음엔 그냥 계산하고 출력하는 코드를 작성

money = int(input('예치금(원): '))
years = int(input('기간(년): '))
rate = int(input('연 이율(%): '))
calculator_type = ['단리', '월복리']
result = []

result.append(money + (int(money * years * rate * 0.01)))

months = years * 12
monthly_rate = rate * 0.01 / 12
result.append(int(money * (1 + monthly_rate) ** months))

for i, n in enumerate(calculator_type):
    print(f'\n[{n} 계산기]')
    print('='*30)
    print(f'예치금 \t: {money:,}원')
    print(f'예치기간 \t: {years}년')
    print(f'연 이율 \t: {rate}%')
    print('-'*30)
    print(f'{years}년 후 총 수령액: {result[i]:,}원')
    print('='*30)

 

 출력문까지 야무지게 뽑아본 뒤 함수를 만들어야 하는 문제임을 깨닫고 코드를 재작성..

 

money = int(input('예치금(원): '))
years = int(input('기간(년): '))
rate = int(input('연 이율(%): '))
calculator_type = ['단리', '월복리']
result = []

def simple(cost):
    return int(cost + (cost * years * rate * 0.01))

def compound(cost):
    months = years * 12
    monthly_rate = rate * 0.01 / 12
    return int(cost * (1 + monthly_rate) ** months)

result.append(simple(money))
result.append(compound(money))

for i, n in enumerate(calculator_type):
    print(f'\n[{n} 계산기]')
    print('='*30)
    print(f'예치금 \t: {money:,}원')
    print(f'예치기간 \t: {years}년')
    print(f'연 이율 \t: {rate}%')
    print('-'*30)
    print(f'{years}년 후 총 수령액: {result[i]:,}원')
    print('='*30)

 

하지만 재작성한 코드가 마음에 들지 않음.. 기존에 쓴 코드가 훨씬 짧은데다 가독성도 나아보였기 때문에..

그래서 출력을 위한 for문도 함수로 정리하기로 해서 나온 최종 코드는 밑과 같다.

 

money = int(input('예치금(원): '))
years = int(input('기간(년): '))
rate = int(input('연 이율(%): '))

def simple(cost):
    result = int(cost + (cost * years * rate * 0.01))
    return print_result(result, '단리')

def compound(cost):
    months = years * 12
    monthly_rate = rate * 0.01 / 12
    result = int(cost * (1 + monthly_rate) ** months)
    return print_result(result, '월복리')

def print_result(cost, calculator_type):
    print(f'\n[{calculator_type} 계산기]')
    print('=' * 30)
    print(f'예치금 \t: {money:,}원')
    print(f'예치기간 \t: {years}년')
    print(f'연 이율 \t: {rate}%')
    print('-' * 30)
    print(f'{years}년 후 총 수령액: {cost:,}원')
    print('=' * 30)

simple(money)
compound(money)

 

 


함수 5

 

start = int(input('a1 입력: '))
difference = int(input('공차 입력: '))
end = int(input('n 입력: '))

def sequence(a, ing, e):
    print(f'{e}번째 항의 값: {a}')
    print(f'{e}번째 항까지의 값: {ing}')

    if e == end:
        return
    a += difference
    ing += a

    return sequence(a, ing, e + 1)

sequence(start, start, 1)

 

 


함수 6

 

def sequence(a, ing, e):
    print(f'{e}번째 항의 값: {a}')
    print(f'{e}번째 항까지의 값: {ing}')

    if e == end:
        return
    a *= ratio
    ing += a

    return sequence(a, ing, e + 1)

start = int(input('a1 입력: '))
ratio = int(input('공비 입력: '))
end = int(input('n 입력: '))

sequence(start, start, 1)

 

 


 

재귀 함수를 공부할 때 정말 열심히 했었는데 다 까먹어버려서 난감했다..

하지만 오늘 리마인드해서 다시 잘 쓸 수 있을 것 같다. 역시 공부와 복습은 꾸준히..

 

내일의 학습 목표

파이썬 중급문풀 2- 4

 

 

Comments