2016-08-29 6 views
-1

Ich würde gerne wissen, ob es eine Möglichkeit gibt, mathematische Symbole in die Funktionsparameter einzufügen.Python Mathematische Zeichen im Funktionsparameter?

def math(x, y, symbol): 
     answer = x 'symbol' y 
     return answer 

Dies ist ein kleines Beispiel, was ich meine.

EDIT: hier ist das ganze Problem

def code_message(str_val, str_val2, symbol1, symbol2): 
    for char in str_val: 

     while char.isalpha() == True: 
      code = int(ord(char)) 
      if code < ord('Z'): 
       code symbol1= key 
       str_val2 += str(chr(code)) 
      elif code > ord('z'): 
       code symbol1= key 
       str_val2 += str(chr(code)) 
      elif code > ord('A'): 
       code symbol2= key 
       str_val2 += str(chr(code)) 
      elif code < ord('a'): 
       code symbol2= key 
       str_val2 += str(chr(code)) 
      break 
     if char.isalpha() == False: 
      str_val2 += char 
    return str_val2 

Ich brauche die Funktion einige Male zu nennen, aber manchmal mit einer +/- zum ersten Symbol und manchmal ein +/- für die zweite Symbol

Originalcode:

def code_message(str_val, str_val2): 
    for char in str_val: 

     while char.isalpha() == True: 
      code = int(ord(char)) 
      if code < ord('Z'): 
       code -= key 
       str_val2 += str(chr(code)) 
      elif code > ord('z'): 
       code -= key 
       str_val2 += str(chr(code)) 
      elif code > ord('A'): 
       code += key 
       str_val2 += str(chr(code)) 
      elif code < ord('a'): 
       code += key 
       str_val2 += str(chr(code)) 
      break 
     if char.isalpha() == False: 
      str_val2 += char 
    return str_val2 
+1

Leider haben Sie ein bisschen mehr –

+0

erarbeiten hast du meine 'answer = x„Symbol“y'? –

Antwort

2

Sie nicht Operator an die Funktion übergeben kann, aber wie Sie in operator Bibliothek definierten Funktionen des Betreibers passieren kann. Daher wird Ihre Funktion wie:

>>> from operator import eq, add, sub 
>>> def magic(left, op, right): 
...  return op(left, right) 
... 

Beispiele:

# To Add 
>>> magic(3, add, 5) 
8 
# To Subtract 
>>> magic(3, sub, 5) 
-2 
# To check equality 
>>> magic(3, eq, 3) 
True 

Hinweis: Ich verwende Funktion als magic statt math weil math Standard-Python-Bibliothek ist, und es ist nicht gut üben Sie, vordefinierte Schlüsselwörter zu verwenden.

+0

danke diese Antwort hat mir sehr geholfen! –

1

die entsprechenden Funktionen verwenden, von operator Modul:

from operator import add 
def math(x, y, add): 
     answer = add(x, y) 
     return answer 

Der einzige Weg, dass Sie ein Mathematik-Zeichen an eine Funktion kann vergeht im String Modus, dann würden Sie zwei Probleme haben, die Bewertung der Zeichen und die Gleichung auch. Wenn Sie also mit Zahlen arbeiten, sollten Sie eine geeignete Funktion verwenden, um die Aufgabe direkt zu erledigen.

Sie können auch ein Wörterbuch verwenden, um die Symbole auf die entsprechende Funktion zur Karte:

from operator import add, sub, mul 
mapping = {"+": add, "-":sub, "*": mul} 
def math(x, y, sym): 
    try: 
     f = mapping[sym] 
    except KeyError: 
     raise Exception("Enter a valid operator") 
    else: 
     answer = f(x, y) 
     return answer 
+2

Und was mit 'add (x, y) = answer' zu tun ist ein Syntaxfehler? –

+0

'Antwort = hinzufügen (x, y)' –

+0

@AnttiHaapala Nur, eine Kopie vergangenen Fehler! – Kasramvd

0

Sie sollten zuerst bedenken, dass Sie verwenden müssen und nicht das Gegenteil.

Dann bezüglich der Verwendung von Symbolen können Sie die Funktion als Parameter senden. Für den Basisoperator können Sie das Modul operator verwenden.

Zum Beispiel:

import operator 

def math(x, y, function): 
     return function(x, y) 

math(4,5, operator.sub) 

Sie werden in der Dokumentation alle anderen Operationen, die Sie benötigen.

0

Ich bin überrascht Noone erwähnt eval(). Schauen Sie sich das Beispiel unten:

def function(operator1, operator2, symbol): 
    return eval(str(operator1) + symbol + str(operator2)) 

print(function(2, 3, '+'))  # prints: 5 
print(function(2, 3, '-'))  # prints: -1 

# Of course you can also "chain" operations, e.g., for 4 + 5 - 6 
result = function(function(4, 5, '+'), 6, '-') 
print(result)     # prints 3 

# Finally, it also works with string input for the operands so you 
# can read them directly from e.g., user input with `input()` 
print(function('2', '3', '+')) # prints: 5 
+0

'eval' ist die Funktion, die niemals für die Verwendung im Programm empfohlen wird. Es wird funktionieren, aber es wird nicht empfohlen. Laut mir können "eval" -Funktionen jederzeit zu Viren werden und Sie werden nicht einmal wissen, was schiefgelaufen ist. –

+0

@MoinuddinQuadri "Mit großer Macht kommt große Verantwortung" wäre mein Kommentar dazu. –

Verwandte Themen