심사문제 질문입니다...
파이썬 IDLE를 직접켜서 하는데 너무 많이틀리고 해서 올립니다.
input,split 함수를 이용해서,
>>> step = input().split()
2
>>> step
[ ' 2 ' ]
이렇게 리스트형으로 나오는데,
정수를 적용하려고 step = int(step) 이라고 치니까 오류가 나더군요
뭐가 잘못된건가요~?
Unit 5.1.5와 5.1.6을 참고하세요.
input 함수로 입력 받으면 문자열입니다. 10을 입력하고 입력된 값을 출력해보면 '10'처럼 문자열이라는 것을 알 수 있습니다. type 함수로 step 변수의 자료형을 알아보면 class 'str', 즉 문자열 객체라는 것을 알 수 있습니다.
>>> step = input()
10
>>> step
'10'
>>> type(step)
<class 'str'>
>>>
int 함수로 문자열을 숫자로 변환합니다. 숫자로된 문자열만 숫자로 변환할 수 있습니다. step으로 출력하면 '10'이 아니라 10이라고 출력됩니다. 즉, 숫자입니다. type으로 확인해보면 class 'int'로 정수(integer) 객체라는 것을 알 수 있습니다.
>>> step = int(step)
>>> step
10
>>> type(step)
<class 'int'>
>>>
input 함수로 입력을 받으면 문자열입니다. 숫자 3과 5를 한 번에 입력하고 싶어서 3 5를 입력해도 결과는 '3 5'로 문자열입니다. type(data)로 확인하면 문자열 객체이고, int 함수로 변환하려 하면 '3 5'는 숫자로만 된 문자열이 아니라 공백이 들어간 문자열이므로 변환할 수 없어서 에러가 발생합니다.
>>> data = input()
3 5
>>> data
'3 5'
>>> type(data)
<class 'str'>
>>> int(data)
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
int(data)
ValueError: invalid literal for int() with base 10: '3 5'
>>>
Unit 6.4 입력 값을 변수 두 개에 저장하기를 보면 input().split()을 사용해서 분리합니다. a와 b 모두 여전히 문자열입니다. 숫자로 변환할 필요가 있습니다.
>>> a, b = input().split()
3 5
>>> a
'3'
>>> type(a)
<class 'str'>
>>> b
'5'
>>> type(b)
<class 'str'>
>>>
int(a), int(b)로 각 변수를 변환하고, a, b에 다시 저장합니다. 결과를 보면 숫자로 변환되었습니다.
>>> a = int(a)
>>> a
3
>>> type(a)
<class 'int'>
>>> b = int(b)
>>> b
5
>>> type(b)
<class 'int'>
>>> a+b
8
>>>
변수 2개로 했지만, 변수가 3개, 4개로 늘어나도 방법은 같습니다.
숫자 입력을 위해 매번 이와 같이 번거롭게 하면 괴롭습니다.
Unit 6.4.3을 보면 그래서 map 함수를 이용해 이 과정을 단축합니다. input().split()으로 나눈 값에 int 함수를 적용해 a, b에 저장합니다.
>>> a, b = map(int, input().split())
3 5
>>> a
3
>>> b
5
>>>
input().split()만 사용하면 결과는 리스트가 됩니다. 1개만 입력해도 리스트가 됩니다. 리스트가 아니라 각 변수에 넣으려면 위와 같이 a, b처럼 변수를 나열해야 합니다. type(data)는 list 객체인 걸 알 수 있고, 그 안에 값은 '3'이니 문자열입니다. type(data[0])을 해보면 문자열인 것을 알 수 있습니다.
>>> data = input().split()
3 5
>>> data
['3', '5']
>>> type(data)
<class 'list'>
>>> type(data[0])
<class 'str'>
>>>
단계적으로 하나하나 정확하게 익혀야 합니다. UNIT 5와 6을 찬찬히 다시 살펴보고, 생각하지 않아도 코딩할 수 있을 정도로 반복하시면 좋습니다. 책을 덮고 예제를 그대로 코딩할 수 있어야 합니다.
책에 함수와 메서드가 구분되어 있습니다. 함수와 메서드는 다릅니다. 다른 것도 뒤에 설명되어 있습니다. 함수와 메서드로 구분해서 익혀주세요. '명령어'는 없습니다. input 명령어가 아니라 input 함수라고 익혀주세요. 파이썬 언어 표준에도 input 명령어는 없습니다. 쉽게 가르친다는 명목하에 개념을 무시하고 가르치는 교재가 많습니다. 처음 잘못 배운 개념은 나중에 교정하기가 매우 어렵습니다. 처음부터 차근차근 제대로 개념을 배워가세요.
코딩 도장은 반복하며 학습하면 더 좋습니다.