여기서는 기본적인 파이썬의 입/출력에 대해 살펴보자.
기본 입력 방식
한 줄 입력 받기
기본 함수인 input()을 이용하면 문자열로 한 줄을 받아올 수 있고 필요하다면 int, float 등 함수를 이용해 원하는 타입으로 변경할 수 있다.
# 문자열로 입력
s = input()
# 정수로 입력
n = int(input())
# 실수로 입력
f = float(input())
여러 값을 한 줄로 입력 받기
input()을 통해 받은 데이터는 split()으로 쪼갤 수 있고 map 함수를 이용하면 쪼갠 데이터를 원하는 타입으로 변경할 수 있다. map의 결과로 여러 값이 반환될 수 있을 텐데 여러 변수로 destructuring 할 수도 있고 list로 받을 수도 있겠다.
# 공백으로 구분된 두 정수 - unpacking (javascript의 destructuring 개념)
a, b = map(int, input().split())
# 공백으로 구분된 여러 정수를 리스트로
arr = list(map(int, input().split()))
여러 줄 입력 받기
여러 줄을 입력 받을 때는 당연히 반복문을 사용한다. for와 함께 range 함수를 사용할 수 있다.
# n개의 줄 입력
n = int(input())
for i in range(n):
line = input()
입력 최적화
빠른 입력 처리
빠른 입력을 위해서는 sys의 sys.stdin.readline을 사용한다. 기본으로 제공되는 input을 readline으로 대체해서 사용하면 된다. 주의할 점은 sys.stdin.readline()의 경우 마지막 개행문자를 포함하므로 문자열 입력 시 strip() 또는 rstrip()을 사용하는 것이 안전하다.
import sys
input = sys.stdin.readline # 대체
s = input().strip() # 개행문자 제거
문자열을 이용한 입력
입력을 콘솔로 받지 않고 저장되어있는 문자열을 이용하려면 io의 StringIO를 이용할 수 있다. 기본적인 sys.stdin은 콘솔 기반이므로 이것을 io.StringIO로 대체해주자.
import sys
from io import StringIO
src = ""
sys.stdin = StringIO(src) # stdin 대체
input = sys.stdin.readline # input 대체
for t in range(int(input())):
출력 방식
기본 출력
# 단순 출력
print("Hello")
print(123)
# 여러 값 출력 (공백으로 구분)
print(a, b, c) # "1 2 3"
# 구분자 변경
print(a, b, c, sep=', ') # "1, 2, 3"
print(a, b, c, sep='\n') # 줄바꿈으로 구분
# 끝 문자 변경 (기본은 '\n')
print(a, end=' ') # 줄바꿈 없이 공백
print(b) # "1 2"
포멧팅 출력
a, b = 10, 20
# f-string (Python 3.6+, 가장 추천)
print(f"{a} {b}")
print(f"합: {a + b}")
pi = 3.141592653589793
# f-string으로 소수점 자릿수 지정
print(f"{pi:.2f}") # 3.14 (소수점 2자리)
print(f"{pi:.4f}") # 3.1416 (소수점 4자리, 반올림)
print(f"{pi:.0f}") # 3 (정수로 반올림)
모아서 출력하기
Java에서 출력 시 StringBuilder에 모아서 출력하듯이 List에 담아서 출력하자.
result = []
for i in range(n):
result.append(str(i))
print('\n'.join(result))