bevor ich mich mit meinem Problem an euch wende, möchte ich mich kurz vorstellen.
Ich bin ein Anfänger mit Python, aber nicht im programmieren. Ich möchte Python lernen und habe dafür mein ersten, kleines Projekt entwickelt.
Dieses habe ich bereits vor einigen Jahren in VBA erstellt (wo es auch gute Dienste leistete) und möchte dieses nun in Python übersetzen und nach und nach "aufbohren".
Da ich die Berechnung kenne, fiel darauf meine erste Wahl.
Als erstes möchte ich nur, dass nach der Eingabe des Breiten- und Längengerades alle Sonnenhöhen sowie Azimutstände der Sonne für den jeweilien Standort erfasst werden.
Die Ergebnisse sollen dann mit den korresponiderenen Zeitwerten in einer .txt ausgegeben werden.
Ich denke, das klingt für die meisten von euch ziemlich trivial
Nun bin ich aber in einen Fehler gerannt, den ich einfach nicht selber beheben kann.
Ich habe den Code mittels einem "Visualizer" Schritt für Schritt getestet und alle Fehler beseitigt. Innerhalb des Visualizer rennt der Code durch und gibt mir die Ergebnisse, die ich möchte.
(Um den Visualizer zu verwenden, habe ich den ganzen .txt-File output code gelöscht und durch print() ersetzt, da es ansonsten nicht unterstütz wird.)
(Der Visualizer ist folgender: pythontutor(dot)com - Dort wird die Version 3.6 unterstützt, ich habe 3.7 auf meinem PC)
Nun mein Problem:
Obwohl er im Visualizer ausführt, führt er unter meinem lokalen Python den Code nicht aus.
Gibt es da einen Versionskonflikt zwischen 3.6 und 3.7?
Ich habe leider so wirklich keine Idee mehr, woran es liegen könnte...
Ich gehe von einer "Kleingkeit" aus, die mir Newbie einfach nicht bewusst ist.
Über Anregungen und Hilfe würde ich mich riesig freuen.
Viele Grüße
Jaques
P.S.: Entschuldigt das blake reinkopieren des Tools, kann man das Script irgendwo hier zur Verfügung stelllen?
Code: Alles auswählen
import math
def f_sonnenhoehe(f_breitengrad, f_laengengrad, f_monat, f_tag, f_stunde, f_minute):
k=math.pi / 180
tageszahl = (f_monat - 1)*30.3 + f_tag
deklination = -23.45*math.cos(k*360*(tageszahl+10)/365)
zeitgleichung_minuten = 60*(-0.171*math.sin(0.0337*tageszahl + 0.465) - 0.1299*math.sin(0.01787*tageszahl - 0.168))
stundenwinkel = 15*(f_stunde+f_minute/60-(15-f_laengengrad)/15-12+zeitgleichung_minuten/60)
sonnenhoehe_sin = math.sin(k*f_breitengrad)*math.sin(k*deklination)+math.cos(k*f_breitengrad)*math.cos(k*deklination)*math.cos(k*stundenwinkel)
sonnenhoehe_grad = math.asin(sonnenhoehe_sin)/k
cos_azimut = -(math.sin(k*f_breitengrad)*sonnenhoehe_sin-math.sin(k*deklination))/(math.cos(k*f_breitengrad)*math.sin(math.acos(sonnenhoehe_sin)))
"""Berechnung Sonnenazimut"""
if f_stunde+f_minute/60 <= 12+(15-f_laengengrad)/15-zeitgleichung_minuten/60 :
sonnen_azimut = math.acos(cos_azimut)/k
else :
sonnen_azimut = 360-math.acos(cos_azimut)/k
return (sonnenhoehe_grad, sonnen_azimut)
"""Programmeinführung"""
print("Dieses Script berechnet für einen Standort die Hoehe und den")
print("Azimut der Sonne für jeden Tag des Jahres")
print("Die Aufloesung ist waehlbar in stuendlich, 15 minuetig, 5 minuetig") """implementierung später"""
print("Die Ergebnisse werden in einer .txt ausgegeben und sind mit Leerzeichen getrennt")
print()
print("Eingabe Breitengrad")
breitengrad=int(input("Breitengrad: "))
print("Eingabe Laengengrad")
laengengrad = int(input("Laengengrad: "))
""" Tage 1 bis 365 """
""" Beginnend bei 1 = 01.01. und endet bei 365 = 31.12. """
file=open("sonnenstaende.txt","w")
monat = 0
tag = 0
stunde = 0
minute = 0
while monat <= 12:
monat += 1
tag = 0
while tag <= 30:
stunde = -1
tag += 1
while stunde <= 23:
minute = 0
stunde += 1
while minute <= 55:
sonnenhoehe, sonnenazimut = f_sonnenhoehe(breitengrad, laengengrad, monat, tag, stunde, minute)
file.write('{:02d}'.format(monat))
file.write(" ")
file.write('{:02d}'.format(tag))
file.write(" ")
file.write('{:02d}'.format(stunde))
file.write(" ")
file.write('{:02d}'.format(minute))
file.write(" ")
file.write('{:03d}'.format(sonnenhoehe))
file.write(" ")
file.write('{:03d}'.format(sonnenazimut))
file.write("\n")
minute += 5
file.close()
print("Berechnung und Ausgabe in Datei erfolgreich beendet.")
k = input("X für schließen")