[Python 중급 문제풀이]
함수 01-06
함수(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 flordiv(n1,n2): return n1 // n2 def pow(n1,n2): return n1 ** n2 while True: print('-' * 75) numberInput = int(input('1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 ')) if numberInput==8: print('Bye!') break n1 = float(input('첫번째 숫자 입력:')) n2 = float(input('두번째 숫자 입력:')) if numberInput==1: print(f'{n1}+{n2} = {add(n1,n2)}') elif numberInput==2: print(f'{n1}-{n2} = {sub(n1,n2)}') elif numberInput==3: print(f'{n1}*{n2} = {mul(n1,n2)}') elif numberInput==4: print(f'{n1}/{n2} = {div(n1,n2)}') elif numberInput==5: print(f'{n1}%{n2} = {mod(n1,n2)}') elif numberInput==6: print(f'{n1}//{n2} = {flordiv(n1,n2)}') elif numberInput==7: print(f'{n1}**{n2} = {pow(n1,n2)}') else: print('잘못 입력했습니다. 다시 입력하세요') print('-' * 75) --------------------------------------------------------------------------- 1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 1 첫번째 숫자 입력:10 두번째 숫자 입력:20 10.0+20.0 = 30.0 --------------------------------------------함수(02)
다음과 같이 출력 될 수 있도록 이동거리와 이동시간을 반환하는 함수를 만들어 보자.
def getDistance(speed,hour,minute): distance =speed * (hour + minute /60) return distance 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) 입력: ')) 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) 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)함수(03)
다음과 같이 출력 될 수 있도록 비행기 티켓 영수증 출력 함수를 만들어 보자.
childPrice=18000 infantPrice=25000 adultPrice=50000 specialDc=50 def printAirPlaneReceipt(c1,c2,i1,i2,a1,a2): cp = c1*childPrice cp_dc=int(c2*childPrice*0.5) print(f'유아 {c1}명 요금 : {cp}원') print(f'유아 할인 대상 {c2}명 요금 : {cp_dc}원') ip =i1*infantPrice ip_dc=int(i2*infantPrice*0.5) print(f'소아 {i1}명 요금 : {ip}원 ') print(f'소아 할인 대상 {i2}명 요금 : {ip_dc}원') ap=a1*adultPrice ap_dc=int(a2*adultPrice*0.5) print(f'성인 {a1}명 요금 : {ap}원') print(f'성인 할인 대상 {a2}명 요금 : {ap_dc}원') childCnt=int(input('유아 입력: ')) specialDCCchildCnt=int(input('할인 대상 유아 입력: ')) infantCnt = int(input('소아 입력: ')) specialDCinfantCnt=int(input('할인 대상 소아 입력: ')) adultCnt = int(input('성인 입력: ')) specialDCadultCnt=int(input('할인 대상 성인 입력: ')) printAirPlaneReceipt(childCnt,specialDCCchildCnt,infantCnt,specialDCinfantCnt,adultCnt,specialDCadultCnt) 유아 입력: 1 할인 대상 유아 입력: 1 소아 입력: 2 할인 대상 소아 입력: 1 성인 입력: 2 할인 대상 성인 입력: 0 유아 1명 요금 : 18000원 유아 할인 대상 1명 요금 : 9000원 소아 2명 요금 : 50000원 소아 할인 대상 1명 요금 : 12500원 성인 2명 요금 : 100000원 성인 할인 대상 0명 요금 : 0원함수(04)
다음과 같이 출력 될 수 있도록 재귀함수를 이용해서 팩토리얼 함수를 만들어보자.
def formatedNumber(n): return format(n, ',') def recursionFun(n): # 팩토리얼 함수 if n == 1: return n return n * recursionFun(n - 1) inputNumber = int(input('input number: ')) inputNumberFormated = formatedNumber(recursionFun(inputNumber)) print(inputNumberFormated) # 단리 계산기 def singleRateCalculator(m, t, r): totalMoney = 0 totalRateMoney = 0 for i in range(t): totalRateMoney += m * (r * 0.01) totalMoney = m + totalRateMoney return int(totalMoney) # 월복리 계산기 def multiRateCalculator(m, t, r): t = t * 12 rpm = (r / 12) * 0.01 totalMoney = m for i in range(t): totalMoney += totalMoney * rpm return int(totalMoney) money = int(input('예치금(원): ')) term = int(input('기간(년): ')) rate = int(input('연 이율(%): ')) print() print('[단리 계산기]') print('=' * 30) print(f'예치금\t: {formatedNumber(money)}원') print(f'예치기간\t: {term}년') print(f'연 이율\t: {rate}%') print('-' * 30) amount = formatedNumber(singleRateCalculator(money, term, rate)) print(f'{term}년 후 총 수령액: {amount}원') print('=' * 30) print() print('[월복리 계산기]') print('=' * 30) print(f'예치금\t: {formatedNumber(money)}원') print(f'예치기간\t: {term}년') print(f'연 이율\t: {rate}%') print('-' * 30) amount = formatedNumber(multiRateCalculator(money, term, rate)) print(f'{term}년 후 총 수령액: {amount}원') print('=' * 30)함수(05)
다음과 같이 출력 될 수 있도록 등차 수열의 n번째 값과 합을 출력하는 함수를 만들어보자.
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 inputN1 = int(input('a1 입력: ')) inputD = int(input('공차 입력: ')) inputN = int(input('n 입력: ')) sequenceCal(inputN1, inputD, inputN) print('-' * 50)➜ 등차 수열 공식 : an=a1+(n-1) d
➜ 등차 수열 합 공식: sn=n(a1+an) /2함수(06)
다음과 같이 출력 될 수 있도록 등비 수열의 n번째 값과 합을 출력하는 함수를 만들어보자.
def sequenceCal(n1, r, n): valueN = 0 sumN = 0 i = 1 while i <= inputN: 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
>➜ 등비 수열(일반항) 공식: an = a1 * r^(n-1)
>➜ 등비 수열(합) 공식: sn = a1 * (1 - r^n) / (1-r)