2012-08-07 11 views
16

Ciao, sto cercando di inserire un operatore matematico variabile in un if, un esempio di quello che sto cercando di realizzare: -pitone if con operatore matematico variabile

maths_operator = "==" 

if "test" maths_operator "test": 
     print "match found" 

maths_operator = "!=" 

if "test" maths_operator "test": 
     print "match found" 
else: 
     print "match not found" 

ovviamente la precedente procedura non funziona con SyntaxError: invalid syntax. Ho provato ad usare exec ed eval ma non funziona in una dichiarazione if, quali opzioni devo aggirare?

risposta

18

Utilizzare il pacchetto operatore insieme con un dizionario per cercare gli operatori in base ai loro equivalenti testuali. Tutti questi devono essere operatori unari o binari per lavorare in modo coerente.

import operator 
ops = {'==' : operator.eq, 
     '!=' : operator.ne, 
     '<=' : operator.le, 
     '>=' : operator.ge, 
     '>' : operator.gt, 
     '<' : operator.lt} 

maths_operator = "==" 

if ops[maths_operator]("test", "test"): 
    print "match found" 

maths_operator = "!=" 

if ops[maths_operator]("test", "test"): 
    print "match found" 
else: 
    print "match not found" 
+1

perfetto !, grazie Nathan anche un buon esempio – Paul

16

utilizzare il modulo operator:

import operator 
op = operator.eq 

if op("test", "test"): 
    print "match found" 
+1

grazie per la risposta Marco, il DEF modulo operator è il modo per ottenere intorno a questo. – Paul

1

Ho provato con exec ed eval ma nessuno dei due lavori in un'istruzione if

Per ragioni di completezza si segnala che fanno il lavoro, anche se le risposte postato forniscono una soluzione migliore. Dovrete eval() l'intero confronto, non solo l'operatore:

maths_operator = "==" 

if eval('"test"' + maths_operator '"test"'): 
     print "match found" 

o exec la linea:

exec 'if "test"' + maths_operator + '"test": print "match found"' 
Problemi correlati