오늘은 6가지 함수 문제를 풀어보고자 한다.
오늘의 목표는!
해답 풀이를 보기 전, 내가 먼저 직접 코드 짜보기!
언제쯤 문제만 보고 혼자 척척! error 없이 코드를 짤 수 있게 될까..?
Q.다음과 같이 출력될 수 있도록 산술연산 계산기를 함수를 이용해 만들기
(1) selectNum = int(input('1.덧셈, ~
→ int()캐스팅
→ 캐스팅 하지 않으면 '종료'가 print되지 않음
(2) while True:
→ 필요했던 것 자체를 놓침
(3) if selectNum == 8:
print('종료')
break
→ while True: 에서 해결해야 하는 것 자체를 놓침
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:
selectNum = int(input('1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료'))
if selectNum == 8:
print('종료')
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('잘못 입력했습니다.')
Q.이동거리 반환 함수
(1) def 구문 자체
(2) return distance
(3) d = carDistanc(s, h, m)
def carDistanc(speed, hour, minute):
distance = speed * (hour + minute/60)
return distance
print('-' * 45)
s = float(input('속도 : '))
h = float(input('시간 : '))
m = float(input('분 : '))
d = carDistanc(s, h, m)
print(f'{s}속도로 {h}시 {m}분 동안 이동한 거리{d}')
print('-' * 45)
Q.이동시간 반환 함수
리스트란?
(1) m = int((time-h) *100 * 60 /100)
(2) return [h, m]
(3) {t[0]}시간 {t[1]}분
def getTime(speed, distance):
time = distance / speed
print(f'time ; {time}')
h = int(time)
m = int((time-h) *100 * 60 /100)
# 0.00 분 이니까 *100
# 100:위에서 출력된 time= 60:x -> x = time * 60 / 100
return [h, m]
#반환
print('-' * 45)
s = float(input('속도 : '))
d = float(input('거리 : '))
t = getTime(s, d)
print(f'{s}속도로 {d} 거리를 이동 시간 : {t[0]}시간 {t[1]}분')
# t[0], t[1] = return [h, m] 를받는 것
print('-' * 45)
Q.영수증 출력 함수
[비용]
24개월 미만 : 1.8
12세 미만 : 2.5
12세 이후 : 5.0
유공자/장애우 : 50% DC
[승객 분류]
유아, 할인대상 유아, 소아, 할인대상 소아, 성인, 할인대상 성인
(1) def formatedNumber(n):
return format(n, ',')
print(f'유아 {c1}명 요금 : {formatedNumber(cp)}원')
→ formatedNumber(n)를 설정해주면 [12,500원]과 같이 결과가 입력 됨
(2) airplaneBill(childCnt, childDcCnt, infanCnt, infanDcCnt,
adultCnt, adultDcCnt)
→ 마지막에 [출력]을 위해 입력 필요
childPrice = 18000
infanPrice = 25000
adultPrice = 50000
specialDiscount = 50 #%는 입력하면 erro남
def formatedNumber(n):
return format(n, ',')
def airplaneBill(c1, c2, i1, i2, a1, a2):
cp = c1 * childPrice
cp_cd = int(c2 * childPrice * 0.5)
print('=' * 40)
print(f'유아 {c1}명 요금 : {formatedNumber(cp)}원')
print(f'유아 할인 대상 {c2}명 요금 : {formatedNumber(cp_cd)}원')
ip = i1 * infanPrice
ip_cd = int(i2 * infanPrice * 0.5)
print(f'소아 {i1}명 요금 : {formatedNumber(ip)}원')
print(f'소아 할인 대상 {i2}명 요금 : {formatedNumber(ip_cd)}원')
ap = a1 * adultPrice
ap_cd = int(a2 * adultPrice * 0.5)
print(f'성인 {a1}명 요금 : {formatedNumber(ap)}원')
print(f'성인 할인 대상 {a2}명 요금 : {formatedNumber(ap_cd)}원')
print('=' * 40)
print(f'total : {c1+c2+i1+i2+a1+a2}명')
print(f'TotalPrice : {formatedNumber(cp+cp_cd+ip+ip_cd+ap+ap_cd)}원')
print('=' * 40)
childCnt = int(input('유아 입력 : '))
childDcCnt = int(input('유아 할인 입력 : '))
infanCnt = int(input('소아 입력 : '))
infanDcCnt = int(input('소아 할인 입력 : '))
adultCnt = int(input('성인 입력 : '))
adultDcCnt = int(input('성인 할인 입력 : '))
airplaneBill(childCnt, childDcCnt, infanCnt, infanDcCnt,
adultCnt, adultDcCnt)
Q.재귀함수를 이용해 팩토리얼 함수 만들기
📍재귀함수 공식
def factorail(n):
if n == 1:
return n
return n * factorail(n-1)
ex) input number : 5, 120만들기
def factorial(n):
if n == 1:
return n
return n * factorial(n-1)
inputNumber = int(input('inputnumber : '))
print(format(factorial(inputNumber), ','))
Q.공차 함수
등차 공식 공부가 필요 함
def sequenceCal(n1, d, n):
valueN = 0; sumN = 0; # sumN : N항까지의 합의 값
i = 1 #while문 사용을 위해 변수 하나 입력
while i <= n:
if i ==1:
valueN =n1
sumN += valueN
print(f'{i}번째 합의 값 : {valueN}')
print(f'{i}번째 항까지의 합 : {sumN}')
i += 1 # 하나씩 올라가야 하니가
continue
valueN += d
sumN += valueN
print(f'{i}번째 합의 값 : {valueN}')
print(f'{i}번째 항까지의 합 : {sumN}')
i += 1 # 무한반복에 빠지지 않기 위해!
# 이제는 초항,공차, n을 입력 받아야 함
inputN1 = int(input('a1 입력 : '))
inputD = int(input('d공차 입력 : '))
inputN = int(input('n 입력 : '))
sequenceCal(inputN1, inputD, inputN)
Q.공비 함수
공비 공식 공부가 필요 함
def sequenceCal(n1, r, n):
valueN = 0; sumN = 0; # valueN: N번째 항의 값. sumN : N항까지의 합의 값
i = 1 #while문 사용을 위해 변수 하나 입력, 무한 루프에 빠지지 않기 위해 필요
while i <= n:
if i == 1:
valueN = n1
sumN = valueN
print(f'{i}번째 합의 값 : {valueN}')
print(f'{i}번째 항까지의 합 : {sumN}')
i += 1 # 하나씩 올라가야 하니가, 무한루프 빠지지 않게
continue
# i가 1인 경우 위로 다시ㅏ 실행되도록, 아래로 내려가지 않도록 하기 위해 continue!
# 1이 아닐 떄
valueN *= r
sumN += valueN
print(f'{i}번째 합의 값 : {valueN}')
print(f'{i}번째 항까지의 합 : {sumN}')
i += 1 # 무한반복에 빠지지 않기 위해!
# 이제는 초항,공비, n을 입력 받아야 함
inputN1 = int(input('a1 입력 : '))
inputR = int(input('r공비 입력 : '))
inputN = int(input('n 입력 : '))
sequenceCal(inputN1, inputR, inputN)