강의 : 파이썬 중급 문풀 3~5 / 기초수학 1~3
복습 : 파이썬 중급 문풀 1~2 파트(1~28강) 실습문제
강의 : 파이썬 중급 문풀 3~5 / 기초수학 1~3
: 서로 다른 n개 중에 r개를 선택하는 경우의 수(순서 상관 O)
nPr = n! / (n-r)!
# 순열 모듈1
def getPermutaionCnt(n, r, logPrint = True):
result = 1
for n in range(n, (n-r), -1):
if logPrint: print('n : {}'.format(n)) #로그(중간 계산 결과)를 보고 싶을 떄
result = result * n
return result
# 순열 모듈2 : 파이썬 내재 모듈
from itertools import permutations
def getPermutaions(ns, r):
pList = list(permutations(ns, r))
print(f'{len(ns)}P{r} 개수: {len(pList)}')
for n in permutations(ns, r): # 모든 경우를 보고 싶을 때
print(n, end=', ')
실행1 : 모듈 파일 내에서
if __name__ == '__main__':
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}P{numR}: {getPermutaionCnt(numN, numR, logPrint=False)}')
# longPrint를 통해 로그를 볼지 선택(True: 볼래, False:안볼래)
ns = [1, 2, 3, 4, 5, 6, 7, 8]
getPermutaions(ns, 3)
실행2 : 별도 실행파일에서
import permutation as pt
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
# print(f'{numN}P{numR}: {pt.getPermutaionCnt(numN, numR)}')
print(f'{numN}P{numR}: {pt.getPermutaionCnt(numN, numR, logPrint=False)}')
listVar = [1, 2, 3, 4, 5, 6, 7, 8]
rVar = 3
pt.getPermutaions(listVar, rVar)
: 서로 다른 n개 중에 r개를 선택하는 경우의 수(순서 상관 X)
nCr = nPr / r! = n! / (n-r)!r!
# 조합 모듈1
def getCombinationCnt(n, r, logPrint = True):
resultP = 1
resultR = 1
resultC = 1
for n in range(n, (n - r), -1):
resultP = resultP * n
if logPrint: print('resultP : {}'.format(resultP))
for n in range(r, 0, -1):
resultR = resultR * n
if logPrint: print('resultR: {}'.format(resultR))
resultC = int(resultP / resultR)
if logPrint: print('resultC: {}'.format(resultC))
return resultC
# 조합 모듈2 : 파이썬 내재 모듈
from itertools import combinations
def getCombinations(ns, r):
cList = list(combinations(ns, r))
print(f'{len(ns)}C{r} 개수: {len(cList)}')
for n in combinations(ns, r):
print(n, end=', ')
# 실행파일
import combination as ct
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
# print(f'{numN}C{numR}: {ct.getCombinationCnt(numN, numR)}')
print(f'{numN}C{numR}: {ct.getCombinationCnt(numN, numR, logPrint=False)}')
listVar = [1, 2, 3, 4, 5, 6, 7, 8]
rVar = 3
ct.getCombinations(listVar, rVar)
실습 : 공과금, 수입 대비 공과금 비율

from arithmetic import basic_operator as bo
from arithmetic import developer_oerator as do
from shape import triangle_square_area as tsa
from shape import circle_area as ca
inputNumber1 = float(input('숫자1 입력: '))
inputNumber2 = float(input('숫자2 입력: '))
print(f'{inputNumber1} + {inputNumber2} = {bo.add(inputNumber1, inputNumber2)}')
print(f'{inputNumber1} % {inputNumber2} = {do.mod(inputNumber1, inputNumber2)}')
inputWidth = float(input('가로 길이 입력: '))
inputHeight = float(input('세로 길이 입력: '))
print(f'삼각형 넓이: {tsa.calTriangleArea(inputWidth, inputHeight)}')
inputRadius = float(input('반지름 입력: '))
print(f'사각형 넓이: {ca.calCircleArea(inputRadius)}')
실습 : 로그인 - 계정 관리 - 계정 삭제
실습 : 도서 관리 프로그램 ( 도서 정보, 도서 저장소 )
실습 : 주사위 게임 클래스 + 컴퓨터와 사용자 게임 결과
실습 : 자동차 경주 게임 클래스
n초 씩 출력 딜레이 (보충 필)
실습 : mp3 플레이어 클래스 생성, 음악 등록, 재생
실습 : 산술연산 결과 출력 모듈 생성, 예상되는 예외에 대한 예외처리 코드 작성
아니.. 중급파트보다 기초수학을 우선으로 커리큘럼에 뒀어야하는거 아니냐고요... 기초수학 파트에서 파이썬 기초활용 문제가 있을줄은..ㅠ 이해 못해서 날밤깠던 세월.. 물어내
약수 : 어떤 수를 나누어 떨어지게 하는 수
소수 : 1과 그 수 자신만을 약수로 가지는 수 (1 제외)
소인수
: 인수(=인수) 중에서 소수인 숫자
(ex/ 12의 소인수 : 2, 3)
소인수분해
: 1보다 큰 정수를 소인수의 곱으로 나타낸 것
( ex/ 12의 소인수분해 : 2^2 x 3
/ 36의 소인수분해 : 2^2 x 3^2
/ 25의 소인수분해 : 5^2 )
: 소인수분해를 이용해서 약수를 정확하고 쉽게 구할 수 있다.
list.count(n) : 해당 리스트에 n이 몇개가 있는지 반환해주는 함수.
list.append(n) : 해당 리스트에 n을 추가시켜주는 함수.
list.remove(n) : 해당 리스트에서 n을 삭제하는 함수.
: binary 2진수
: octal 8진수
: hexadecimal 16진수
num = 30
print('2진수 : {}'.format(bin(num)))
print('2진수 : {}'.format(format(num, '#b'))) # 두 줄 모두 같은 결과
print('2진수 : {}'.format(format(num, 'b'))) # 막줄은 앞에 진수 값이 뜨지 않는다.
print('8진수 : {}'.format(oct(num)))
print('8진수 : {}'.format(format(num, '#o')))
print('8진수 : {}'.format(format(num, 'o')))
print('16진수 : {}'.format(hex(num)))
print('16진수 : {}'.format(format(num, '#x')))
print('16진수 : {}'.format(format(num, 'x')))
print('{0:#b}, {0:#o}, {0:#x}'.format(num, num, num))
print('{0:#b}, {0:#o}, {0:#x}'.format(num))
# 결과
2진수 : 0b11110
8진수 : 0o36
16진수 : 0x1e
2진수 : 11110 # 각 3줄
8진수 : 36
16진수 : 1e #모두 변환 결과의 type은 문자열
0b11110, 0o36, 0x1e
print('2진수(0b11110) -> 10진수({})'.format(int('0b11110', 2)))
# 결과
2진수(0b11110) -> 10진수(30)
print('2진수(0b11110) -> 8진수({})'.format(oct(0b11110)))
print('2진수(0b11110) -> 10진수({})'.format(int(0b11110)))
print('8진수(0o36) -> 2진수({})'.format(bin(0o36)))
print('8진수(0o36) -> 16진수({})'.format(hex(0o36)))
: 규칙성을 가지고 나열되어 있는 수들
: 연속된 두 항의 차이가 일정한 수열