인프런 커뮤니티 질문&답변

아맛나님의 프로필 이미지

작성한 질문수

남박사의 파이썬 기초부터 실전 100% 활용

콘솔 스마트 계산기 만들기 스마트 (파이썬기초, 계산기 로직, 리스트, 반복문)

unsupported operand type(s) for +: 'int' and 'str' 질문드립니다...

20.11.13 15:25 작성

·

11K

1

user_input = input("계산식을 입력하세요")

op_list = ["+","-","*","/","="]

div_list = []

if user_input[-1not 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이라고 생각했는데 어디서 잘못된
걸까요?

답변 2

1

남박사님의 프로필 이미지
남박사
지식공유자

2020. 11. 14. 13:46

일단 에러의 내용은 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

아맛나님의 프로필 이미지
아맛나
질문자

2020. 11. 16. 18:08

아 이럴떄 type함수가 있다는걸 깜빡했습니다. 감사합니다.