티스토리 뷰

[사칙연산]



- 두 숫자와 1개 연산자를 입력 받으면 계산의 결과를 리턴하는 함수를 작성한다.


- 길이 3의 리스트 cmd 를 매개변수로 받는다.


- 리스트의 요소는 모두 문자열이고, cmd[0], cmd[2]  숫자로 된 문자열로 되어있고, cmd[1] 는 연산자다.






예시)


입력> ["1", "+", "2"]

결과 > 3


입력> ["1", "-", "2"]

결과 > -1


입력> ["1", "*", "2"]

결과 > 2


입력> ["1", "/", "2"]

결과 > 0.5









추가로 0 으로 나눌때 경우, 예외처리와 계산 타이밍을 고민해 부자.





















lambda

def operator1(ns: list, ops="+-*/")->str:
ns[0], ns[2] = float(ns[0]), float(ns[2])
fs = (lambda: ns[0] + ns[2],
lambda: ns[0] - ns[2],
lambda: ns[0] * ns[2],
lambda: ns[0] / ns[2])
return str(fs[ops.index(ns[1])]())



generator

def operator2(ns: list, ops="+-*/")->str:
ns[0], ns[2] = float(ns[0]), float(ns[2])
gs = ((ns[0]+ns[2] for _ in range(1)),
(ns[0]-ns[2] for _ in range(1)),
(ns[0]*ns[2] for _ in range(1)),
(ns[0]/ns[2] for _ in range(1)))
return str(next(gs[ops.index(ns[1])]))



dictionary + lambda

def operator3(ns: list)->str:
ns[0], ns[2] = float(ns[0]), float(ns[2])
func = {"+": lambda: ns[0] + ns[2],
"-": lambda: ns[0] - ns[2],
"*": lambda: ns[0] * ns[2],
"/": lambda: ns[0] / ns[2]}[ns[1]]
return str(func())






댓글