2017-03-29 8 views
0

Ich baue eine Funktion, die eine andere Funktion verwendet, die ich bereits definiert habe. Die erste fertiggestellte Funktion ist get_value_at_location, die mir den Wert an der Stelle erzählt (ein Tupel,) in einer ListePython: Wie führe ich einen Funktionsaufruf aus?

Hier ist der Code für diese Funktion ist (Puzzle.):

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

Jetzt versuche ich, um eine Funktion mit dem Namen is_valid_solution zu erstellen, die die Parameter puzzle (gegebene Liste), op (zu bearbeitende Operation ex: + - *,) erwartete Summe (Ergebnis wollen wir) und Orte (Tupel) akzeptiert, um festzustellen, ob die Operation das Ergebnis liefert erwartetes Ergebnis und gibt dann True oder False zurück.

Hier ist der Code, den ich habe, so können Sie sehen, was ich denke:

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 

Beispiel Eingabe/Ausgabe:

([[1]], '+' , 1, [(0,0)]) → Wahr

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

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

Offensichtlich ist dies in Ordnung, ich weiß nur nicht die Methode zu tun, was ich tun möchte? Wie kann ich das umsetzen?

Antwort

1

Option A

Statt "+" oder "*" als Strings zu versuchen, zu verwenden, verwenden, um die operator Modul.

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

Sie operator.add als op Parameter übergeben kann, dann in Ihrer Funktion aufrufen:

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

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

Option B

Verwenden if den Betrieb durch seine String Namen wählen:

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

apply(2, 3, '*') # 6 
Verwandte Themen