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
'Programming > Python' 카테고리의 다른 글
[Python] split() vs split(" ") (0) | 2022.01.24 |
---|