def addNum(num1, num2):
return num1 + num2
def subNum(num1, num2):
return num1 - num2
def mulNum(num1, num2):
return num1 * num2
def divNum(num1, num2):
return num1 / num2
operators = [(addNum, '+'), (subNum, '-'), (mulNum, '*'), (divNum, '/')]
while True:
selectCal = int(input('1. 덧셈, 2. 뺄셈, 3. 곱셈, 4. 나눗셈, 5. 종료 :'))
if selectCal < 1 or selectCal > 5:
print('유효한 숫자를 입력하세요')
continue
elif selectCal == 5:
print('Bye~')
break
else:
num1 = float(input('첫 번째 숫자 입력: '))
num2 = float(input('두 번째 숫자 입력: '))
print(f'{num1} {operators[selectCal-1][1]} {num2} = {operators[selectCal-1][0](num1, num2)}')
조건문을 5개나 분기하기가 싫어서 위와 같이 풀이해봤다. 풀 때는 '이렇게도 됐었던 것 같은데..' 하면서 약간 흐릿한 기억으로 풀었어서 관련 내용을 다시 찾아봤고, 일급객체에 대한 내용을 이해하면 될 것 같다.
일급객체(first-class object)란 다음 조건들을 만족하는 객체를 의미함. 파이썬에서 함수 역시 일급객체의 한 종류
위 풀이에 보면 operators라는 리스트 안에 4개의 튜플이 있고 그 안에 각각 0번 인덱스의 원소로 각 연산의 함수가 들어가있음. 이렇게 데이터 구조에 들어갈 수 있음
변수에 들어갈 수 있다는 건 아래와 같이 함수를 변수에 할당할 수 있다는 의미
def sayHello():
print("Hi!")
say_hi = sayHello
say_hi() # Hi!