사용자에게 입력을 받으려면 Python에서는 어떻게 해야 할까?
input() 이 생각나면, 맞다!
그런데, 반복문으로 여러줄을 입력 받아야 하는 등의 상황에서 단순히 input() 만 쓰면 시간초과되는 경우가 빈번하게 발생할 수 있다.
그렇다면, sys 모듈을 불러오고 생각해보자. sys 모듈은 파이썬 인터프리터가 제공하는 변수와 함수를 직접 제어할 수 있게 해주는 모듈이다.
그냥, input() 을 해서 입력받는 것보다 훨씬 시간이 단축될 것이다.
속도 차이에 대해 더 자세히 알고 싶다면, 해당 링크에 간략하게 설명되어 있다.
https://www.acmicpc.net/blog/view/56
사용방법은 아래와 같다.
import sys
input = sys.stdin.readline
// 이렇게 sys.stdin.readline()을 input()으로 사용하고 싶을 때, 초기에 이렇게 설정해준다.
N = int(input()) // 정수 N 입력 받기
sys.stdin.readline()은 한줄 단위로 입력을 받는다. 때문에, 개행문자('\n')가 같이 입력받아진다.
만약 123을 입력했다면, 123\n 이 저장되기 때문에, 개행문자를 제거해야 한다.
또한, 변수 타입이 기존의 input()과 마찬가지로 문자열 형태(str)로 저장되니까, 각 상황에 맞춰서 형변환을 거쳐야 한다.
알고리즘 문제를 풀다보면, 입력을 받되, 공백을 기준으로 입력받아 리스트에 저장하는 문제 등이 빈번히 나온다.이 때, map() 함수를 이용하면 수월하게 처리할 수 있다.
import sys
input = sys.stdin.readline
x_list = list(map(int,input().split()))
이 뜻을 분해하면서 살펴보자.
- input() 으로 받은 문자열을 split() 으로 공백 단위로 쪼개 리스트로 나눈다. (default 가 공백이기 때문에, split(" ")으로 안해주고 split()으로만 해줘도 작동한다. 반점(,)으로 나누고 싶다면? ▶split(",")로 하면 되겠지?
- map 을 이용해 리스트의 모든 원소에 int() 를 적용한다. (map은 리스트의 요소를 지정된 함수로 처리해주는 함수이다. 위 예제에서는 정수형 리스트를 원하니까 첫번째 매개변수를 int로 준 것이다.)
- 마지막으로, list 로 변환해준다. ( list() 를 이용해 map 객체를 list로 형변환 시켜준 것이라고 보면 된다.)
위 예제에서 내가 입력을
1 2 3 4 5 했다면,
x_list = [1,2,3,4,5] 라는 리스트가 만들어진 셈이다.
그러면, 정해진 개수의 정수를 한줄로 입력받으려면 어떻게 해야 할까?
아래의 예제를 살펴보면, 간단하다는 것을 알 수 있다.
import sys
input = sys.stdin.readline
a,b,c = map(int,input().split()) // a,b,c 에 차례로 정수를 입력받는 코드
이번엔,
정수가 아닌 N개의 문자열을 입력받아서 리스트에 저장하고 싶다면 어떻게 해야 할까?
import sys
input = sys.stdin.readline
N = int(input())
string_list = [input().strip() for i in range(N)]
위 예제에서 예를 들어 입력을
3
안녕하세요
저는 알루에요
저는 닥스훈트에요
라고 했다면
출력은 ['안녕하세요', '저는 알루에요', '저는 닥스훈트에요'] 이렇게 된다.
strip() 함수를 기억하자. 유용하게 쓰인다.
rstrip(), lstrip() 도 있는데,
strip()함수는 문자열 맨 앞과 맨 끝의 공백문자를 제거하는 기능을 한다.
'컴퓨터 공부 > 🐍 Python' 카테고리의 다른 글
n진법으로 표기된 string을 10진법 숫자로 변환하기 - int 함수 (0) | 2023.02.23 |
---|---|
몫과 나머지 - divmod (0) | 2023.02.23 |
2차원 배열에서 최댓값 찾기 (0) | 2021.09.07 |
파이썬 기본_1 (0) | 2021.07.19 |
[Python] is와 == / and와 & / or과 | (0) | 2021.06.26 |