3주: day12

daye·2023년 3월 15일

달성한 목표

강의 : 파이썬 중급 문풀 3~5 / 기초수학 1~3
복습 : 파이썬 중급 문풀 1~2 파트(1~28강) 실습문제

정리할 파트

강의 : 파이썬 중급 문풀 3~5 / 기초수학 1~3

49

순열 nPr

: 서로 다른 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)

50

조합 nCr

: 서로 다른 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)

51

실습 : 공과금, 수입 대비 공과금 비율

52

  • 패키지와 모듈을 만들어 부르고 연산 결과를 출력
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)}')

53 ***

실습 : 로그인 - 계정 관리 - 계정 삭제

54

  • 클래스 상속 구조 만들기

55 **

실습 : 도서 관리 프로그램 ( 도서 정보, 도서 저장소 )

56

  • 추상 클래스
    실습 : 한영, 한일 사전 클래스 만들기
  • abcmeta

57 *

실습 : 주사위 게임 클래스 + 컴퓨터와 사용자 게임 결과

58

실습 : 자동차 경주 게임 클래스

from time import sleep

n초 씩 출력 딜레이 (보충 필)

59

실습 : mp3 플레이어 클래스 생성, 음악 등록, 재생

60

실습 : 산술연산 결과 출력 모듈 생성, 예상되는 예외에 대한 예외처리 코드 작성

아니.. 중급파트보다 기초수학을 우선으로 커리큘럼에 뒀어야하는거 아니냐고요... 기초수학 파트에서 파이썬 기초활용 문제가 있을줄은..ㅠ 이해 못해서 날밤깠던 세월.. 물어내

기초수학

1 약수와 소수

약수 : 어떤 수를 나누어 떨어지게 하는 수
소수 : 1과 그 수 자신만을 약수로 가지는 수 (1 제외)

2

파이썬을 활용해 약수, 소수 찾기

3 소인수분해

  • 소인수
    : 인수(=인수) 중에서 소수인 숫자
    (ex/ 12의 소인수 : 2, 3)

  • 소인수분해
    : 1보다 큰 정수를 소인수의 곱으로 나타낸 것
    ( ex/ 12의 소인수분해 : 2^2 x 3
    / 36의 소인수분해 : 2^2 x 3^2
    / 25의 소인수분해 : 5^2 )
    : 소인수분해를 이용해서 약수를 정확하고 쉽게 구할 수 있다.

4

count()

list.count(n) : 해당 리스트에 n이 몇개가 있는지 반환해주는 함수.

append()

list.append(n) : 해당 리스트에 n을 추가시켜주는 함수.

remove()

list.remove(n) : 해당 리스트에서 n을 삭제하는 함수.

5 최대공약수

  • 공약수
    : 두 개 이상의 수에서 공통된 약수
  • 최대공약수
    : 공약수 중 가장 큰 수
  • 소인수분해를 이용하면 최대공약수를 구할 수 있다.

6

유클리드 호제법

7 최소공배수

  • 공배수
    : 두 개 이상의 수에서 공통된 배수
  • 최소공배수
    : 공배수 중 가장 작은 수
  • 소인수분해를 이용하면 최소공배수 및 공배수를 구할 수 있다.
    : 공통인 소인수의 거듭제곱에서 지수가 크고 공통이 아닌 수를 모두 곱한다.

8

  • 최소공배수 = 숫자1 * 숫자2 // 최대공약수
    : 최대공약수를 먼저 구하고, 최소공배수를 구한다.
  • 3개의 수에 대한 최소공배수
    : 두 개의 수에 대한 최소공배수를 구한 후, 이 최소공배수와 세 번째 수의 최소공배수를 구한다.

9 진법

  • 진법
    : 특정 숫자 몇 개를 사용하여 수를 표시하는 방법
  • 10진수를 n진수로 변환
    : (윈도우의 경우, 10진수 수를 n진수로 변환하는 기능이 있다.)
    : 10진수에 해당하는 수를 n으로 나눌 수 없을 때까지 나눈다.
    (사진 필요)
  • n진수를 10진수로 변환
    (사진 필요)
  • 2진수를 8진수로 변환
  • 2진수를 16진수로 변환

10

bin()

: binary 2진수

oct()

: octal 8진수

hex()

: hexadecimal 16진수

  • 10진수 -> n진수 변환
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
  • n진수 -> 10진수 변환
print('2진수(0b11110) -> 10진수({})'.format(int('0b11110', 2)))

# 결과
2진수(0b11110) -> 10진수(30)
  • n진수 -> m진수 변환
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)))

11 수열

: 규칙성을 가지고 나열되어 있는 수들

  • 일반항
    : (ex/ an = 2n )에서, 2n을 '일반항'이라고 한다.
    : an에서 n은 정의역 자연수
  • an = Sn - S(n-1)
    : 단, n >= 2 이고 a1 = S1

12 등차수열

: 연속된 두 항의 차이가 일정한 수열

  • 공차 (d)
    : 항들의 일정한 차이
  • 등차수열의 일반항
    : an = a1 + (n-1)*d
  • 등차중항
    : ( a(n-1) + a(n+1) ) / 2 = an 이때의 an
  • 등차수열의 합
    : Sn = n (a1 + an) / 2 = n (2a1 + (n-1)*d) / 2

13

14

0개의 댓글