Windows · Python 3.12.4. 본문의 첫 예제를 실행하여 표준 출력과 예상 결과가 일치함을 확인했습니다. 연습문제의 모든 입력을 검증한 것은 아닙니다.
이 글의 순서 5개 단락
계산기가 반복해서 입력을 받으면 입력 처리와 사칙연산 코드가 한곳에 모입니다. 계산 부분을 함수로 분리하면 입력받은 값을 함수에 전달하고, 돌려받은 결과를 출력하는 순서가 더 분명해집니다. 이번 예제는 Python 3.12를 사용합니다.
함수를 만들고 결과를 돌려주기
함수는 이름을 붙여 묶은 코드입니다. def calculate(first, operator, second):에서 first, operator, second는 함수가 전달받을 값을 가리키는 매개변수입니다. 함수를 호출할 때는 같은 순서로 두 수와 연산자를 전달합니다.
return은 함수를 끝내고 호출한 곳에 값을 돌려줍니다. 이 예제에서 계산에 성공하면 숫자를, 지원하지 않는 연산자나 0으로 나누는 경우에는 값이 없음을 나타내는 None을 돌려줍니다. 자세한 함수 문법은 Python 3.12 공식 문서의 함수 정의를 참고하세요.
계산기를 함수로 나누기
다음 프로그램은 연산자에 q를 입력할 때까지 계산을 반복합니다. 숫자 변환에 실패하면 안내하고 처음부터 다시 입력받습니다.
def calculate(first, operator, second):
if operator == "+":
return first + second
elif operator == "-":
return first - second
elif operator == "*":
return first * second
elif operator == "/":
if second == 0:
return None
return first / second
return None
while True:
print("연산자 (+, -, *, /) 또는 q:")
operator = input()
if operator == "q":
print("계산기를 종료합니다.")
break
try:
print("첫 번째 수:")
first = float(input())
print("두 번째 수:")
second = float(input())
except ValueError:
print("숫자를 입력해 주세요.")
continue
result = calculate(first, operator, second)
if result is None:
print("지원하지 않는 연산자이거나 0으로 나눌 수 없습니다.")
else:
print("결과:", result)

예를 들어 아래 입력은 덧셈을 한 번 수행하고, 0으로 나누기를 시도한 뒤 종료합니다. 각 줄을 입력한 후 Enter를 누릅니다.
+
8
2
/
5
0
q
입력 안내와 예상 출력은 다음과 같습니다. 직접 입력한 값은 아래 출력에 포함하지 않았습니다.
연산자 (+, -, *, /) 또는 q:
첫 번째 수:
두 번째 수:
결과: 10.0
연산자 (+, -, *, /) 또는 q:
첫 번째 수:
두 번째 수:
지원하지 않는 연산자이거나 0으로 나눌 수 없습니다.
연산자 (+, -, *, /) 또는 q:
계산기를 종료합니다.
반환값이 출력으로 이어지는 과정
첫 계산에서 float()는 입력한 8과 2를 각각 실수 8.0과 2.0으로 바꿉니다. calculate(first, operator, second)를 호출하면 함수의 매개변수에 이 값들과 +가 전달됩니다. 덧셈 분기의 return이 10.0을 돌려주고, 호출한 곳의 result에 저장됩니다. 그 후 print()가 결과를 표시합니다.
두 번째 계산에서는 나눗셈을 수행하기 전에 second == 0을 검사합니다. 조건이 참이므로 함수가 None을 반환하고 나눗셈은 실행되지 않습니다. 반복문은 result is None으로 오류를 확인해 안내를 출력합니다. 함수 안의 return은 반복문 전체를 끝내지 않으므로 다음 입력을 받을 수 있습니다.
실수와 경계 조건
return대신 함수 안에서 결과만 출력하면 호출한 곳에서 그 계산 결과를result로 사용할 수 없습니다. 값을 전달할 때는return을 사용합니다.if not result로 오류를 판별하면 정상적인 계산 결과0.0도 오류로 취급됩니다. 이 예제처럼result is None으로 확인하세요.- 지원하지 않는 연산자를 넣어도 두 수를 먼저 입력받은 뒤 오류를 안내합니다.
q는 숫자를 입력받기 전에 확인하므로 바로 종료합니다. float()로 바꿀 수 없는 입력은ValueError로 처리합니다.float()는nan과inf같은 특수한 실수 표기도 받아들이므로, 일반적인 유한한 숫자만 허용하려면 별도 검사가 필요합니다. 이 예제에서는 그 검사를 추가하지 않습니다. Python 3.12의 float 설명을 참고하세요.- 오류 두 가지가 모두
None을 반환하므로 현재 안내문은 원인을 구분하지 않습니다.
연습: 결과가 0인 계산
연산자로 -, 첫 번째 수로 7, 두 번째 수로 7을 입력하면 어떤 결과가 표시될까요? 오류 판별 조건도 함께 생각해 보세요.
풀이: 함수는 7.0 - 7.0의 결과인 0.0을 반환합니다. 0.0은 None이 아니므로 else가 실행되어 결과: 0.0이 표시됩니다.
CHECK THE SOURCE
참고한 공식 문서
기능 설명은 위 문서를 참고했으며, 예제의 입력·결과와 한계는 본문에 따로 기록했습니다.