[파이썬 문법] 다양한 입력 함수들

태온·2021년 7월 30일
0
post-thumbnail

[파이썬] 다양한 입력 함수들 😎

여러분들은 대부분 input() 함수를 많이 알고 계실겁니다. 하지만 입력 값을 수백, 수천 개 받을 때는 input() 함수를 쓰게 되면 시간초과 에러가 나게 됩니다. 이러한 입출력 속도를 위해서 sys.stdin.readline() 함수를 사용해주는 것이 더 좋습니다.

먼저 input() 함수부터 보겠습니다.

📌 1. input()

input() 함수는 파이썬의 기본적인 입력 방법으로

사용자의 입력을 받아 한 줄을 문자열로 처리합니다.

또한, 입력 마지막의 개행 문자(\n)를 포함하지 않습니다.

a = input()
print(a)
print(type(a))

위의 코드를 입력하게 되면 아래처럼 변수 a의 type이 string 인것을 알 수 있습니다.

input() 함수를 사용하게 되면 항상 문자열로 저장이 됩니다.

이 점을 유의해서 만약 정수형이나 실수형으로 입력하고 싶을 경우에는 아래처럼 input() 앞에 int() 또는 float()을 써주면 됩니다.

a = int(input())
b = float(input())
c = input()

print(type(a), "a는", a)
print(type(b), "b는", b)
print(type(c), "c는", c)

📌 2. sys.stdin.readline()

sys.stdin.realine() 함수는 sys 모듈에 포함되어 있으므로 import sys로 불러와야 합니다.

input() 함수와 동일한 기능을하지만 입력 마지막의 개행 문자(\n)를 포함하여 처리합니다.

하지만 이러한 공백 없이 출력할 수 있게 하는 함수가 있습니다.

  • rstrip()

    : 오른쪽 공백을 삭제

  • lstrip()

    : 왼쪽 공백을 삭제

  • strip()

    : 왼쪽, 오른쪽 공백을 삭제

이해를 돕기 위해 코드를 통하여 비교해보겠습니다.

import sys

a = sys.stdin.readline()
a = list(a)
print("1. readline : ", a)

b = sys.stdin.readline().rstrip()
b = list(b)
print("2. rstrip : ", b)

c = sys.stdin.readline().lstrip()
c = list(c)
print("3. lstrip : ", c)

d = sys.stdin.readline().strip()
d = list(d)
print("4. strip : ", d)

위의 코드를 실행하고 입력을 123 456 이라 하고 결과를 보겠습니다.

입력 받은 문자를 쉽게 비교하기 위해 문자열을 list 형태로 바꿔보았습니다.

각각 함수를 보시게 되면 각 특징에 맞게 작동 된 것을 보실 수 있습니다 😆

📌 3. input()이 sys.stdin.readline() 보다 느린 이유

자 그럼 왜 input() 함수는 sys.stdin.readline()함수보다 느릴까요?

input() 내장 함수는 parameter로 prompt message를 받을 수 있습니다. 따라서 입력 받기 전 prompt message를 출력해야 합니다. 물론 prompt message가 없는 경우도 있지만, 이 경우도 약간의 부하로 작용할 수 있습니다.

하지만, sys.stdin.readline() 은 prompt message를 인수로 받지 않습니다.

또한, input() 내장 함수는 입력받은 값의 개행 문자(\n)를 삭제시켜서 리턴합니다. 즉, 입력받은 문자열에 rstrip()함수를 적용시켜 리턴합니다.

반면에 sys.stdin.readline()은 개행 문자(\n)를 포함한 값을 리턴해줍니다.

결론적으로 input() 내장 함수는 sys.stdin.readline()과 비교해서 prompt message를 출력하고, 개행 문자를 포함한 값을 리턴하기 때문에 느리다.


따라서, 코딩테스트에서 Python으로 문제를 풀 때는 input()을 사용하게 되면 시간초과 에러가 날 수있기에 sys.stdin.readline()을 활용해서 입력을 받는 것이 좋습니다.

profile
코딩도시락(배워서 남 주자)

0개의 댓글