파이썬 코딩 논술 — 오픈북 요약
1. 입출력
name = input("이름: ") # 항상 str 반환
n = int(input("수: ")) # 정수 변환
x = float(input("실수: ")) # 실수 변환
# 한 줄에 여러 값 — split
a, b = input("두 수: ").split() # 공백 분리 → str
a, b = map(int, input().split()) # 바로 int 변환
a, b = input().split(",") # 쉼표 분리
nums = list(map(int, input().split())) # 여러 값 → 리스트
# print
print("결과:", x)
print(f"이름: {name}, 점수: {n}점") # f-문자열
print(f"{x:.2f}") # 소수점 2자리
print(f"{x:.1f}") # 소수점 1자리
print(1, 2, 3, sep=" ") # 구분자 지정
print("A", end="") # 줄바꿈 없이
2. 연산자
# 산술
+ - * / # 사칙 (/ 는 항상 float)
// # 몫 (정수 나눗셈) 7 // 2 → 3
% # 나머지 7 % 2 → 1
** # 거듭제곱 2 ** 8 → 256
# 비교 — 결과는 True/False
== != > < >= <=
# 논리
and or not
# 100 <= x <= 200 # 파이썬은 연속 비교 가능
# 대입 단축
x += 1 x -= 1 x *= 2 x //= 2 x %= 3
3. 조건문
# 기본 구조
if 조건:
...
elif 조건:
...
else:
...
# 자주 쓰는 패턴
if x % 2 == 0: # 짝수
if x % 3 == 0: # 3의 배수
if a <= x <= b: # 범위 포함
if x > 0 and y > 0: # 둘 다 양수
if s == "y" or s == "n":
4. while 반복문
# 기본
i = 0
while i < n:
i += 1
# 카운터 + break
count = 0
while count < 3:
val = input("입력: ")
if val == "1234":
print("성공!")
break
count += 1
else: # break 없이 끝나면 실행
print("실패")
# 누적
total = 0
i = 1
while i <= n:
total += i
i += 1
# 무한 루프 탈출
while True:
x = int(input())
if x == 0:
break
# 유클리드 호제법 (GCD)
a, b = int(input()), int(input())
while b:
a, b = b, a % b
gcd = a
lcm = (원래_a * 원래_b) // gcd
5. for 반복문
# range
for i in range(n): # 0 ~ n-1
for i in range(1, n+1): # 1 ~ n
for i in range(n, 0, -1): # n ~ 1 역순
for i in range(a, b, step): # step 간격
# 문자열 순회
for ch in "Hello":
print(ch)
# break / continue
for i in range(10):
if i % 2 == 0:
continue # 짝수 건너뜀
if i == 7:
break # 7에서 종료
# 중첩 for (구구단, 패턴)
for i in range(1, n+1):
for j in range(1, n+1):
print(i * j, end="\t")
print()
# 한 줄 공백 출력 패턴
result = []
for i in range(1, n+1):
result.append(str(i))
print(" ".join(result)) # "1 2 3 4 5"
# 또는
print(*result) # 동일 효과
6. 사용자 정의 함수
# 기본 구조
def 함수이름(매개변수):
...
return 결과
# 예시
def factorial(n):
result = 1
i = 1
while i <= n:
result *= i
i += 1
return result
def is_prime(n):
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
def get_grade(score):
if score >= 90: return "A"
elif score >= 80: return "B"
elif score >= 70: return "C"
elif score >= 60: return "D"
else: return "F"
# 여러 값 반환
def stats(lst):
return sum(lst), len(lst)
total, count = stats([10, 20, 30])
7. 자주 쓰는 내장 함수
abs(-5) # 5 절댓값
round(3.567, 2) # 3.57 반올림
int(3.9) # 3 소수 버림 (floor)
round(3.5) # 4 반올림 (정수)
len("hello") # 5 길이
str(42) # "42" 문자열 변환
int("42") # 42 정수 변환
float("3.14") # 3.14 실수 변환
# 리스트 관련
sum([1,2,3]) # 6
min(3, 1, 4) # 1
max(3, 1, 4) # 4
8. 문자열 메서드
s = "Hello, World!"
s.split() # ['Hello,', 'World!'] 공백 분리
s.split(",") # ['Hello', ' World!'] 쉼표 분리
s.strip() # 양쪽 공백 제거
s.upper() # "HELLO, WORLD!"
s.lower() # "hello, world!"
s.replace("o","0") # "Hell0, W0rld!"
len(s) # 13
# 문자 ↔ 코드
ord('A') # 65
ord('a') # 97
chr(65) # 'A'
# 문자 분류
ch.isalpha() # 알파벳?
ch.isdigit() # 숫자?
ch.isupper() # 대문자?
ch.islower() # 소문자?
ch.isspace() # 공백?
# ROT-13 패턴
if 'a' <= ch <= 'z':
ch = chr((ord(ch) - ord('a') + 13) % 26 + ord('a'))
9. 자주 쓰는 패턴 모음
# ── 최대·최소 직접 구현 ──
max_val = scores[0]
for s in scores:
if s > max_val:
max_val = s
# ── 소수 판별 ──
def is_prime(n):
if n < 2: return False
for i in range(2, n):
if n % i == 0: return False
return True
# ── 소인수 분해 ──
n = int(input())
d = 2
factors = []
while d * d <= n:
while n % d == 0:
factors.append(d)
n //= d
d += 1
if n > 1: factors.append(n)
# ── 피보나치 ──
a, b = 1, 1
for _ in range(n - 1):
a, b = b, a + b
# a가 n번째 항
# ── 콜라츠 ──
steps = 0
while n != 1:
if n % 2 == 0: n //= 2
else: n = n * 3 + 1
steps += 1
# ── 팰린드롬 판별 ──
def is_palindrome(s):
s = s.replace(" ", "").lower()
return s == s[::-1]
# ── 등차수열 합 ──
# 시작 a, 공차 d, 항수 n
total = 0
for i in range(n):
total += a + d * i
# ── 누진 요금 계산 패턴 ──
if usage <= 200:
fee = usage * 93.3
elif usage <= 400:
fee = 200 * 93.3 + (usage - 200) * 187.9
else:
fee = 200 * 93.3 + 200 * 187.9 + (usage - 400) * 280.6
# ── 거스름돈 ──
units = [50000, 10000, 5000, 1000, 500, 100, 50, 10]
change = paid - price
for u in units:
print(f"{u}원: {change // u}개")
change %= u
# ── 별 패턴 (삼각형) ──
for i in range(1, n+1):
print("*" * i) # 왼쪽 정렬
print(" " * (n-i) + "*"*i) # 오른쪽 정렬
# ── 별 다이아몬드 (홀수 N) ──
h = n // 2
for i in range(n):
if i <= h:
print(" "*(h-i) + "*"*(2*i+1))
else:
j = n - 1 - i
print(" "*(h-j) + "*"*(2*j+1))
10. 형 변환 · 출력 형식 빠른 참조
# 형 변환
int(3.9) # 3 (버림)
int("42") # 42
float("3.14") # 3.14
str(42) # "42"
bool(0) # False
bool(1) # True
# f-문자열 형식
f"{n}" # 그대로
f"{n:d}" # 정수
f"{x:.2f}" # 소수점 2자리
f"{n:>10}" # 오른쪽 정렬 10칸
f"{n:<10}" # 왼쪽 정렬 10칸
f"{n:05d}" # 0 채움 5자리 → 00042
# % 연산자 (나머지)
n % 2 == 0 # 짝수
n % 2 != 0 # 홀수
n % k == 0 # k의 배수
# 올림 (math 없이)
import math
math.ceil(x) # 올림
-(-x // 1) # 올림 (int 범위)
(x + k - 1) // k * k # k 단위 올림