2017-03-29 2 views
0

이미 정의한 다른 함수를 사용하는 함수를 작성하고 있습니다. 첫 번째 완성 기능은 목록 안에 위치 (튜플)에서 나에게 값을 알려줍니다, get_value_at_location입니다 여기 파이썬 - 함수 호출에서 연산을 수행하는 방법은 무엇입니까?

그 기능에 대한 코드입니다 (퍼즐.) : 이제

def get_value_at_location(puzzle,loc): 
    val_loc= puzzle[loc[0]][loc[1]] 
    return val_loc 

내가 노력하고 있어요 op_valid_solution이라는 함수를 빌드한다. op_valid_solution은 put (주어진리스트,) op (예상되는 연산 : 예 : + - *), expected total (우리가 원하는 결과) 및 locations (튜플)을 받아 들여 연산이 예상 결과를 얻은 다음 True 또는 False를 반환합니다.

def is_valid_solution(puzzle, op, expected_total, locations): 
    loc=location 
    if (get_value_at_location(puzzle,loc)) +(op) ==expected_total: 
     return True 
    else: 
     return False 

예를 입력/출력 :

([[1]], '+'를 다음

는 내가 생각하고 무엇을 볼 수 있도록 내가있어 코드입니다 , [(0,0)]) → True

([[1,2], [2,1]], '-', 1, [(0,0), (1,0) ]) → True

([[1,2], [2,1]], '+', 4, [(0,0), (0,1)]) → 거짓

분명히 이것이 맞습니다. 내가하고 싶은 것을하는 방법을 알지 못합니다. 어떻게 구현할 수 있습니까?

답변

1

는 옵션 대신 문자열로 "+" 또는 "*"를 사용하려고 시도의

operator 모듈을 사용합니다. 그 문자열 이름으로 작업을 선택

def apply(a, b, op): 
    return op(a, b) 

apply(2, 3, operator.add) # 5 

옵션 B

사용 if :

를 그런 다음 함수에서 호출합니다 op 매개 변수로 operator.add를 전달할 수 있습니다

> import operator 
> operator.add(2, 3) 
5 
> operator.mul(2, 3) 
6 

def apply(a, b, op): 
    if op == '+': 
     return a + b 
    if op == '*': 
     return a * b 

apply(2, 3, '*') # 6 
관련 문제