Python Programm stürzt ab, funktionier aber in Notepa++

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Taioft
User
Beiträge: 6
Registriert: Mittwoch 30. Oktober 2019, 18:45

Guten Abend, zur aller erst, ich bin ein Programmierneuling. Mein Problem ist, dass ich mehrere Python Programme für die Uni geschrieben habe und die soweit auch bei Notepad++ so funktionieren, wie sie auch sollen. Aber wenn ich die Dateien aus dem Ordner starte und meine input eingaben "erledige" schießt das Eingabefenster und bekommen meinen print nicht.

Danke schon mal für eure Hilfe. :)
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Bitte zeig mal eines der Programme um das es geht.

Und wie *genau* startest du das Programm? Was gibst du ein in der Shell?
Taioft
User
Beiträge: 6
Registriert: Mittwoch 30. Oktober 2019, 18:45

Naja ich mache einen Doppelklick auf die Datei, so dass sich glaube der Python Interpreter öffnet.

x = input("Geschaetzte Stundenzahl(0-23) in Seoul: ")
y = input("Geschaetzte Minutenzahl(0-59) in Seoul: ")

z = int(x)*60 + int(y)

zD = z + 420

if zD < 1440:

zS = zD//60
zM = zD%60

if zM<10:
zM = "0"+str(zM)

t = str(zS) + ":" + str(zM)

print("Ankunftszeit in Deutschland: " + str(t))

else:
zD = zD - 1440
zS = zD//60
zM = zD%60

if zM<10:
zM = "0"+str(zM)

t = str(zS) + ":" + str(zM)

print("Ankunftszeit in Deutschland: " + str(t))
Zuletzt geändert von Taioft am Mittwoch 30. Oktober 2019, 19:12, insgesamt 1-mal geändert.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Da kommt's dann drauf an, wer sich fuer die Dateiendung .py verantwortlich fuehlt. Und das kann ggf. Python 2 sein, aber du schreibst Python 3 - oder umgekehrt. Und dann geht das in die Hose. Versuch bitte stattdessen die Eingabeaufforderung. Ein simples meinprogramm.py sollte dem Doppelklick gleichkommen, aber hoffentlich einen Fehler zeigen (und nicht einfach verschwinden). Und "python meinprogramm.py" (ohne Anfuehrungszeichen, und ggf. vollen Pfaden zu sowohl Python als auch dem Programm) kannst du auch mal ausprobieren.
Taioft
User
Beiträge: 6
Registriert: Mittwoch 30. Oktober 2019, 18:45

Wie genau starte ich meine Datei über die Eingabeaufforderung?
Fire Spike
User
Beiträge: 329
Registriert: Montag 13. Mai 2019, 16:05
Wohnort: Erde

Code: Alles auswählen

python "dateipfad"
😇
Taioft
User
Beiträge: 6
Registriert: Mittwoch 30. Oktober 2019, 18:45

can't find '__main__' module in... , das steht dann bei mir
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Taioft: Bitte genau was Du eingegeben hast und genau was dann daraufhin ausgegeben wird. Nicht abtippen sondern kopieren.

Edit: Und bei dem Programm solltest Du dann dringend vernünftige Namen verwenden, diese gruselige `str()` und ``+`` Kombination durch Zeichenkettenformatierung mit der `format()`-Methode oder f-Zeichenkettenliteralen ersetzen, und das ``if``/``else`` loswerden. Oder zumindest nicht in beiden Zweigen fast das gleiche stehen haben. Wobei Du die Modulo-Operation bereits kennst. Die `divmod()`-Funktion solltest Du Dir mal anschauen. Oder gleich das `datetime`-Modul.
Zuletzt geändert von __blackjack__ am Mittwoch 30. Oktober 2019, 20:00, insgesamt 1-mal geändert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Taioft
User
Beiträge: 6
Registriert: Mittwoch 30. Oktober 2019, 18:45

C:\Users\taita>Python C:\Users\taita\OneDrive\Desktop\Uni Python\Übung01\Aufgabe_1.py
C:\Users\taita\AppData\Local\Programs\Python\Python37\python.exe: can't find '__main__' module in 'C:\\Users\\taita\\OneDrive\\Desktop\\Uni'
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Taioft: Du gibst da mehr als einen Dateinamen an: C:\Users\taita\OneDrive\Desktop\Uni und Python\Übung01\Aufgabe_1.py. Python versucht dann das erste auszuführen und übergibt das zweite als Argument. Du brauchst entweder Anführungszeichen um den Dateinamen mit dem Leerzeichen, oder Du nennst denn "Uni Python"-Ordner so um, dass er kein Leerzeichen enthält.

