파이썬에서 print() 함수로 출력하는 경우는 많지만 입력하는 방법은 비교적 생소하실 수 있습니다.
본 포스팅에서는 파이썬의 input() 함수와 sys.stdin.readline() 함수를 이용하여 개수와 상관없이 사용자의 입력값들을 받는 방법에 대해 다루어 보겠습니다.
input() 으로 입력 받기
x = input()
print("x의 값: ",x)
결과값:
위 코드를 실행한 후 프롬트는 input() 함수 동작에 따라 입력을 기다립니다. 저는 5라는 숫자를 치고 엔터를 눌렀으며 print() 함수에 따라 “x의 값: 5″라는 문자열이 출력되고 종료되는 것을 확인하실 수 있습니다.
age = input("나이를 입력해주세요 => ")
print("나이: ", age)
결과값:
위 예시처럼 input() 함수에는 매개변수로 문자열을 받을 수 있습니다. 이는 코드가 어떠한 입력값을 받기 위함인지 문자열로 안내문구를 출력하도록 하는 것인데요.
마찬가지로 저는 25를 넣고 엔터를 눌렀고 input()으로 입력값을 받은 age 변수의 값이 출력된 후 코드는 종료됩니다.
number1 = input("첫번째 숫자 => ")
number2 = input("두번째 숫자 => ")
print("두 숫자의 합: ", number1 + number2)
결과값:
마지막으로 아셔야할 주의사항은 input() 함수로 받은 모든 입력값은 문자열로 변수에 저장됩니다. 위에서 볼 수 있듯이 두 숫자의 합을 “25”로 예상하셨을 수 있지만 문자열 “10”과 문자열 “15”가 더해져서 “1015”라는 값이 도출됩니다.
따라서 기대하는 입력값이 문자열이 아니라면 이에 맞게 형 변환을 해주어야 합니다.
number1 = int(input("첫번째 숫자 => "))
number2 = int(input("두번째 숫자 => "))
print("두 숫자의 합: ", number1 + number2)
sys.stdin.readline() 으로 입력 받기
파이썬에서 input() 함수 말고도 sys.stdin.readline() 함수를 통해 입력값을 받을 수도 있습니다.
둘의 차이점이라면 바로 입력값 뒤에 붙는 개행문자인데요. input() 함수의 경우 개행문자가 포함되지 않아 다음 라인으로 넘어가지 않지만 readline()의 경우 자동으로 개행문자가 포함되어 한 줄 띄어서 입력됩니다.
또한, sys 모듈에 포함된 함수이기 때문에 import 해주어야 합니다.
import sys
numbers = list(sys.stdin.readline())
print("입력값: ", numbers)
결과값:
결과에서 볼 수 있듯이 입력값 “1234”를 리스트 형태로 바꾸었을 때 개행문자 “\n”이 포함되었습니다.
그렇다면 불편하게 굳이 왜 sys.stdin.readline() 함수를 써야하나 싶으실 수 있는데요. 이유는 여러 개의 입력값을 받을 때 생길 수 있는 유의미한 속도차이 때문입니다.
readline() 함수는 input()과 다르게 매개변수로 안내문을 받지 않고, 입력할 때마다 메모리에 저장하지 않고 한 번에 읽어 저장하기 때문에 더 빠릅니다.
예제모음
한 번에 입력 2개
import sys
first, second = map(int, sys.stdin.readline().split())
print("첫 번째: ", first)
print("두 번째: ", second)
결과값:
split() 함수로 스페이스가 있는 경우 다른 입력값으로 인식되게 했습니다.
여러줄 입력
n = 5
str_list = [input() for _ in range(n)]
print(str_list)
결과값:
여기서 n은 원하는 줄 개수입니다.
2차원 배열 입력
n = 5
array = [list(map(int, input().split())) for _ in range(n)]
print(array)
결과값:
split()으로 스페이스를 통해 열 구분을, 엔터로 행 구분을 하여 입력값에 의한 2차원 배열을 생성할 수 있습니다. 여기서 n은 행의 개수 입니다.