log.Sehee
[데이터 취업 스쿨 스터디 노트] 파이썬 중급문풀 1 본문
함수 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