Die Eingabe der floats, integers, oder Gleichungen in raw_input eine variable definieren
Ich geschrieben habe, das Programm so zu lösen von zwei Gleichungen basierend auf Werten, die vom Benutzer definiert. Die Konstanten kx und ky, den ich definiert habe als Schwimmer. Für den range - Variablen start - und Ende- ich möchte den Benutzer eine Zahl eingeben, oder so etwas wie 6 * np.pi (6Pi). So wie es jetzt ist, bekomme ich die folgende Fehlermeldung. Wie kann ich diese variable definieren, damit Benutzer die Eingabe mehrerer Arten von Eingängen? Danke!
Traceback (most recent call last):
File "lab1_2.py", line 11, in <module>
x = np.linspace(start, end, 256, endpoint=True)
File "/Library/Frameworks/Python.framework/Versions/7.3/lib/python2.7/site- packages/numpy/core/function_base.py", line 80, in linspace
step = (stop-start)/float((num-1))
TypeError: unsupported operand type(s) for -: 'str' and 'float'
Hier der code:
from pylab import *
import numpy as np
kx = float(raw_input("kx: "))
ky = float(raw_input("ky: "))
print "Define the range of the output:"
start = float(raw_input("From: "))
end = float((raw_input("To: "))
x = np.linspace(start, end, 256, endpoint=True)
y = np.linspace(start, end, 256, endpoint=True)
dz_dx = ((1 / 2.0) * kx * np.exp((-kx * x) / 2)) * ((2 * np.cos(kx *x)) - (np.sin(kx * x)))
dz_dy = ((1 / 2.0) * ky * np.exp((-ky * y) / 2)) * ((2 * np.cos(ky *y)) - (np.sin(ky * y)))
plot(x, dz_dx, linewidth = 1.0)
plot(y, dz_dy, linewidth = 1.0)
grid(True)
show()
InformationsquelleAutor Jonathan Fry | 2013-01-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie entweder analysiert die Zeichenfolge selbst (die
ast
Modul wäre wohl nützlich sein), oder verwenden Sieeval
:Beachten Sie, dass es gibt einige böse Dinge, die Nutzer tun können, mit
eval
. Meine Lösung schützt Sie vor die meisten von Ihnen, aber nicht alle -- pre-überprüfen Sie die Zeichenfolge, um sicherzustellen, dass es keine__
wird es noch sicherer (das beseitigt alle Schwachstellen, die ich kenne, aber es könnte andere)InformationsquelleAutor mgilson
Um dies zu implementieren, müssen Sie zwei Dinge tun :
Prüfen Sie zunächst,ob Ihre Eingabe ein int oder float
Dies ist einfach. Sie können dies überprüfen, indem Sie mehrere
isinstance
überprüftWenn nicht, dann müssen Sie ausführen, die Eingabe als ein Befehl und speichern Sie die Ausgabe in eine variable
Sobald Sie sicher sind, es ist ein Befehl, dann können Sie die
exec
odereval
Befehl zum ausführen der Eingabe und speichern Sie die Ausgabe in eine variable.Beispiel :
exec("""v = 6*2""")
oderv = eval("6*2")
beide weisen 12 bisv
InformationsquelleAutor asheeshr
Ich bin mit Python 2.7 und Ecplise Arbeitsbereich.
Dieser source-code ist in Ordnung für mich, mit raw_input.
Hier, Eingang :
name : "Sir! Guido von Rossum" und
radius : 1.1
Ausgabe :
Dachte, vielleicht hilft es dir oder jemand anderem.
Dank
InformationsquelleAutor akD