2016-04-09 8 views
-3

Dies ist der Code, den ich im Moment haben:raw_input() und mathematische Gleichungen mit boolean

print "What equation would you like" 
a = raw_input() 
print "What's", a 
b = input() 
print a == b 

Ich möchte einen Benutzer aufzufordern, 3+4 eine Mathegleichung, zum Beispiel eingeben.

Ich habe versucht, dies zu konvertieren Python 3 mit Hilfe von Eingabe(), aber, da input() tatsächlich die Gleichung lösen würde, würde die nächste Zeile darunter die Antwort auf die Gleichung wie folgt drucken: What's 7.

Da die Idee versucht, die Gleichung für variable a, die gesamte Idee des Codes inputed zu lösen, ist bedeutungslos, da sie buchstäblich 7 in geben könnte und die nächste Zeile True weil 7 == 7 drucken würde.

Gibt es eine Möglichkeit, dass ich eine Gleichung wie 3+4 eingeben und tatsächlich What's 3+4 ausgeben kann, ohne dass Python mir sagt, dass das Endergebnis False ist?

Oh und in Bezug auf: Math operations from string, habe ich tatsächlich diesen Beitrag vor dem Posten dieser Frage und was es sah im Grunde ist Python, um eine Antwort auf eine Gleichung auszugeben, die ganz gegen das, was ich versucht zu erreichen ging. Stattdessen wollte ich Python nur sagen, ob die Antwort, die ich eingegeben hatte, richtig oder falsch war, also richtig und falsch.

In Bezug auf meinen vorherigen Beitrag, war es einfach nur darum, eine Gleichung zu beantworten, die ich manuell in das Skript einfügte. Da ich jedoch einen Benutzer bitten möchte, eine mathematische Gleichung in das neue Skript einzugeben, würde die zuvor verwendete Methode nicht funktionieren.

Ich habe auch versucht ast.literal_eval(), aber ich habe diesen Fehler ...

Traceback (most recent call last): 
File "/tmp/KANTL/Math.py", line 7, in <module> 
print literal_eval(a) == literal_eval(b) 
File "/usr/lib/python2.7/ast.py", line 80, in literal_eval 
return _convert(node_or_string) 
File "/usr/lib/python2.7/ast.py", line 79, in _convert 
raise ValueError('malformed string') 
ValueError: malformed string 
+1

Haben Sie versucht, 'raw_input()' für 'a' zu verwenden? – TigerhawkT3

+0

Als Reaktion auf Tigerhawk - Ja, es sagt mir immer noch False für 'Drucken a == b' –

+0

Erwarten Sie, um zwei Ausdrücke zu erhalten, zeigen sie so an, wie sie sind, und dann auswerten und vergleichen für die Gleichheit? – TigerhawkT3

Antwort

-1

Haben Sie versucht mit eval?

print "What equation would you like" 
a = raw_input() 
print "What's", a 
b = raw_input() 
print eval(a) == eval(b) 

Da die Menschen eval betrachten, böse zu sein (sollte kein Problem in Ihrem Fall sein wird), ist die Alternative ast.literal_eval:

import ast.literal_eval as eval 

es dann wie in dem obigen Beispiel verwenden

+0

'eval' ist in diesem Zusammenhang eine sehr gefährliche Aussage. 'ast.literal_eval' wäre eine klügere Wahl. – Selcuk

+0

@Selcuk: Ich denke, für die Situation des OP ist es sicher, 'eval' hier zu verwenden. – 3442

+0

@KemyLand Eigentlich ist das genau der Fall, in dem Sie 'eval' nicht verwenden sollten. – Selcuk

-1

Mit raw_input() für a und input() für b ist wahrscheinlich, was Sie gehen.

Testing dies in der Python-Interpreter gibt die erwartete Ausgabe:

>>> a = raw_input() 
3+4 
>>> a 
'3+4' 
>>> b = input() 
7 
>>> type(b) 
<type 'int'> 
>>> eval(a) 
7 

So sollten Sie in der Lage sein, so etwas zu tun:

>>> eval(a) == b 
true 

EDIT:

Nach der Lektüre Antworten anderer Benutzer, es scheint, die Verwendung von eval() wird im Allgemeinen wegen seiner potenziellen Gefahr entmutigt rs. Obwohl Sie für einfache Testzwecke in Ordnung sein sollten (wenn Sie beabsichtigen, dieses Programm zu verbreiten oder es aus dem Internet zugänglich machen, sollten Sie absolut nicht verwenden eval()). Ihr Code würde wie folgt aussehen:

print "What equation would you like" 
a = raw_input() 
print "What's", a 
b = input() 
print eval(a) == b 

Welche True mit einer richtigen Lösung und False mit einer falschen Lösung ergeben sollte.

+0

Tippen Sie diese Antwort zur gleichen Zeit ein. Entspannen Sie sich mit den Down-Stimmen. –

+0

OP Ich habe meine Antwort auf Ihre Kommentare aktualisiert ...... die jetzt scheinen weg zu sein. Ich denke, dass diese Frage mehr als ausreichend beantwortet wurde, also bin ich raus. –

0

In Python 2 ist ein Ausdruck des Formulars ...

input(prompt) 

entspricht

eval(raw_input(prompt)) 

raw_input() Die integrierte Funktion liest eine Zeile von sys.stdin und gibt sie, gegebenenfalls mit einer Aufforderung, wenn als Argument gegeben. Die eingebaute Funktion eval() erledigt einen ziemlich komplexen Job, aber für unsere Zwecke benötigt sie nur einen String und wertet sie als Python-Ausdruck aus.

Also, Sie können tun wollen ...

print "What equation would you like" 
a = raw_input() 
print "What's", a 
b = raw_input() 
print eval(a) == eval(b) 

If your input can't be trusted, dann versuchen Sie stattdessen ...

from ast import literal_eval 

Und literal_eval() verwenden, wo Sie normalerweise eval() verwenden würden. The explanation ist, dass eval() kann ziemlich schlimme Dinge tun, wenn ein Angreifer von seiner Verwendung erfährt. Ernst. Lesen Sie den Link für Details. literal_eval() bietet Schutz gegen diese Art von Sicherheitslücken.

Verwandte Themen