본문 바로가기

코드업 문제집 파이썬 if~else 1231 : 계산기 1

관리하수달 2026. 9. 7.

[문제]

10+10, 10-3, 5*4, 10/3과 같이 하나의 계산식이 입력된다.

연산자에 맞게 계산한 결과를 출력한다.

나눗셈의 경우에만 소수 둘째 자리까지 출력한다.

[문제 해설(핵심)]

입력값은 숫자와 연산자가 따로 들어오는 것이 아니라

10+20

처럼 하나의 문자열로 입력된다.

따라서 문자열을 한 글자씩 확인하면서 +, -, *, / 중 어떤 연산자가 들어있는지 찾는다.

연산자의 위치를 찾았다면 그 위치를 기준으로 앞과 뒤를 잘라 숫자로 변환하면 된다.

10 + 20
↑    ↑
a    b

[문제 풀이 1 - for문 + 문자열 슬라이싱]

문자열을 한 글자씩 확인해 연산자의 위치를 찾는다.

연산자를 기준으로 앞부분과 뒷부분을 자른다.

a = int(form[:i])
b = int(form[i + 1:])

연산자가 무엇인지 if문으로 확인하고 계산한다.

[사용된 개념 설명]

len() : 문자열의 길이를 구한다.

len(form)

form[i] : 문자열에서 i번째 문자를 가져온다.

예를 들어

form = "10+20"

이라면

form[0] → '1'
form[1] → '0'
form[2] → '+'

가 된다.

문자열 슬라이싱

문자열의 원하는 부분을 잘라낼 수 있다.

form[:i]

처음부터 i 바로 앞까지 가져온다.

form[i + 1:]

i 다음 위치부터 끝까지 가져온다.

예를 들어 10+20에서 +의 위치가 2라면

form[:2]      # "10"
form[3:]      # "20"

이 된다.

in : 특정 값이 안에 포함되어 있는지 확인한다.

if form[i] in "+-*/":

현재 문자가 +, -, *, / 중 하나인지 확인한다.

[코드]

form = input()

for i in range(1, len(form)):
    if form[i] in "+-*/":
        op = form[i]
        a = int(form[:i])
        b = int(form[i + 1:])
        break

if op == "+":
    print(a + b)

elif op == "-":
    print(a - b)

elif op == "*":
    print(a * b)

else:
    print("%.2f" % (a / b))

[문제 풀이 2 - in + split 사용]

파이썬의 split()을 사용하면 연산자를 기준으로 문자열을 바로 나눌 수도 있다.

"10+20".split("+")

['10', '20']

각 연산자가 문자열 안에 있는지 in으로 확인한 뒤 split()으로 숫자를 나누는 방법이다.

[코드]

form = input()

if "+" in form:
    a, b = form.split("+")
    print(int(a) + int(b))

elif "-" in form:
    a, b = form.split("-")
    print(int(a) - int(b))

elif "*" in form:
    a, b = form.split("*")
    print(int(a) * int(b))

elif "/" in form:
    a, b = form.split("/")
    print("%.2f" % (int(a) / int(b)))

[두 풀이 비교]

for문 + 슬라이싱은 연산자의 위치를 직접 찾고 문자열을 자르는 방식이라 문자열 인덱싱을 연습하기 좋다.

in + split()은 파이썬답게 더 짧고 간단하게 작성할 수 있다.

이 문제에서는 문자열을 다루는 방법을 연습한다면 첫 번째 풀이, 간단하게 푼다면 두 번째 풀이를 사용하면 된다.

댓글