-
카테고리
-
세부 분야
프로그래밍 언어
-
해결 여부
미해결
unsupported operand type(s) for +: 'int' and 'str' 질문드립니다...
20.11.13 15:25 작성 조회수 9.45k
1
user_input = input("계산식을 입력하세요")
op_list = ["+","-","*","/","="]
div_list = []
if user_input[-1] not in op_list:
user_input += "="
lop =0
for i,s in enumerate(user_input):
if s in op_list:
div_list.append(user_input[lop:i])
div_list.append(s)
lop = i+1
div_list = div_list[:-1]
pos = 0
while True:
if len(div_list) == 1:
break
else:
if div_list[pos] in op_list:
q = div_list[pos-1]+div_list[pos]+div_list[pos+1]
del div_list[0:3]
div_list.insert(0,eval(q))
pos = 0
pos += 1
print(div_list)
강의를 듣고 혼자 연습하고 있는데
q = div_list[pos-1]+div_list[pos]+div_list[pos+1]
라는 부분에서
unsupported operand type(s) for +: 'int' and 'str'
라고 에러가 뜨는데 div안의 요소들은 전부 오퍼레이터 혹은
input명령어로 받은 str이라고 생각했는데 어디서 잘못된
걸까요?
답변을 작성해보세요.
1
남박사
지식공유자2020.11.14
일단 에러의 내용은 int 형을 str 형과 + 연산자로 더할 수 없다는 내용인데 입력받은 값 자체에서 문제가 생기는건지 아니면 문자열 슬라이싱하면서 자동 캐스팅이 되는지 부터 확인해봐야할듯 합니다.
제일 쉬운방법으로는 각 요소를 str로 강제 캐스팅해서 사용할수도 있습니다만 위에 얘기한것처럼 어떤 구간에서 발생하는지 좀 더 명확하게 집고 넘어가시는걸 추천합니다.
print(type(div_list[pos-1]))
print(type(div_list[pos]))
print(type(div_list[pos+1]))
일단 위처럼 문제가 되는 구간에 디버깅을 위해 요소를 print로 출력 해볼수 있습니다.
그러면 위처럼 출력이 될텐데 str 이 3번 반복되고 그 다음에 int로 변화되는걸 볼 수 있습니다. 그리고 오류가 발생하게 되죠.
div_list.insert(0,eval(q))
아마 이 구간에서 eval 함수에 의해 str 이 int로 변환되는걸로 보입니다.
div_list.insert(0,str(eval(q)))
위처럼 eval 결과를 str로 캐스팅하면 문제없이 동작하는거 같습니다.
0
답변 2