input()과 print(): 표준 입출력 완전 정리
Python input()과 print() 함수의 모든 매개변수를 다룹니다. sep, end, file, flush 옵션과 타입 변환 패턴을 예제 중심으로 설명합니다.
지난 글에서 들여쓰기가 Python의 문법 자체임을 살펴봤다. 이번에는 모든 Python 프로그램의 출발점인 print()와 input() 두 내장 함수를 깊이 파고든다. 이 두 함수를 제대로 이해해야 이후에 배울 모든 예제 코드를 직접 실행하고 확인할 수 있다.
print() — 화면에 값을 출력하는 함수
Python 2에서 print는 문장(statement)이었다. 괄호 없이 print "hello" 처럼 쓸 수 있었다. Python 3에서는 완전한 함수가 되었다. 반드시 괄호로 인수를 감싸야 한다.
print("Hello, Python!") # OK
print "Hello" # SyntaxError (Python 3)
여러 값 한 번에 출력하기
print()는 인수를 몇 개든 받아 기본적으로 공백으로 구분해 출력한다.
name = "파이썬"
version = 3.12
print("이름:", name, "버전:", version)
# → 이름: 파이썬 버전: 3.12
sep — 구분자 바꾸기
여러 값 사이의 구분 문자를 바꾸려면 sep 인수를 사용한다. 기본값은 " " (공백 한 칸)이다.
print(2024, 5, 10, sep="-") # → 2024-5-10
print("a", "b", "c", sep="") # → abc
print(1, 2, 3, sep="\n") # 각 값이 한 줄씩
end — 줄 끝 문자 바꾸기
print()는 기본적으로 출력 후 줄바꿈(\n)을 추가한다. 이 동작을 end 인수로 바꿀 수 있다.
for i in range(5):
print(i, end=" ") # → 0 1 2 3 4
print() # 마지막에 줄바꿈 한 번
진행 상황 표시기처럼 같은 줄에 계속 덮어쓰는 패턴에도 활용한다.
import time
for step in range(3):
print(f"\r처리 중: {step + 1}/3", end="", flush=True)
time.sleep(0.5)
print() # 완료 후 줄바꿈
file / flush — 출력 대상과 버퍼
file 인수로 출력 대상을 sys.stderr나 파일 객체로 바꿀 수 있다. flush=True는 버퍼를 즉시 비워 진행률 표시처럼 실시간 출력이 필요한 경우에 사용한다.
import sys
print("경고 메시지", file=sys.stderr) # 표준 오류로 출력
with open("log.txt", "w", encoding="utf-8") as f:
print("로그 기록", file=f) # 파일로 출력
input() — 사용자 입력을 받는 함수
input()은 프롬프트 문자열을 받아 화면에 출력한 뒤 사용자가 Enter를 누를 때까지 대기한다. 사용자가 입력한 내용을 항상 str(문자열)로 반환한다는 점이 가장 중요하다.
name = input("이름을 입력하세요: ")
print(f"안녕하세요, {name}님!")
반환값은 반드시 str
x = input("숫자: ")
print(type(x)) # <class 'str'>
숫자 연산을 하려면 int() 또는 float()으로 명시적으로 변환해야 한다.
age = int(input("나이: "))
print(f"10년 후: {age + 10}살")
변환 전에 사용자가 숫자가 아닌 값을 입력하면 ValueError가 발생하므로, 실제 프로그램에서는 예외 처리를 함께 사용한다.
try:
score = int(input("점수(0-100): "))
except ValueError:
print("숫자만 입력해 주세요.")
여러 값 한 번에 받기
한 줄로 여러 값을 받으려면 split()과 함께 쓴다.
a, b = input("두 수를 공백으로 입력: ").split()
print(int(a) + int(b))
또는 map()을 활용하면 더 간결하다.
a, b = map(int, input("두 수: ").split())
print(a + b)
흔한 실수와 해결책
실수 1: 입력값을 변환 없이 연산
x = input("숫자: ")
print(x + 1) # TypeError: can only concatenate str (not "int") to str
print(int(x) + 1) # 올바른 방법
실수 2: Python 2 스타일 print
print "hello" # Python 3에서는 SyntaxError
print("hello") # 항상 괄호 사용
실수 3: 빈 줄 출력 방법
print("") # 가능하지만
print() # 이쪽이 더 명확한 Python 관용구
정리
| 함수 | 반환값 | 주요 인수 |
|---|---|---|
print() | None | sep, end, file, flush |
input() | str | 프롬프트 문자열 하나 |
input()의 반환값이 항상 str임을 잊지 않는 것, 그리고 print()의 sep/end를 상황에 맞게 활용하는 것이 표준 입출력을 능숙하게 다루는 핵심이다.
지난 글: 들여쓰기: Python이 공백을 문법으로 삼은 이유
다음 글: 스크립트 vs REPL: Python 실행 방식의 차이
읽어주셔서 감사합니다. 😊