
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 flo(n1, n2):
return n1//n2
def mod(n1, n2):
return n1 % n2
def exp(n1, n2):
return n1 ** n2
while True:
print('-'*60)
selectNum = int(input('1.덧셈, 2.뺄셈, 3.곱셈, 4.나눗셈, 5.나머지, 6.몫, 7.제곱승, 8.종류'))
if selectNum ==8:
print('Bye~')
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} 4/ {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('잘못 입력')
코드 해설

# 거리(km) = 속도(km) * 시간(h)
def getDistance(speed, hour, minute):
distance = speed * (hour + minute /60) #60으로 나누어야 '분'을 구할수 있다.
#45 / 60 = 0.75 --> 2시간+ 0.75분 = 2.75
#스피드 90 * 2.75
return distance
#시간 구하는 함수 만들기
# 100:75 = 60:x --> x = 75 * 60 / 100
def getTime(speed, distance):
time = distance / speed
print(f'time :{time}')
h= int(time)
m = (time - h) * 100 *60 / 100 # 0.75 * 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)
코드요약

childPrice = 18000
infantPrice = 25000
adultPrice = 50000
specialDc = 50
def formatedNumber(n):
return format(n, ',')
def printAirPlaneReceipt(c1, c2, i1, i2, a1, a2):
cp = c1 * childPrice# 어린이할인
cp_dc = int(c2 * childPrice * 0.5) #50%할인 위한 0.5
print(f'유아{c1}명 요금 {formatedNumber(cp)}원')
print(f'유아 할인 대상{c2}명 요금 {formatedNumber(cp_dc)}원')
ip = i1 * infantPrice #만12세 미만 할인
ip_dc = int(i2 * infantPrice *0.5)
print(f'소아{i1}명 요금 {formatedNumber(ip)}원')
print(f'소아 할인 대상{i2}명 요금 {formatedNumber(ip_dc)}원')
ap = a1 * adultPrice #성인 할인
ap_dc = int(a2 * adultPrice * 0.5)
print(f'성인{a1}명 요금 {formatedNumber(ap)}원')
print(f'성인 할인 대상{a2}명 요금 {formatedNumber(ap_dc)}원')
print(f'Total: {c1 + c2 + i1 + i2 + a1 + a2}명')
print(f'TotalPrice: {formatedNumber(cp + cp_dc + ip + ip_dc+ap+ap_dc)}원')
childCnt = int(input('유아 입력:'))
specialDCChildCnt = int(input('할인 대상 유아 입력: '))
infantCnt = int(input('소아 입력:'))
specialDCInfantCnt = int(input('할인 대상 소아 입력:'))
adultCnt = int(input('성인 입력: '))
specialDCAdultCnt = int(input('할인 대상 성인 입력:'))
printAirPlaneReceipt(childCnt, specialDCChildCnt,
infantCnt, specialDCInfantCnt,
adultCnt, specialDCAdultCnt)
코드 요약

def formatedNumber(n):
return format(n, ',')
def recursionFun(n):
if n ==1:
return n
return n * recursionFun(n-1)
inputNumber = int(input('input number:'))
print(formatedNumber(recursionFun(inputNumber)))
코드요약

def formatedNumber(n):
return format(n, ',')
def multiRateCalculator(m, t, r): #예치금(m), 기간(t), 연 이율(r) 월복리로 계산된 총 수령액을 반환 하는 함수
t = t * 12 # 입력된 기간을 월로 환산하여 변수 t에 할당
rpm = (r/12) *0.01 #연 이자율을 월 이자율로 변환
totalMoney = m #초기 수령액 초기화
for i in range(t): #월 복리 계산 부분 기간(t)만큼 반복한다. 매월마다 총 수령액에 이자추가
totalMoney = totalMoney + (totalMoney * rpm)#rpm 월 이자율
return int(totalMoney)
money = int(input('예치금(원): '))
term = int(input('기간(년): '))
rate = int(input('연 이율(%): '))
print('[단리 계산기]')
print(f'{term}년 후 총 수령액: {formatedNumber(multiRateCalculator(money , term, rate))}')
print('[월복리 계산기')
print(f'{term}년 후 총 수령액: {formatedNumber(multiRateCalculator(money,
#등차 수열 공식: an= a1 + (n-1) * d
#등차 수열 합 공식: sn = n*(a1 + an)/ 2
def sequenceCal(n1, d, n):# 등차 수열의 각 항의 값을 계산하고, 합을 출력하는 함수
#n1 첫번째 항, d공차, n항의 갯수
valueN = 0; sumN = 0; # 등차 수열의 항의 값을 저장하는 변수와 합을 저장하는 변수
i = 1 #반복문 제어
while i <=n:
if i ==1: # 첫 번째 항인 경우 처리하는 조건문
valueN = n1 #첫 항을 n1설정
sumN += n1 #합계산하기위해 n1 더한다.
sumN += valueN
print(f'{1}번째 항의 값: {valueN}')
print(f'{1}번째 항의 합: {sumN}')
i +=1 #다음 항으로 넘어간다.
continue
valueN += d
sumN += valueN
print(f'{i}번째 항의 값: {valueN}')
print(f'{i}번째 항까지의 합:{sumN}')
i += 1
inputN1 = int(input('n1 입력: '))
inputD = int(input('공차 입력:'))
inputN = int(input('n 입력:'))
sequenceCal(inputN1, inputD, inputN)

def sequenceCal(n1, r , 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
continue
valueN += r
sumN += valueN
print(f'{i}번째 항의 값: {valueN}')
print(f'{i}번째 항까지의 합: {sumN}')
i += 1
inputN1 = int(input('a1 입력: '))
inputR = int(input('공비 입력: '))
inputN = int(input('n 입력: '))
sequenceCal(inputN1, inputR, inputN)

def exampleResult(s1, s2, s3, s4, s5):#s1~s5 매개변수는 과목1~과목5 를 의미한다.
passAvgScore = 60; limitScore = 40 #60이상 합격, 과락 40
def getTotal(): #과목 총점 함수
totalScore = s1 + s2 + s3 + s4 + s5
print(f'총점:{totalScore}')
return totalScore
def getAverage():# 과목 평균 함수
avg = getTotal() / 5
print(f'평균: {avg}')
return avg
def printPassOrFail(): #합격,불합격(과락) 여부 함수
# s1~s5가 limitScore(40점이상이면 합격 아니면 불합격Fail)
print(f'{s1}: Pass') if s1 >=limitScore else print(f'{s1}: Fail')
print(f'{s2}: Pass') if s2 >=limitScore else print(f'{s2}: Fail')
print(f'{s3}: Pass') if s3 >=limitScore else print(f'{s3}: Fail')
print(f'{s4}: Pass') if s4 >=limitScore else print(f'{s4}: Fail')
print(f'{s5}: Pass') if s5 >=limitScore else print(f'{s5}: Fail')
def printFinalPassOrFail():
if getAverage() >= passAvgScore: #평균함수가 passAvgScore60점 보다 크면 최종합격 .or 최종 탈락
if s1 >= limitScore and s2 >= limitScore and s3 >= limitScore and s4 >= limitScore and s5 >= limitScore:
print('Final Pass!')
else:
print('Final Fail')
else:
print('Final Fail!')
getAverage() #과목들의 평균을 출력
printPassOrFail() #과목 점수가 40점 이상인지 확인
printFinalPassOrFail() #최종 합격 불학격 여부 확인
##########################################
import ex as e
if __name__ =='__main__':
#현재 파일이 직접 실행되는 경우에만 아래 코드 실행된다.
sub1 = int(input('과목1 점수 입력:'))
sub2 = int(input('과목2 점수 입력:'))
sub3 = int(input('과목3 점수 입력:'))
sub4 = int(input('과목4 점수 입력:'))
sub5 = int(input('과목5 점수 입력:'))
#출력을 위해 기존매개변수 s1,s2,s3,s4,s5를 sub1~5로 바꾸었다.
e.exampleResult(sub1, sub2, sub3, sub4, sub5)

def calculatorTotalPrice(gs):#가격을받아서(gs) 할인율을 적용한 토탈 구매 가격 계산 함수
if len(gs) <= 0: #입력된 상품가격이 0이하인 경우 상품 유무 체크
print('구매 상품이 없습니다.')
return
rate = 25 #비율(할인율) 25로 초기화(기본값)
totalPrice = 0 #총 구매가격 저장 변수
rates= {1:5, 2:10, 3:15 , 4:20} #1개면5%, 2개면10%할인!
if len(gs) in rates:#상품 개수가 rates에 포함되면 상품에 맞는 할일율 적용
rate = rates[len(gs)]
for g in gs: #상품 가격(gs)의 각 상품 가격에 대해 반복문 실행
#g는 for문을 통한 한개씩 가져온 상품 가격을 의미
totalPrice += g *(1- rate * 0.01)#각각의 상품가격(g)에 할인율 적용한 가격을 계산하여 총구매 가격에 더한다.
#20% 할인이면 (1-20*0.01) --> (1- 0.20) -> 0.8
#
return [rate, int(totalPrice)] #할인율과, total
###################################################
import discount as dc
if __name__=='__main__':
flag = True
gs = []
while flag:
selectNumber = int(input('1.구매, 2. 종료'))
if selectNumber == 1:
goods_price = int(input('상품 가격 입력:'))
gs.append(goods_price)#gs리스트에 상품가격을 추가
elif selectNumber ==2:
result = dc.calculatorTotalPrice(gs)
flag =False #False로 반복 조건문 탈출
#return [rate, int(totalPrice)] 으로 반환되어서
# 리스트에 의해서 [rate,int(totalPrice)]
#즉 리스트에서 0번 rate, 1번 int(totalPrice)를 의미한다.
print(f'할인율:{result[0]}%')
print(f'합계:{result[1]}원')

import random
userNums = []; randNums = []; collNums = []
#유저번호, 기계 생성 번호, 중복된 번호를 저장하기위한 리스트
randBonuNum = 0
def setUserNums(ns): #사용자가 입력한 번호ns 반환
global userNums
userNums = ns
def getUserNums(): #사용자가 입력한 번호를 빼오는 함수
return userNums
def setRandNums():#기계가 빼오는 번호
global randNums
#global 는 변수를 전역 변수로 선언하는 데 사용(코드 전체에서 공유되는 변수)
randNums = random.sample(range(1, 46),6)
#random.smple()함수를 사용하여 1부터 45 사이의 범위에서
#중복되지 않는 6개의 난수 생성
def getRandNums(): #기계가 생성한 번호를 반환하는 함수
return randNums
def setBonuNum(): #보너스는 위에서 발생한 난수랑 겹치면 안됨
global randBonuNum
while True: #겹치지 않을때가지 번호 생성
randBonuNum = random.randint(1, 45)
if randBonuNum not in randNums:
break
def getBonuNum():
return randBonuNum
def lottoResult():
global userNums #전역 변수로 사용하기 위해 global키워드 사용
global randNums
global collNums
collNums = []
for un in userNums:
if un in randNums:
collNums.append(un)
if len(collNums) == 6:
print('1등 당첨!')
print(f'번호: {collNums}')
elif (len(collNums) ==5) and (randBonuNum in userNums):
print('2등 당첨!!')
print(f'번호: {collNums}, 보너스 번호: {randBonuNum}')
elif len(collNums) ==5:
print('3등 당첨!')
print(f'번호: {collNums}')
elif len(collNums) ==4:
print('4등 당첨!')
print(f'번호: {collNums}')
elif len(collNums) ==3:
print('3등 당첨!')
print(f'번호: {collNums}')
else:
print('꽝!!!!!!!!!!!!!!')
print(f'기계 번호: {randNums}')
print(f'보너스 번호: {randBonuNum}')
print(f'선택 번호: {userNums}')
print(f'일치 번호: {collNums}')
def startLotto():
n1 = int(input('번호(1~45) 입력: ' ))
n2 = int(input('번호(1~45) 입력: ' ))
n3 = int(input('번호(1~45) 입력: ' ))
n4 = int(input('번호(1~45) 입력: ' ))
n5 = int(input('번호(1~45) 입력: ' ))
n6 = int(input('번호(1~45) 입력: ' ))
selectNums = [n1, n2, n3, n4, n5, n6]
setUserNums(selectNums)
setRandNums()
setBonuNum()
lottoResult()
#**********************
import lotto as lt
lt.startLotto()

#n: 전체 집합 크기
#r선택할 요소 개수
def getPermutationCnt(n, r, logPrint = True): #매개변수 n,r을 사용하여 조합의 개수 계산
result = 1
for n in range(n, (n-r), -1):#n부터 (n-r)까지 역순으로 반복한다.
if logPrint : print('n:{}'.format(n))#logPriint가 True이면 실행
result = result * n
return result
from itertools import permutations
def getPermutations(ns, r):#ns에서 길이r인 순열 생성후 순열의 개수와 순열을 출력하는 함수
pList = list(permutations(ns, r))#순열을 리스트로 변환하여 변수 pList에 할당
print(f'{len(ns)}P{r} 개수: {len(pList)}')#len(pList)는 생성된 순열의 개수를 나타낸다.
for n in permutations(ns, r):#permutation함수를 사용하여 원소 리스트 ns에서 길이가 r인 수열을 생성하며 반복문 실행
print(n, end='')
#############################
import permutation as pt
# numN = int(input('numN 입력: '))
# numR = int(input('numR 입력: '))
# print(f'{numN}P{numR}: {pt.getPermutationCn#t(numN, numR, logPrint=False)}')
listVar = [1,2,3,4,5,6,7,8] #순열 생성
rVar =3 #순열의 길이 3개씩 출력이 된다.
pt.getPermutations(listVar, rVar)

def getCombinationCnt(n, r):#조합의 개수를 계산하는 함수
#계산 결과를 저장하는데 사용
resultP = 1
resultR = 1
resultC = 1
for n in range(n, (n-r), -1 ):#n부터 n-r까지 정수들을 순회
resultP = resultP * n #n개중에서 r개를 선택한 순열의 개수 저장
for n in range(r, 0, -1):
resultR = resultR * n #rsultR 팩토리얼 값
resultC = int(resultP / resultR) #resultP값과 resultR 값의 비율 계산
return resultC
####################
import combination as ct
numN = int(input('numN 입력'))
numR = int(input('numR 입력'))
print(f'{numN}C{numR}: {ct.getCombinationCnt(numN, numR)}')
income = 0
waterPrice = 0; electricPrice = 0; gasPrice = 0
def setIncome(ic):#외부에서 전달된 ic 값을 수입 변수 income에 저장
global income
income = ic
def getIncome(): ## 수입 변수 incom의 값을 외부로 반환(이 함수로 외부에서 수입 값 가져온다.)
return income
#수도세
def setWaterPrice(wp):# 수도세 변수
global waterPrice# waterPrice를 외부로 반환(외부에서 수도세 값을 가져올 수 있다.)
waterPrice = wp
def getWaterPrice():
return waterPrice
#전기요금
def setElectricPrice(ep):
global electricPrice#외부에서 전달된 ep값을 전기요금 electricPrice에 할당
electricPrice = ep
def getElectricPrice():
return electricPrice #electricPrice를 외부로 반환(전기요금 가져올 수 있다.)
#가스
def setGasPrice(gp):#외부에서 잔달된 gp값을 gasPrice에 저장
global gasPrice
gasPrice = gp
def getGasPrice():# 가스 값 외부로 반환
return gasPrice
def getUtilityBill():#모든 공과금 더한다.(공과금 총액)
result = waterPrice + electricPrice + gasPrice
return result
def getUilityBillRate():#전체수익에서 차지하는 공과금
result = getUtilityBill() / getIncome() * 100
return result
#백분율 표현 위해 *100 수행
#getUtilityBill 모든 공과금 총액을 반환
#getIncome 수입을 반환
############
실행
import utilityBill as ub
inputIncome= int(input('수입 입력:'))
ub.setIncome(inputIncome)#수# 입세팅
inputWaterPrice = int(input('수도요금 입력:'))
ub.setWaterPrice(inputWaterPrice)
inputElectricPrice = int(input('전기요금 입력: '))
ub.setElectricPrice(inputElectricPrice)
inputGasPrice = int(input('가스요금 입력: '))
ub.setGasPrice(inputGasPrice)
print(f'공과금: {ub.getUtilityBill()}원')
print(f'수입 대비 공과금 비율: {ub.getUilityBillRate()}')
후기:
12일 공부를 3일만에 올렸다. 수열같은 문제는 어렵고 이해가 안간다.
함수와 클래스를 쓰니 코드가 어려워졌다.
따라 치고 코드를 분석하고 이해 할려고 하지만 전부다 이해 하진 못했다.
머리가 조금 아프다!!.. 꾸준히 매일 매일 조금이라도 하자