Come posso trasformare una stringa come "+" nell'operatore plus? Grazie!Trasforma la stringa nell'operatore
risposta
Utilizzare una tabella di ricerca:
import operator
ops = { "+": operator.add, "-": operator.sub } # etc.
print ops["+"](1,1) # prints 2
Si può provare a utilizzare eval(), ma è pericoloso se le stringhe non sono venuta da voi. Altrimenti si potrebbe prendere in considerazione la creazione di un dizionario:
ops = {"+": (lambda x,y: x+y), "-": (lambda x,y: x-y)}
ecc ... e quindi chiamando
ops['+'] (1,2)
o, per l'input dell'utente:
if ops.haskey(userop):
val = ops[userop](userx,usery)
else:
pass #something about wrong operator
import operator
def get_operator_fn(op):
return {
'+' : operator.add,
'-' : operator.sub,
'*' : operator.mul,
'/' : operator.div,
'%' : operator.mod,
'^' : operator.xor,
}[op]
def eval_binary_expr(op1, oper, op2):
op1,op2 = int(op1), int(op2)
return get_operator_fn(oper)(op1, op2)
print eval_binary_expr(*("1 + 3".split()))
print eval_binary_expr(*("1 * 3".split()))
print eval_binary_expr(*("1 % 3".split()))
print eval_binary_expr(*("1^3".split()))
In python3, questo dà: '+': operator.add, AttributeError: l'oggetto 'str' non ha attributo 'add' –
Il problema è che l'operatore 'male' il parametro si scontra con il modulo operatore importato. Sto indovinando inline 'get_operator_fn' con' eval_binary_expr'. Cambia il parametro 'operator' in qualcos'altro, come' oper', e tutti i riferimenti ad esso. Vedi la mia modifica. – PaulMcG
Per Python3, dovrai anche modificare 'operator.div' in' operator.truediv' e correggere tutte le istruzioni di stampa. – PaulMcG
A mio parere, la soluzione proposta da Amnon è quello giusto
Tuttavia, potrebbe anche essere interessati da questo articolo su un parser matematica: http://effbot.org/zone/simple-top-down-parsing.htm
Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il link per riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - [Dalla recensione] (/ recensione/post di bassa qualità/18628184) – xgord
Questo appartiene alla sezione commenti in quanto non è una risposta diretta. – Pablo
V'è un metodo magico corrispondente a ciascun operatore
OPERATORS = {'+': 'add', '-': 'sub', '*': 'mul', '/': 'div'}
def apply_operator(a, op, b):
method = '__%s__' % OPERATORS[op]
return getattr(b, method)(a)
apply_operator(1, '+', 2)
funziona bene, grazie per la condivisione. per la convalida possiamo estendere apply_operator. se op == '/' e b == 0: \t ritorno np.inf se op == '/' e un == 0: \t return 0 – iratzhash
Questo non lascia [NotImplemented] (https: //docs.python.org/3/library/constants.html#NotImplemented) funzionano correttamente. – wim
- 1. Trasforma la stringa "AABSSSD" in "2AB3SD"
- 2. Trasforma stringa unicode in python
- 3. Trasforma array di caratteri in stringa
- 4. Trasforma una stringa NSAattribuita in testo semplice
- 5. Trasforma una stringa in un'espressione matematica?
- 6. Trasforma Javascript Array nella stringa delimitata
- 7. Trasforma un gruppo di articoli in una stringa delimitata
- 8. Trasforma una stringa di input dell'utente in maiuscolo Java
- 9. CABasicAnimazione - Trasforma la scala in centro
- 10. D3 trasforma la scala e traduci
- 11. Jerky CSS trasforma la transizione in Chrome
- 12. Come si trasforma una macro in una stringa usando cpp?
- 13. Trasforma una traccia dello stack in una stringa?
- 14. richiesta Node.js trasforma dieresi a
- 15. Trasforma file in F #
- 16. trasforma multipli utilizzando Compass
- 17. Trasforma stringa di ricerca in stringa di ricerca compatibile con FullText?
- 18. Trasforma un controllo trasparente
- 19. CSS3 trasforma e transizioni (Webkit)
- 20. CSS non trasforma lavorando IE
- 21. Trasforma: prima o: dopo l'articolo
- 22. Polar-trasforma l'immagine in R
- 23. PHP: trasforma la tabella HTML in foglio di calcolo?
- 24. Trasforma la rotazione non funziona correttamente in chrome
- 25. Trasforma la funzione spline 2d f (t) in f (x)
- 26. La prospettiva in modalità Mode7 si trasforma in tela?
- 27. Trasforma l'immagine in testo - Java
- 28. R trasforma nnls in lm
- 29. L'ordine applicazione di SVG trasforma
- 30. BestPractice - Trasforma il primo carattere di una stringa in lettere minuscole
invece è possibile convertire le altre cose a stringa e valutare http : //stackoverflow.com/questions/729248/python-eval-and-globals – Xinus