중급 문법들을 활용해 연습 문제들을 풀어본다.
1. 순열 계산 모듈을 만들고 순열 계산 결과를 출력해보자.
# permutation.py
def permutation(n,r):
if (n - r) < r: # 순열 계산하기
r = n - r
result = 1
for i in range(r):
result *= n-i
print(f'n : {n-i}')
print(f'{n}P{r}: {result}')
import permutation as pt
n = int(input('numN 입력: '))
r = int(input('numR 입력: '))
pt.permutation(8,3)
🔻 강사님의 순열 코드
def permutation(n,r):
result = 1
for i in range(n,(n-r),-1):
result *= i
print('n : {}'.format(i))
print(f'{n}P{r}: {result}')
▶️ 로그 과정을 확인하고 싶을 때, logPrint=True
처럼 설정해 자유롭게 변경할 수 있다
def permutation(n,r, logPrint=True):
result = 1
for i in range(n,(n-r),-1):
result *= i
if logPrint=True: print('n : {}'.format(i))
print(f'{n}P{r}: {result}')
📌 순열 계산 패키지
from itertools import permutations
from itertools import permutations
def permutation(ns,r): #이때 ns는 iterable 한 객체다.
pList = list(permutations(ns,r)) # 만들어지는 값도 저장된다.
print(f'{len(ns)}P{r} 개수 : {len(pList)}'
for i in permutations(ns,r):
print(n, end=', '))
# iterable 한 객체에서 임의의 숫자만큼 뽑는 개수
import permutation as pt
listVar = [1,2,3,4,5,6,7,8]
rVar = 3
pt.permutation(listvar,rVar)
2. 조합 계산 모듈을 만들고 계산 결과를 출력해보자.
# combination.py
def combination(n,p):
dn = 1
mc = 1
for i in range(n,(n-p),-1):
dn *= i
print(f'resultP: {dn}')
for j in range(p, 0,-1):
mc *= j
print(f'resultR: {mc}')
result = int(dn / mc)
print(f'resultC : {result}')
print(f'{n}C{p}: {result}')
import combination as cb
n = int(input('numN 입력: '))
p = int(input('numP 입력: '))
cb.combination(8,3)
📌 조합 계산 패키지
from itertools import combinations
from itertools import combinations
def getCombinations(ns,r): # ns개에서 r개를 순서와 상관없이 뽑는 경우의 수
c_list = list(cobinations(ns,r)) # c_list 는 모든 경우의 수다.
print(f'{len(ns)}C{r} : {len(c_list)}')
# combinations(ns,r) 의 모든 경우의 수를 확인하고 싶다면 어차피 리스트 자료구조이니까
for n in combinations(ns,r):
print(n, end= ', ')
3. 수입과 공과금을 입력하면 공과금 총액과 수입 대비 공과금 비율을 계산해주는 모듈을 만들자.
# mymodule.py
def pbFare(income,fare1,fare2,fare3):
totFare = fare1 + fare2 + fare3
farePct = round((totFare / income) * 100,2)
print(f'공과금 : {format(totFare, ',')}원')
print(f'공과금 비율 : {farePct}%')
import mymodule as md
income = float(input('수입 입력: '))
fare1 = float(input('수도요금 입력: '))
fare2 = float(input('전기요금 입력: '))
fare3 = float(input('가스요금 입력: '))
# 총 공과금 및 비율 계산 함수 적용하기
md.pbFare(income,fare1,fare2,fare3)
🔻 강사님 풀이
# mymodule.py
# 1. 사용할 전역 변수 초기화
income = 0
waterPrice = 0; electricPrice = 0; gasPrice = 0;
# 변수의 값을 세팅하는 함수와 가져오는 함수를 만들어준 뒤
# main 에서 받은 입력값으로 전역변수 값을 변경해 함수를 사용하면 된다.
def setIncome(ic): # setter 함수
global income # 전역 변수값을 가져와서
income = ic
def getIncome(): # getter 함수
return income
def setWaterPrice(wp): # setter 함수
global waterPrice # 전역 변수값을 가져와서
waterPrice = wp
def getWaterPrice(): # getter 함수
return waterPrice
def setElectricPrice(ep): # setter 함수
global eletricPrice # 전역 변수값을 가져와서
eletricPrice = ep
def getElectricPrice(): # getter 함수
return eletricPrice
def setGasPrice(gp): # setter 함수
global gasPrice # 전역 변수값을 가져와서
gasPrice = gp
def getGasPrice(): # getter 함수
return gasPrice
def getUtilityBill(): # 전체 공과금액을 계산해주는 함수
result = waterPrice + eletricPrice + gasPrice
return result
def getUtilityBillRate():
result = getUtilityBill() / getIncome() * 100
return result
#########################################################
import mymodule as md
income = float(input('수입 입력: '))
water = float(input('수도요금 입력: '))
eletric = float(input('전기요금 입력: '))
gas = float(input('가스요금 입력: '))
md.setIncome(income)
md.setWaterPrice(income)
md.setElectricPrice(income)
md.setGasPrice(income)
print(f'공과금 : {getUtilityBill()}원')
print(f'공과금 비율 : {getUtilityBillRate()}%')