codingchild2   2년 전

문제에서는 a라는 리스트가 이미 존재했지만, 저는 a라는 리스트가 없는 상태에서 숫자들을 입력 받아 리스트를 구성하여 합을 구하는 코드를 짜보고 싶었습니다!!


사실상 밑에 두 코드는 똑같은 결과가 나와야 하는 것 아닌가요? 그런데 두번째 코드에서는 에러가 나더라구요.

TypeError: int() argument must be a string, a bytes-like object or a real number, not 'list'

이 에러요. 

첫 번째 코드 a = [int(x) for x in input().split()]에서 

똑같이 a라는 리스트에 숫자들을 넣어주는 것이고 

마찬가지로 두 번째 코드에서도 

a라는 빈배열을 선언해주고 그 다음에 append 함수로 리스트에 숫자를 넣어주는 것 같은데

결과가 왜 다르게 나오는 지 모르겠습니다. ㅠㅠ 도와주십시오. 선생님들.



아 그리고 질문 하나만 더 해도 될까요?

저렇게 함수를 선언했을 때 

반드시 solve(1) 이런식으로 입력인수를 임의의 숫자를 넣어야 했는데, 이건 제가 a가 int라고 선언했기 때문인거죠?


긴 글 읽어주셔서 정말 감사드립니다!!!

djm03178   2년 전

x가 문자열일 때, int(x)는 x로부터 단 하나의 정수를 인식해주는 역할밖에 하지 못합니다.

codingchild2   2년 전

>>> marks = [int(x) for x in input().split()]

50 40 60 

>>> print(marks)
[50, 40, 60]

선생님, 혹시 저렇게 쓰면 marks라는 빈 리스트에 숫자들을 쓰면 int형으로 집어넣어지는 거 아닌가요? 이 때에는 세 숫자 모두 int로 인식이 되었잖아요 그렇죠? 

djm03178   2년 전

그건 그냥 int(x)가 아니라, for x in input().split() 라는 루프를 돌면서 나오는 각각의 '정수 하나만을 담고 있는 문자열' x에 대해 int(x)를 수행한 거기 때문에 가능합니다.

예를 들어, 입력이 '1 2 3' 이렇게 들어왔다면 split을 했을 때 ['1', '2', '3']이라고 하는 리스트가 만들어집니다. 이를 int를 그대로 써서 int(['1', '2', '3'])을 하면 안 됩니다. 이게 TypeError가 나는 케이스고요,

for x in input().split()은 split을 통해 만들어진 ['1', '2', '3']이라는 리스트의 각 원소를 하나씩 빼보면서 그 값을 x에 넣어줍니다. 그러면 루프가 돌면서 처음에는 x에 '1'이 들어가고, 그 다음에는 '2'가 들어가고, 그 다음에는 '3'이 들어갑니다. 루프가 돌면서 처음에는 '1'에 대해 한 번 int('1')이 수행되고, 그 다음에는 int('2')가 수행되고, 그 다음에는 int('3')이 수행되고 이들이 모여서 다시 하나의 리스트가 만들어집니다. 이렇게 해야 오류가 안 생깁니다.

codingchild2   2년 전

오... 그랬던거군요!!!

ㅠㅠㅠㅠ 선생님 너무너무 감사드립니다!!!!! 

많이 배워갑니다 ㅠㅠ 진짜 감사드려요!

댓글을 작성하려면 로그인해야 합니다.