본문 바로가기
프로그래밍/Python

[Python] 입력값을 받는 방법들 - input(), sys.stdin.readline()

by 소꿍 2022. 2. 6.

자주 쓰지만 아직 헷갈리는 입력값 받는 방법들을 정리해 보았다.

 

Python에서 입력을 받는 방법은 input() 함수와 sys 모듈을 import해 사용하는 방법(sys.stdin.readline())이 있다.

 

input()은 입력받은 값에 개행 문자가 없이 반환되고, prompt message를 파라미터로 받아서 사용할 수 있다.
반면 sys.stdin.readline()은 개행 문자가 입력 끝에 포함돼 있고, prompt message를 파라미터로 받아 사용할 수 없다.

 

아래 캡처 화면을 보면 sys.stdin.readline()으로 받은 input_v는 출력 시 개행 문자가 있어 한 줄이 띄어져 있고

input()으로 받은 input_v_2는 개행 문자가 없는 걸 확인할 수 있다.

개행 문자 삽입의 차이

그래서 프로그램 작성 시 입력값에 원치 않게 개행문자가 포함될 수 있으므로 확인할 필요가 있다.

strip()을 사용하면 개행문자를 제거할 수 있다.

* 참고: 파라미터 없는 strip()은 문자열에서 공백을 제거하고, 파라미터로 문자를 넘기면 해당 문자를 제거한다.

lstrip(), rstrip()은 전달된 문자나 공백을 왼쪽과 오른쪽에서 제거한다.

 

입력을 여러 번 받아야 할수록 sys.stdin.readline()을 쓰는 게 input()보다 더 빠른데,

 

그 이유는

  1) propmt의 출력여부,

  2) sys.stdin.readline()은 한 번에 읽어서 버퍼에 저장하고,

      input()은 값을 입력할 때마다 버퍼에 저장하는 데서 오는 속도 차이 때문이라고 한다.

 

 

  • 한 번에 입력 2개 받기(입력 받아서 int로 변환)
a, b = map(int, input().split())

import sys
c, d = map(int, sys.stdin.readline().split())

 

 

input()
sys.stdin.readline()

 

  • 입력값 여러 개를 list로 저장하기
numbers = list(map(int, input().split()))

 

  • 문자열 여러줄 입력받기
str_list = [input() for _ in range(n)]

3줄 입력 받기

 

  • 띄어쓰기 없이 정수 여러 개를 입력받아 2차원 배열로 저장하기
t_d_array = [list(map(int, input())) for _ in range(n)]

 

  • 열은 띄어쓰기로 행은 엔터로 구분하여 입력받아 2차원 배열로 저장하기
t_d_array = [list(map(int, input().split())) for _ in range(n)]

 

 


참고한 글

댓글