#계산기 만들기 문제
def add(n1,n2):
print(f'{n1}+{n2} = {n1+n2}')
def sub(n1,n2):
print(f'{n1}-{n2} = {n1-n2}')
def mul(n1,n2):
print(f'{n1}*{n2} = {n1*n2}')
def div(n1,n2):
print(f'{n1}/{n2} = {n1/n2}')
def mod(n1,n2):
print(f'{n1}%{n2} = {n1%n2}')
def flr(n1,n2):
print(f'{n1}//{n2} = {n1//n2}')
def exp(n1,n2):
print(f'{n1}**{n2} = {n1**n2}')
def exit():
print('Bye~')
while True:
print('-'*45)
num = int(input('1.덧셈, 2.뺄셈, 3.곰셈, 4나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종료 '))
if num == 8:
exit()
break
n1 = float(input('첫번째 숫자 입력: '))
n2 = float(input('두번째 숫자 입력: '))
if num == 1:
add(n1,n2)
elif num ==2:
sub(n1,n2)
elif num ==3:
mul(n1,n2)
elif num ==4:
div(n1,n2)
elif num ==5:
mod(n1,n2)
elif num ==6:
flr(n1,n2)
elif num ==7:
exp(n1,n2)
📌각 함수를 하나씩 정의해줘야 하는 번거로움 말고는 어려운 부분은 없었다
#이동거리/시간 반환하는 함수 만들기
#이동시간반환
def getTime(s,d):
time = [int(d//s), int((d/s-d//s)*60)]
return time
print('-'* 60)
s = float(input('속도(km/h)입력: '))
d = float(input('거리(km)입력: '))
print(f'time: {d/s}')
t = getTime(s,d)
print(f'{s}속도로 {d}이동한 시간 : {t[0]}시간 {t[1]}분')
#이동거리반환
def getDistance(s,h,m):
m /= 60
h += m
d = h*s
return d
print('-'* 60)
s = float(input('속도(km/h)입력: '))
h = float(input('시간(h)입력: '))
m = float(input('시간(m)입력: '))
d = getDistance(s,h,m)
print(f'{s}속도로 {h}시간 {m}분: 동안 이동한 거리: {d}km')
📌시간의 경우 분을 바꿔주기가 조금 까다로웠다. 분이 소수점으로 표시된 경우 x60/ 소수점으로 표현하려는 경우에는 /60 을 하면 된다.
childPrice = 18000
infantPrice = 25000
adultPrice = 50000
specialDC = 50
total = 0
totalPrice = 0
def Receipt(c1,c2,i1,i2,a1,a2):
print('='*60)
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:,}원')
print('='*60)
print(f'Total: {c1+c2+i1+i2+a1+a2}명')
print(f'TotalPrice: {cp+cp_dc+ip+ip_dc+ap+ap_dc:,}원')
print('='*60)
c1 = int(input('유아입력:'))
c2 = int(input('할인 대상 유아 입력:'))
i1 = int(input('소아입력:'))
i2 = int(input('할인 대상 소아 입력:'))
a1 = int(input('성인 입력:'))
a2 = int(input('할인 대상 성인 입력:'))
Receipt(c1,c2,i1,i2,a1,a2)
📌이 문제에서는 각각 유아, 소아, 성인 함수를 만들어야 하는 줄 알았는데 강의를 보니 한번에 receipt로 묶어서 하는 방법이 있다는 것을 알게되었다. 혼자만의 힘으로 풀어보는 것도 중요하지만 다른 사람의 풀이법을 참고하는 것도 좋은 방법이라는 것을 다시한번 깨닫게 되었다.
#1
import math
def factorial(n):
return math.factorial(n)
num = int(input('input number: '))
print(f'{factorial(num):,}')
def recursionFunc(n):
if n == 1:
return n
else:
return n*recursionFunc(n-1)
num = int(input('input number: '))
recursionFunc(num)
#2
def singleRateCalculator(m,t,r):
totalMoney = m*(1+(t*r*0.01))
return int(totalMoney)
def doubleRateCalculator(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('='*60)
print(f'예치금: {money:,}원')
print(f'예치기간: {term}년')
print(f'연이율: {rate}%')
print('-'*60)
print(f'{term}년 후 총 수령액 : {singleRateCalculator(money,term,rate):,}원')
print('='*60)
print()
print(f'예치금: {money:,}원')
print(f'예치기간: {term}년')
print(f'연이율: {rate}%')
print('-'*60)
print(f'{term}년 후 총 수령액 : {doubleRateCalculator(money,term,rate):,}원')
print('='*60)
📌#1.우선은 math모듈을 이용해서 간단한 형식으로 풀어보았다. 후에 강의에서는 재귀함수로 풀이하여 그 부분에 대해서도 학습해 볼 수 있었다. 즉, 함수 안에서 자기 자신을 호출하는 재귀함수를 이용하여 factorial을 구현할 수 있었다.
📌단리의 경우는 원금*이자*기간 각 요소를 다 곱하면 더할 수 있는 반면 월복리는 계속해서 원금값을 업데이트 해주어야 하므로 반복문을 사용하여 구할 수 있었다. 월복리 구하는 문제는 헷갈렸다.
def sequenceCal(n1,d,n):
valueN = 0;sumN = 0
i = 1
while i<=n:
if i == 1:
valueN = n1
sumN += valueN
print(f'{i}번째 항의 값:{valueN}')
print(f'{i}번째 까지의 항의 값: {sumN}')
i += 1
else:
valueN += d
sumN += valueN
print(f'{i}번째 항의 값: {valueN}')
print(f'{i}번째 까지의 항의 값: {sumN}')
i+=1
a1 = int(input('a1입력: '))
d = int(input('공차 입력: '))
n = int(input('n 입력: '))
sequenceCal(a1,d,n)
📌이 문제는 등차수열 문제이다. 더해서 등차수열 공식은 an = a1 +(n-1) d이고 등차수열 합 공식은 sn = n(a1+an) /2 인것을 추가적으로 알아두면 좋을 것 같다.
#등비수열
def sequenceCal(n1,d,n):
valueN = 0;sumN = 0
i = 1
while i<=n:
if i == 1:
valueN = n1
sumN += valueN
print(f'{i}번째 항의 값:{valueN}')
print(f'{i}번째 까지의 항의 값: {sumN}')
i += 1
else:
valueN *= d
sumN += valueN
print(f'{i}번째 항의 값: {valueN}')
print(f'{i}번째 까지의 항의 값: {sumN}')
i+=1
a1 = int(input('a1입력: '))
d = int(input('공비 입력: '))
n = int(input('n 입력: '))
sequenceCal(a1,d,n)
📌앞의 등차수열 문제와 매우 유사한 등비수열 문제이다. 앞의 문제에서 +를 부호로 변경해주면 된다. 이때 등비수열의 공식은 an = a1r^(n-1) 이고 등비수열의 합 공식은 sn = a1 * (1-r^n)/(1-r)이다.
#모듈부분은 파이참으로해서 채워넣기