Oder Du wechselst vorher in das Verzeichnis und gibst dann nur noch den Dateinamen an.
Zuletzt geändert von __blackjack__ am Mittwoch 30. Oktober 2019, 20:18, insgesamt 1-mal geändert.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Das Problem ist, dass Du Leerzeichen in Deinem Verzeichnisnamen hast.
Am besten ist es, nach C:\Users\taita\OneDrive\Desktop\Uni Python\Übung01 zu wechseln und dort ›python Aufgabe_1.py‹ einzugeben.
Taioft
User
Beiträge: 6
Registriert: Mittwoch 30. Oktober 2019, 18:45

Nach dem ich das Leerzeichen bei dem Ordner "Uni Python" entfernt habe, klappt es. Jetzt funktioniert es auch genau so, wie es soll. Danke
Und auch danke für tippy beim programmieren an sich, da werde ich mich ran setzen. :)
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Da der Zeitunterschied zwischen Seoul und Deutschland momentan 7 Stunden, also 420 Minuten beträgt, möchtest Du vielleicht neben dem `datetime`-Modul noch das externe `pytz`-Modul verwenden. Dann ist die Rechnung auch unabhängig von Faktoren wie Sommer/Winterzeit die etwas an den 420 Minuten ändern können, richtig.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Ein paar Tipps zu Deinem Code: erstmal steht im if-Block fast das selbe wie im else-Block. Das gemeinsame kann man einmal danach schreiben:

Code: Alles auswählen

x = input("Geschaetzte Stundenzahl(0-23) in Seoul: ")
y = input("Geschaetzte Minutenzahl(0-59) in Seoul: ")

z = int(x)*60 + int(y)
zD = z + 420

if zD < 1440:
    pass
else:
    zD = zD - 1440
zS = zD//60
zM = zD%60
if zM<10:
    zM = "0"+str(zM)
t = str(zS) + ":" + str(zM)
print("Ankunftszeit in Deutschland: " + str(t))
Jetzt ist der if-Block überflüssig und man kann einfach die if-Bedingung umdrehen.
Wenn man Zahlen ausgeben will, benutzt man String-Formatierung, dann kann man auch gleich angeben, dass man führende Nullen haben will.

Code: Alles auswählen

x = input("Geschaetzte Stundenzahl(0-23) in Seoul: ")
y = input("Geschaetzte Minutenzahl(0-59) in Seoul: ")

z = int(x)*60 + int(y)
zD = z + 420

if zD >= 1440:
    zD = zD - 1440
zS = zD//60
zM = zD%60
print("Ankunftszeit in Deutschland: {}:{:02d}".format(zS,zM))
Will man Teilen und Module gemeinsam ausrechnen, nimmt man divmod. Die Variablen könnten noch besser benannt sein.

Code: Alles auswählen

stunden_seoul = input("Geschaetzte Stundenzahl(0-23) in Seoul: ")
minuten_seoul = input("Geschaetzte Minutenzahl(0-59) in Seoul: ")

minuten_gesamt_seoul = int(stunden_seoul)*60 + int(minuten_seoul)
minuten_gesamt_berlin = minuten_gesamt_seoul + 420

if minuten_gesamt_berlin >= 1440:
    minuten_gesamt_berlin -= 1440
stunden_berlin, minuten_berlin = divmod(minuten_gesamt_berlin, 60)
print("Ankunftszeit in Deutschland: {}:{:02d}".format(stunden_berlin, minuten_berlin))
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Das ganze mal mit den richtigen Werkzeugen für Zeitrechnungen:

Code: Alles auswählen

from datetime import datetime as DateTime, timedelta as TimeDelta
import pytz

flugzeit = TimeDelta(hours=15)
zeitzone_berlin = pytz.timezone('Europe/Berlin')
zeitzone_seoul = pytz.timezone('Asia/Seoul')

uhrzeit_seoul = input("Startzeit in Seoul (HH:MM): ")
uhrzeit_seoul = zeitzone_seoul.localize(DateTime.strptime(uhrzeit_seoul, '%H:%M'))
uhrzeit_berlin = uhrzeit_seoul.astimezone(zeitzone_berlin) + flugzeit
print("Ankunftszeit in Deutschland: {:%H:%M} Uhr".format(uhrzeit_berlin))
Benutzeravatar
__blackjack__
User
Beiträge: 14047
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@Sirius3: Da fehlt noch ein `zeitzone_berlin.normalize()` auf das Ergebnis der Addition wenn ich die `pytz`-Dokumentation richtig verstanden habe.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Antworten