OS: MAC
참고: 👉 점프 투 파이썬 - 라이브러리 예제 바로가기
017. 과자를 똑같이 나누어 담으려면? ― math.gcd(매스.지디씨)
| 구분 | 내용 | 예시 | 결과 |
| 모듈 | 수학 함수 모듈 임포트 | import math | — |
| 기능 요약 | 두 수의 최대공약수 반환 (남김없이 나눌 수 있는 가장 큰 수) |
import math math.gcd(8, 12) |
4 |
| 기본 문법 | math.gcd(x, y) → int 반환(정수) | import math math.gcd(36, 60) |
12 |
| 과자 나누기 (대표 예시) |
과자 36개, 60개를 남김없이 동일 개수로 포장 |
import math g = math.gcd(36, 60) ① print(g) ② print(36//g, 60//g) |
① 12 → 최대 12봉지까지 포장가능 ② 3 5 → 36개는 3봉지, 60개는 5봉지 |
| 여러 수 GCD (3.9+) | 여러 개의 수의 최대공약수 | import math math.gcd(*[24, 36, 60]) |
12 |
| 음수/0 처리 | 음수도 OK(항상 양수 반환), gcd(0, n)=n |
① math.gcd(-12, 8) ② math.gcd(0, 15) |
① 4 ② 15 |
| 분수 기약화 | 분수 기약분수로 만들기 | import math n,d=84,126 g=math.gcd(n,d) print(n//g, d//g) |
2 3 → 84/126 = 2/3 |
라이브러리 예제 문제: 어린이집에서 사탕 60개, 초콜릿 100개, 젤리 80개를 준비했다. 아이들이 서로 싸우지 않도록 똑같이 나누어 봉지에 담는다고 하면 최대 몇 봉지까지 만들 수 있을까? 단, 사탕, 초콜릿, 젤리는 남기지 않고 모두 담도록 한다.

018. 버스가 동시에 도착할 시각을 알려면? ― math.lcm(매스.엘씨엠)
- math.lcm(a, b)는 두 수가 다시 동시에 만나는 최소 시점을 구하는 함수
| 구분 | 내용 | 예시 | 결과 |
| 모듈 | 수학 함수 모듈 임포트 | import math | — |
| 기능 요약 | 두 수의 최소공배수 반환 (공통 배수 중 가장 작은 수) |
import math math.lcm(6, 15) |
30 |
| 기본 문법 | math.lcm(x, y) → int 반환(정수형) | import math math.lcm(12, 18) |
36 |
| 버스 도착 계산 (대표 예시) | 15분 간격 버스와 20분 간격 버스가 동시에 도착하는 시각 계산 |
import math bus1, bus2 = 15, 20 meet = math.lcm(bus1, bus2) print(meet) |
60 → 60분 후 (1시간마다 동시 도착) |
| 여러 수 LCM (3.9+) | 여러 개의 수의 최소공배수 | import math math.lcm(3, 4, 5) |
60 |
| 음수/0 처리 | 음수 입력 시 자동으로 양수 반환lcm(0, n)=0 | ① math.lcm(-6, 15) ② math.lcm(0, 12) |
① 30 ② 0 |
| GCD와 관계식 | a × b = gcd(a, b) × lcm(a, b) | import math print(math.gcd(12,18), math.lcm(12,18)) |
6 36 → 12×18 = 6×36 |
| 활용 예시 | 주기적 반복, 기계 동기화, 버스 도착 계산, 스케줄 맞추기 | — | — |
라이브러리 예제 문제: 어느 버스 정류장에 시내버스는 15분마다 도착하고 마을버스는 25분마다 도착한다고 한다. 오후 1시에 두 버스가 동시에 도착했다고 할 때 두 버스가 동시에 도착할 다음 시각을 알려면 어떻게 해야 할까?

019. 소수점을 정확하게 계산하려면?―decimal.Decimal(데시멀디시멀)
- 금융·회계 계산: 가격, 세금, 이자율 등 오차 허용 불가한 계산에 필수
- 통계·소수점 정밀도: float 누적 오차 방지
- 과학 계산 시 정밀도 제어: getcontext().prec로 자릿수 조정 가능
- Decimal은 float의 오차를 없애고 “진짜 0.1 + 0.2 = 0.3” 을 만들어주는 정밀 계산 도구
| 구분 | 내용 | 예시 | 결과 |
| 모듈 | 소수점 오차 없이 정확한 계산을 위한 모듈 |
from decimal import Decimal | — |
| 기능 요약 | 부동소수점(float)의 오차를 제거하고 정확한 십진 계산 수행 | ① float(0.1 + 0.2) ② Decimal('0.1') + Decimal('0.2') |
① 0.30000000000000004 ② 0.3 |
| 기본 문법 | Decimal('숫자') 형태로 사용 (문자열 입력 권장) | Decimal('0.1') + Decimal('0.2') | Decimal('0.3') |
| 오차 비교 (대표 예시) |
float 연산은 이진 부동소수점이라 오차 발생 |
① print(0.1 + 0.2) ② print(Decimal('0.1') + Decimal('0.2')) |
① 0.30000000000000004 ② 0.3 |
| 정확한 계산 (금융/가격 등) | 금융 계산, 세금 계산 등 정확도 필수 계산에 사용 | price = Decimal('19.99') qty = Decimal('3') print(price * qty) |
59.97 |
| 반올림 제어 (ROUND_HALF_UP 등) |
원하는 방식으로 소수점 처리 | from decimal import ROUND_HALF_UP, getcontext getcontext().rounding = ROUND_HALF_UP print(Decimal('1.25').quantize(Decimal('0.1'))) |
1.3 |
| 정밀도 설정 (precision) |
계산 자릿수(정밀도) 제한 가능 | from decimal import getcontext getcontext().prec = 5 print(Decimal('1') / Decimal('7')) |
0.14286 |
| 문자열 입력 이유 | Decimal(0.1)은 이미 float 오차를 포함하므로반드시 '0.1'처럼 문자열로 입력해야 함 | Decimal(0.1) vs Decimal('0.1') | 0.10000000000000000555... vs 0.1 |
| 관련 함수 | math 모듈 대신 decimal 모듈에서 제공(덧셈, 곱셈, 나눗셈, 반올림 등 지원) | Decimal('10') / Decimal('3') | 3.333333333333333333333333333 |
020. 분수를 정확하게 계산하려면? ― fractions(프랙션스)
- 비율 계산: 케이크나 데이터 비율 등 정밀한 비율 표현
- 통계 및 비율 연산: float 오차 없는 확률 계산
- 수학 문제 풀이용: 자동 약분 및 기약분수 표현
- Fraction은 “소수 대신 분수 그대로 계산하는 도구” — 정확한 수학적 비율 계산에 강하다
| 구분 | 내용 | 예시 | 결과 |
| 모듈 | 분수(유리수) 계산을 위한 모듈 | from fractions import Fraction | — |
| 기능 요약 | 분수를 정확히 표현하고, 덧셈·뺄셈·곱셈·나눗셈을 정확하게 처리 |
Fraction(1, 3) + Fraction(1, 6) | Fraction(1, 2) |
| 기본 문법 | Fraction(분자, 분모) 형태로 생성 | Fraction(3, 5) | 3/5 |
| 자동 기약분수화 (대표 예시) |
입력 시 자동으로 최대공약수로 약분 | Fraction(4, 6) | 2/3 |
| 문자열/소수 변환 가능 | 문자열 "1/3", 또는 소수 0.5 로 변환 가능 | ① Fraction('1/3') ② Fraction(0.5) |
① 1/3 ② 1/2 |
| 사칙연산 (정확 계산) | ① print(Fraction(1, 3) + Fraction(1, 6)) ② print(Fraction(3, 4) * Fraction(2, 3)) |
① 1/2 ② 1/2 |
|
| float과 비교 | float은 근사값, Fraction은 정확한 수치 | ① print(0.1 + 0.2) ② print(Fraction(1,10) + Fraction(1,5)) |
① 0.30000000000000004 ② 3/10 |
| 소수로 변환 (float) | float(Fraction) 로 실수 변환 가능 | float(Fraction(1, 3)) | 0.3333333333333333 |
| 분모 제한 (limit_denominator) |
근사 분수 구할 때 사용 | Fraction(3.141592).limit_denominator(1000) | 355/113 |
| 정수 변환 | 분수가 정수일 경우 자동 변환 | Fraction(8, 4) | 2 |
| decimal과의 차이 | Decimal은 소수점 정밀도, Fraction은 분수 형태로의 정확도 유지 |
— | — |
라이브러리 예제 문제:


021. 로또 번호를 뽑으려면? ― random(랜덤)
- random은 “세상에 하나뿐인 무작위 결과”를 만들어주는 파이썬의 복불복 담당 모듈
| 구분 | 설명 | 예시 | 결과 |
| 모듈 | 임의의 숫자, 순서, 샘플링 등 무작위(random) 데이터 생성 | import random | random.함수() 형태로 사용 |
| random.random() | 0 이상 1 미만의 난수(float) 생성 | random.random() | 0.2731 … (매번 다름) |
| random.randint(a, b) | a 이상 b 이하 정수 1개 무작위 선택 |
random.randint(1, 45) | 5 (1이상 45이하 정수 무작위 선택으로 매번 다름) |
| random.randrange (start, stop[, step]) |
range()처럼 간격 지정 가능 (stop 제외) |
random.randrange(1, 46, 2) | 17 |
| random.choice(seq) | 리스트, 문자열 등 시퀀스에서 임의의 원소 1개 선택 | random.choice(['🍎','🍌','🍊']) | '🍌' |
| random.choices (seq, weights, k) |
리스트에서 가중치 기반으로 k개 선택 (중복 가능) | import random fruits = ['🍎', '🍌', '🍇'] weights = [5, 3, 1] # 🍎가 더 자주 뽑히게 result = random.choices(fruits, weights=weights, k=10) print(result) |
['🍎', '🍎', '🍎', '🍌', '🍎', '🍌', '🍎', '🍎', '🍇', '🍎'] |
| random.sample(seq, k) | 시퀀스에서 중복 없이 k개 추출 |
random.sample(range(1, 46), 6) | [38, 39, 44, 28, 27, 6] |
| random.shuffle(list) | 리스트의 순서를 섞음 (제자리 변경) |
nums = [1,2,3,4,5] random.shuffle(nums) print(nums) |
[2, 3, 5, 1, 4] |
| random.seed(n) | 난수 시드 고정 (결과 재현 가능) |
random.seed(10) print(random.randint(1,10)) |
10 (항상 같은 값) |
| random.uniform(a,b) | a 이상 b 이하 실수(float) 무작위 생성 | random.uniform(1.5, 5.5) | 1.6303402611282185 |
라이브러리 예제 문제: 1부터 45 사이의 서로 다른 숫자 6개로 이루어진 로또 번호를 추첨하는 프로그램을 만들려면 어떻게 해야 할까?(로또는 1부터 45까지의 숫자 중 6개가 맞으면 1등에 당첨되는 복권이다. 단, 숫자는 중복될 수 없다.)

022. 시험 결과의 평균값과 중앙값을 알려면? ―statistics(스태티스틱스)
- 시험 점수 분석: 평균/중앙값으로 전체 성적 수준 파악
- 매출 분석: 일평균/중앙 매출 구하기
- 데이터 정제: 이상치 감지 기준 설정 (평균±표준편차)
| 구분 | 내용 | 예시 | 결과 |
| 모듈 | 통계 계산을 위한 표준 모듈 | import statistics | |
| statistics.mean(data) | 평균값 (산술 평균) = 전체 합 ÷ 개수 | statistics.mean([50, 60, 70]) | 60 |
| statistics.median(data) | 중앙값 (가운데 위치한 값) = 데이터를 정렬 후 가운데 값 | statistics.median([10, 20, 30, 40]) | 25.0 |
| statistics.mode(data) | 최빈값 (가장 자주 등장한 값) = 가장 자주 등장한 값 | statistics.mode([1, 2, 2, 3]) | 2 |
| statistics.stdev(data) | 표준편차 (Standard Deviation) = 편차의 제곱 평균 | statistics.stdev([10, 20, 30]) | 10.0 |
| statistics.variance(data) | 분산 (Variance) = 분산의 제곱근 (데이터 퍼짐 정도) | statistics.variance([10, 20, 30]) | 100.0 |
라이브러리 예제 문제: 다음은 A반 학생 10명의 중간고사 수학 점수 데이터이다. 다른 반과 비교하고자 이 데이터를 이용하여 A반 수학 점수의 평균값과 중앙값을 구하려면 어떻게 해야 할까?
marks = [78, 93, 99, 95, 51, 71, 52, 43, 81, 78]

+ 원의 둘레와 넓이를 구하려면? ― math.pi (매스 .파이)
| 구분 | 내용 | 예시 | 결과 |
| 모듈 | 수학 관련 함수와 상수 제공 | import math | |
| math.pi | 원주율(π) 상수 | math.pi | 3.141592653589793 |
| math.e | 자연상수 e (2.718...) | math.e | 2.718281828459045 |
| math.sqrt(x) | 제곱근 | math.sqrt(16) | 4.0 |
| math.pow(x, y) | 거듭제곱 (xʸ) | math.pow(2, 3) | 8.0 |
| math.floor(x) | 내림 | math.floor(3.7) | 3 |
| math.ceil(x) | 올림 | math.ceil(3.2) | 4 |
| math.trunc(x) | 소수점 버림 | math.trunc(3.9) | 3 |
| 문제 | 예시 | 결과 |
| 원의 둘레와 넓이 구하기 | import math r = 5 # 반지름 circumference = 2 * math.pi * r # 원의 둘레 area = math.pi * (r ** 2) # 원의 넓이 print("원의 둘레:", round(circumference, 2)) print("원의 넓이:", round(area, 2)) |
원의 둘레: 31.42 원의 넓이: 78.54 |
각도·회전 계산? ― math.tau(타우), math.degrees(디그리즈), math.radians(레디언스)
- math.pi는 반원(180°),
- math.tau는 한 바퀴(360°),
- math.degrees·math.radians는 각도 ↔ 라디안 변환기
| 구분 | 내용 | 예시 | 결과 |
| 모듈 | 수학 계산용 표준 모듈 | import math | |
| math.pi = π | 원주율 (반원 180°) | math.pi | 3.141592653589793 |
| math.tau = τ | 2π (하나의 원, 360°) | math.tau | 6.283185307179586 |
| math.degrees(x) | 각도를 라디안 → ° 로 변환 라디안 → 도(degree) |
math.degrees(math.pi) | 180.0 |
| math.radians(x) | 각도를 ° → 라디안 으로 변환 도(degree) → 라디안 |
math.radians(180) | 3.141592653589793 |
'미래 먹거리를 위하여' 카테고리의 다른 글
| [파이썬 정복하기] 라이브러리 5장 - 함수형 프로그래밍 다루기2 (맥OS 기준) (0) | 2025.11.11 |
|---|---|
| [파이썬 정복하기] 라이브러리 5장 - 함수형 프로그래밍 다루기1 (맥OS 기준) (0) | 2025.11.10 |
| [파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기6 (맥OS 기준) (1) | 2025.11.08 |
| [파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기5 (맥OS 기준) (1) | 2025.11.07 |
| [파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기4 (맥OS 기준) (0) | 2025.11.06 |