본문 바로가기

Programming/Python

[Python] 자주 사용되는 표준 입력 방법 - input, split, map

input() 함수 : 한 줄의 문자열을 입력받는 함수

 

>>> number = input("숫자를 입력하세요: ")
숫자를 입력하세요: 5
>>> print(number)
5
>>> type(number)
<class 'str'>

-> input은 입력되는 모든 것을 문자열로 취급하기때문에 number는 숫자가 아닌 문자열이다.

 

입력 값을 숫자로 인식하기 위해서 int 함수를 이용, 괄호안에 들어간 것을 정수형으로 바꿔준다.

>>> Num = int(input("숫자 입력: "))
숫자 입력: 10
>>> print(Num)
10

 

split() 함수 : 문자열을 나누어 주는 함수

 

>>> A = "Welcome to Joy house."
>>> print(A.split())
['Welcome', 'to', 'Joy', 'house']

-> 기본형 split()은 공백을 기준으로 구분해준다. 괄호안에 특정 문자 등을 넣으면, 해당 문자를 기준으로 나뉜다.

 

input()과 split()함수 결합해서도 사용이 가능하다.

>>> A = input().split()
1 2 3
>>> print(A)
['1', '2', '3']

>>> A, B = input().split() #공백을 기준으로 A, B값을 자동으로 구분 
10 20
>>> print(A)
'10'
>>> print(B)
'20'

 

>>> a, b = input().split()
>>> A = int(a)
>>> B = int(b)
>>> print(A+B)
10 20
30

위의 코드에서 첫줄에

int(input()).split() 이렇게 쓰면 안되나? 라는 생각이 들 수 있다. 이렇게 실행하면 다음과 같이 나온다.

>>> a, b = int(input()).split()
>>> A = int(a)
>>> B = int(b)
>>> print(A+B)

10 20
Traceback (most recent call last):
    File "main.py", line 1, in <module>
      a, b = int(input()).split()
    ValueError: invalid literal for int() with base 10: '10 20'

 

"ValueError: invalid literal for int() with base 10:  " 라는 에러가 발생한다. 

해당 에러는 int(), float(), str(), boolean() 등에서 원하는 형이 들어오지 않았을때 발생하는 형변환 에러이다.

왜지.............이해가 안돼....................

 

그렇다면 int(input().split()) 은 가능할까 ?

>>> a,b = int(input().split())
>>> A = int(a)
>>> B = int(b)
>>> print(A+B)

10 20
Traceback (most recent call last):
    File "main.py", line 1, in <module>
      a, b = int(input().split())
    TypeError: int() argument must be a string, a bytes-like object or a number, not 'list'

"TypeError: int() argument must be a string, a bytes-like object or a number, not 'list' " 라는 에러가 발생한다.

이는 int() 는 list가 아니므로 리스트를 정수형으로 바꿔줄 수 없다는 것이다.

 

이럴 경우에 map()함수를 활용한다.

 

map() 함수 : 리스트의 요소를 지정된 함수로 처리해준다.
                 여러 개의 데이터를 한 번에 다른 형태로 변화하기 위해 사용된다.

 

map() 함수 특징

- 원본 리스트를 변경하지 않고 새 리스트를 생성

- map타입으로 결과를 리턴하기 때문에 리스트나 튜플 등으로 변환한다.

 

map(적용할 함수, 반복가능한 자료형)

>>> a,b = map(int, ['100', '200'])	
>>> print(a)
>>> print(b)
>>> print(type(a), type(b))

100
200
<class 'int'> <class 'int'>

map()함수를 사용하면 리스트인데도, 각각의 문자열에 int함수를 적용한것으로 인식되어 오류가 발생하지 않는다.

또한, a,b의 자료형이 int형이 된 것을 확인할 수 있다.

 

이를 활용하여, 입력 값이 여러 숫자일 경우, 이를 공백 기준으로 나누고, map함수를 통해 쪼개 받을 수 있다.

>>> a,b = map(int, input().split())
>>> print(a, b)
>>> print(type(a), type(b))

15 20
15 20
<class 'int'> <class 'int'>

 

그리고 하나의 리스트로 형 변환된 값을 받을 수 있다.

>>> num_list = list(map(int, input().split()))
>>> print(num_list)
>>> print(type(num_list))

1 3 5 7 9
[1, 3, 5, 7, 9]
<class 'list'>

 

 

 

본 포스팅은 아래의 사이트를 참고하여 작성하였습니다.

https://ccamppak.tistory.com/38 

https://velog.io/@suasue/Python-map-%ED%95%A8%EC%88%98

https://hkim-data.tistory.com/32?category=1016184 

'Programming > Python' 카테고리의 다른 글

[Python] split() vs split(" ")  (0) 2022.01.24