Fehler in python: ein Schwimmer ist erforderlich
Ich bin neu hier, und ich bin immer verwendet, um die Programmierung mit Python. Ich habe die Suche durch das web nach nützlichen Antworten, aber es war unmöglich, eine Lösung zu finden für mein problem.
Hier geht es:
radiation=1.3888
n=17
LAT=51.05
def dec(n):
if 0<n<365:
dec=23.45*math.sin(math.radians(360*(284+n)/365))
print(dec)
else:
print('the day',n,'is not valid')
def wss(LAT,dec):
wss=math.degrees(math.acos(((math.tan(math.radians(LAT)))*math.tan(math.radians(dec)))))
print(wss)
--- Wenn ich diesen code ausführen, dies ist, was ich erhalten:
>>> dec(n)
-20.91696257447642
>>> wss(LAT,dec)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:/Users/Gerard/Dropbox/Master Thesis Gerard Pujol/Master Thesis Work/work hourly radiation OK.py", line 25, in wss
wss=math.degrees(math.acos(-((math.tan(math.radians(LAT)))*math.tan(math.radians(dec)))))
TypeError: a float is required
Ich weiß nicht, warum die Python gibt mir diese Art von Fehler: "ein Schwimmer ist erforderlich".
Ich habe versucht, eine Menge von änderungen, aber nutzlos gewesen. Ich hoffe, jemand hat eine Lösung für mein problem. Ich danke Ihnen sehr!
- fixieren Sie die Formatierung des Codes
- (Ich habe den code in code-Blöcke, aber es ist auch falsch eingerückt)
- Es sieht aus wie Sie sind gefordert
math.radians(dec)
;dec
ist eine Funktion, kein Wert; vielleicht haben Sie gedacht, zu nennendec(something)
? - eine weitere mögliche Verbesserung: 360*(284+n)/365 thats int-division, sollten Sie dividieren durch 365.0 oder so, denn sonst werden Sie am Ende mit Mühe (obwohl ich denke, dass in 3.x sollte es funktionieren, aber ich gehe davon aus, dass Sie 2.x)
- dieses Problem beheben
def wss(LAT,dec(n)):
- hast du eigentlich versucht, Ihren Vorschlag ? Ich denke nicht...
- desthuilliers ich verpasst, dass dec(n) hat keinen Rückgabewert, ich denke, das ist auch das problem, aber die fix ich geschrieben habe, ist auch nötig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die variable
dec
ist sowohl als name einer Funktion und einer Variablen. Python ist zu sehen, dass es da eine Funktion Namen in der Fehlermeldung.Zunächst die Formatierung ist furchtbar. Erfahren Sie, wie der code Aussehen soll - es erspart Ihnen eine Menge Zeit später, besonders beim Debuggen.
Zweitens,wenn Sie ausführen:
wss(LAT,dec)
Passieren Sie 2 Argumente an die Funktion 'wss', erste ist der LAT = 51.05, aber Sie haben nie definiert ein argument namens 'dec' - Sie definiert haben, eine solche Funktion.
Was Sie tun möchten, ist so etwas wie dieses:
Denken Sie an die Pflege der möglichen Ausnahmen. Und Lesen Sie ein wenig über guten Programmierstil...
dec
innerhalb derdec()
- Funktion, und warum haben()
s auf einer derreturn
s aber die anderen nicht?Was Sie tun möchten, ist so etwas wie
dann rufen Sie
dec
hier ist eine Funktion, so dass Sie nicht übergeben es als argument. Dadec
ist wieder ein float, ich denke, das ist, was Sie tatsächlich abrufen möchten.dec()
ist-nicht wieder einen Schwimmer, ist es die RückkehrNone
.Müssen Sie zunächst wirklich etwas zurückgeben von der
dec()
Funktion - weder die Zuordnung zu einer lokalen Namen noch Druck auf stdout nicht tun:Nun können Sie diesen Wert verwenden, entweder durch eine temporäre variable:
Oder einfach überspringen die temporäre variable:
NB : wenn Sie mit Python 3.x ersetzen Sie
print <something>
mitprint(<something>)
Dann tun:
Dies funktionieren wird. Zu wissen, warum dein code nicht funktioniert, Lesen Sie weiter.
Was Sie tun mit
def wss(LAT,dec)
ist, dass Sie bei der Definition einer Funktion übergibt zwei Argumente LAT und Dez. Jedoch, wenn Sie tatsächlich die Funktion aufrufen (z.B.>>>wss(LAT,dec)
) haben Sie nicht, stellen Sie einen beliebigen Wert fürdec
. Sie haben einen Wert indec(n)
aber Sie haben nicht zugewiesen es nichts. Vergleichen Sie dies mit der variableLAT
zu dem Sie einen Wert zugewiesen. (Denken Sie daranLAT=51.05
?)