Ich bin absoluter Programmierneuling und fange mit ganz einfachen Programmen an. Ich kann ein geschriebenes Programm zwar speichern und auch wieder aufrufen, aber ich habe ein Problem damit, das Programm zum Laufen zu bekommen. Das programm lautet: print('Bitte einen Text eingeben')
x = input()
print('Ihre Eingabe::' x)
Die Eingabeaufforderung kommt, aber wenn ich einen Text eingebe und dann auf enter drücke verschwindet das Fenster ( unter windows 1o). Habe ich einen Fehler im Programm ? Welche Taste muss ich nach der Eingabe drücken, damit das Programm weitergeht?
Jürgen
Starten eines python-Programmes/ Tastenbelegung
Dein Problem besteht im Verhalten von Windows: das per Doppelklick gestartete Programm tut seinen Dienst klaglos. Aber nach der letzten Anweisung ist es vorbei. Und was mach Windows dann? Es schließt das Fenster.
Da es sowieso gut ist, sich mit der kommandozeile vertraut zu machen, würde ich so vorgehen:
- starte CMD.EXE aus dem schnellstarter von Windows.
- navigiere mit cd zu der Stelle, an der dein Programm liegt.
- ruf es da auf.
Da es sowieso gut ist, sich mit der kommandozeile vertraut zu machen, würde ich so vorgehen:
- starte CMD.EXE aus dem schnellstarter von Windows.
- navigiere mit cd zu der Stelle, an der dein Programm liegt.
- ruf es da auf.
@ juergewa :
1. bitte deinen code hier im forum zwischen die dafür vorgesehenen code-Tags schreiben. Dazu oberhalb des Editors auf den Button "</>" klicken.
2. schreibe deine Skripte immer so, dass ein dritter auch weiß, was du tust. Dafür sind Bezeichner wie 'x' eher unangebracht.
3. dein code ist auch nicht richtig.
wenn du jedesmal ans Ende eines Skriptes folgendes hängst :
dann bleibt das Fenster auch offen.
Ich habe mir beispielsweise eine Vorlagendatei "vorlage_script_neu.py" erstellt, die ich immer aufrufe und dann unter dem entsprechenden Namen speichere mittels STRG + Shift + s
die sieht so aus:
1. bitte deinen code hier im forum zwischen die dafür vorgesehenen code-Tags schreiben. Dazu oberhalb des Editors auf den Button "</>" klicken.
2. schreibe deine Skripte immer so, dass ein dritter auch weiß, was du tust. Dafür sind Bezeichner wie 'x' eher unangebracht.
3. dein code ist auch nicht richtig.
Code: Alles auswählen
eingabe = input()
print("Ihre Eingabe : ", eingabe)
Code: Alles auswählen
if(__name__ == "__main__"):
print()
print("Programm schliessen mit <Enter>")
dann bleibt das Fenster auch offen.
Ich habe mir beispielsweise eine Vorlagendatei "vorlage_script_neu.py" erstellt, die ich immer aufrufe und dann unter dem entsprechenden Namen speichere mittels STRG + Shift + s
die sieht so aus:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Autor:
# Datum:
# Dateiname :
# Sinn/Zweck :
#TO DO
"""
text
"""
#IMPORT
#from [modul] import */[Funktion]
#import [modul]
#FUNKTIONDEFINITIONEN
#class [name](object) :
#def [name](Parameter/Argumente) :
#KONFIGURATION
#ANWEISUNGEN
#ENDE
if(__name__ == "__main__"):
print()
print("Programm schliessen mit <Enter>")
wer lesen kann ist klar im Vorteil
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
An sich ist dein Template recht gelungen. Allerdings ist es üblich, eine main-Funktion zu haben, die in dem 'if __name__ == '__main__' Block aufgerufen wird, statt den Code dort zu platzieren und oft als unterste Funktion direkt darüber steht. In Python braucht man (anders als in Perl) keine Klammern um die Bedingung. Die Import-Reihenfolge handhabe ich immer so, dass erst Standardbibliotheken kommen, dann 3rd Party Bibliotheken und dann eigene, sowie pro Block Importe ganzer Module vor "from" Importen (siehe: https://www.python.org/dev/peps/pep-0008/#imports); bei deinem Beispiel ist es anders rum.
@nezzcarth :
danke für deine Hilfestellung und deine Tipps !
Habe es jetzt derart geändert :
danke für deine Hilfestellung und deine Tipps !
Habe es jetzt derart geändert :
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Autor:
# Datum:
# Datei:
# Zweck/Sinn:
#TO DO
"""
text
"""
#IMPORT
#import [modul]
#from [modul] import [Funktion]/*
#FUNKTIONDEFINITIONEN
#class [name](object) :
#def [name](Parameter/Argumente) :
#KONFIGURATION
#HAUPTPROGRAMM
if __name__ == "__main__" :
main()
#ENDE
if __name__ == "__main__" :
print()
print("Programm schliessen mit <Enter>")
wer lesen kann ist klar im Vorteil
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Dem ist nicht so. Mal abgesehen von den unueblichen Klammern um die Bedingung macht dieses Snippet nichts anders als der TE. Der __main__-Guard verhindert nur, dass dieser Code beim *importieren* ausgefuehrt wird.Perlchamp hat geschrieben: ↑Sonntag 17. Februar 2019, 12:30 wenn du jedesmal ans Ende eines Skriptes folgendes hängst :Code: Alles auswählen
if(__name__ == "__main__"): print() print("Programm schliessen mit <Enter>")
dann bleibt das Fenster auch offen.
Was du wohl meinst ist sowas hier:
Code: Alles auswählen
if __name__ == "__main__":
print("Programm schliessen mit <Enter>")
input()
Das ist natuerlich moeglich, aber hat einen entscheidenden Nachteil: genau dann wenn es NICHT funktioniert, naemlich wenn man einen Fehler gemacht hat, stuerzt das Programm ab & schliesst sofort die Fehlermeldung. Das Problem hat man nicht, wenn man im Terminal arbeitet. Natuerlich kann man auch die Exception abfangen & ausgeben, aber man kann sich auch einfach an das Terminal gewoehnen..
@ _deets_ :
super !, danke !
edit: Klammern waren bereits entfernt, habe Skript-Vorlage deinen Tipps entsprechende geändert.
ich arbeite ungern am Terminal, wegen des fehlenden Syntaxhighlightings. Ich arbeite entweder mit der IDLE oder mit Spider.
Als Anfänger ist mir Syntaxhighlighting sehr sehr wichtig und hat mir bereits oft geholfen !
... und ich kann dann auch mit try...except-, oder try...finally-Anweisungen besser umgehen (da häufiger Umgang damit) und die Fehlermeldungen (z.B. mittels pickle-Modul) in ein log-file schieben ...
super !, danke !
edit: Klammern waren bereits entfernt, habe Skript-Vorlage deinen Tipps entsprechende geändert.
ich arbeite ungern am Terminal, wegen des fehlenden Syntaxhighlightings. Ich arbeite entweder mit der IDLE oder mit Spider.
Als Anfänger ist mir Syntaxhighlighting sehr sehr wichtig und hat mir bereits oft geholfen !
... und ich kann dann auch mit try...except-, oder try...finally-Anweisungen besser umgehen (da häufiger Umgang damit) und die Fehlermeldungen (z.B. mittels pickle-Modul) in ein log-file schieben ...
wer lesen kann ist klar im Vorteil
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Aber was hat denn das Syntax-Highlighting damit zu tun? Ich rede ja vom ausfuehren deines Programms. Nicht davon, wie du das erstellst. Ob der TE (oder du) da IDLE oder Emacs oder was auch immer benutzen hat damit doch gar nichts zu tun.
Logfiles sollten Text enthalten. Was ist der Gewinn, den mit pickle zu garnieren?
Logfiles sollten Text enthalten. Was ist der Gewinn, den mit pickle zu garnieren?
@ TE:
so hier erneut die Vorlage:
so hier erneut die Vorlage:
Code: Alles auswählen
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Autor:
# Datum:
# Datei:
# Zweck/Sinn:
#TO DO
"""
text
"""
#IMPORT
#import [modul]
#from [modul] import [Funktion1, Funktion2]/*
#FUNKTIONSDEFINITIONEN
#class [name](object) :
#def [name](Parameter/Argumente) :
#KONFIGURATION
#HAUPTPROGRAMM
if __name__ == "__main__" :
main()
#ENDE
if __name__ == "__main__" :
print()
print("Programm schliessen mit <Enter>")
input()
wer lesen kann ist klar im Vorteil
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
@ _deets_ :
du merkst an meiner Antwort, dass ich das Terminal nicht kenne. Aber werde dennoch einmal den Umgang damit versuchen.
Ich speichere üblicherweise alles mit pickle ab, als .dmp-Datei. Ich hoffe, ich schreibe jetzt keinen Mist:
mit pickle gespeicherte Dateien sind konsistenter und weniger fehleranfällig.
du merkst an meiner Antwort, dass ich das Terminal nicht kenne. Aber werde dennoch einmal den Umgang damit versuchen.
Ich speichere üblicherweise alles mit pickle ab, als .dmp-Datei. Ich hoffe, ich schreibe jetzt keinen Mist:
mit pickle gespeicherte Dateien sind konsistenter und weniger fehleranfällig.
wer lesen kann ist klar im Vorteil
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Ich glaube, jetzt kommen wir sehr vom ursprünglichen Thema ab, aber ich sehe das etwas anders. Die Frage ist sicher, was man vorhat. Dumps und Log Dateien sind ja zwei verschiedene Dinge. Logs erfüllen eine Berichtsfunktion, Dumps dienen dazu, Daten aus einem Prozess möglichst unverfälscht abzubilden, zu Diagnose- (z.B. Core Dump) und/oder Rekonstruktionszwecken (z.B. Datenbankdump). Pickle eignet sich für den zweiten Zweck (pickle ist allerdings auch umstritten, da es eine Reihe von Problemen z.B. im Bereich Portablität und Sicherheit hat, die es auch als Datenaustauschformat ungeeignet machen); also z.B. um eine Datenstruktur serialisiert wegzuschreiben und sie später wieder zu laden. Aber schon dafür, würden viele argumentieren, eignet sich ein neutraleres, (nicht-binäres), nicht-python-spezifisches Format wie json besser. Für Log Dateien ist es zumindest unter Unix-Systemen üblich, mit Plaintext zu arbeiten, alleine schon, da die Verarbeitung und Manipulation von Text eine der großen Stärken von Unix ist; durch eine Pickle-Datei lässt sich schlecht greppen Das ist ja u.a. einer der größeren Kritikpunkte an systemd.
@Perlchamp: Terminal-Programme sind dazu da, aus einem Terminal heraus gestartet zu werden. Du verwechselst das wahrscheinlich mit dem interaktiven Python-REPL, wo es mit ipython auch eine deutlich komfortablere Variante gibt. Wenn man wirklich will, dass Programme nach einem Doppelklick laufen und nicht sofort das Fenster zugeht, sollte man sich ein Batch-Skript schreiben, das Python aufruft und zum Schluß mit PAUSE wartet. Das hat den Vorteil, dass man sich nicht alle Python-Programme für das normale benutzen kaputt macht und auch bei Fehlern das Fenster offen bleibt.
Warum hast Du zwei if-Blöcke mit der exakt selben Bedingung hintereinander?
Warum hast Du zwei if-Blöcke mit der exakt selben Bedingung hintereinander?
@ nezzcarth :
ja, verstehe ich schon ... eigentlich schiesse ich mit Kanonen auf Spatzen, schon klar.
.json sagt mir jetzt leider gar nichts.
und vielen lieben Dank für deine gute Ausführung/Erklärung
vielleicht kann ja ein Mod die Texte in ein neues Thema verschieben ?
@sirius3 :
Ja, hatte ich in der Tat verwechselt, ich Thor.
Ist ja 'nur' ein Template, aber um richtig zu antworten:
da es unter zwei verschiedenen 'Blöcken' steht (Hauptprogramm, Ende).
Und das mit der Batch-Datei klingt schon mal sehr gut, danke !
Sollte auch einfach zu erstellen sein, oder ?
ja, verstehe ich schon ... eigentlich schiesse ich mit Kanonen auf Spatzen, schon klar.
.json sagt mir jetzt leider gar nichts.
und vielen lieben Dank für deine gute Ausführung/Erklärung
vielleicht kann ja ein Mod die Texte in ein neues Thema verschieben ?
@sirius3 :
Ja, hatte ich in der Tat verwechselt, ich Thor.
Ist ja 'nur' ein Template, aber um richtig zu antworten:
da es unter zwei verschiedenen 'Blöcken' steht (Hauptprogramm, Ende).
Und das mit der Batch-Datei klingt schon mal sehr gut, danke !
Sollte auch einfach zu erstellen sein, oder ?
wer lesen kann ist klar im Vorteil
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Da du dich auch in einem anderen Thread als Marvel Figur betitelst, schau mal hier: https://de.wikipedia.org/wiki/Torheit
Aber imho finde ich das auch dieser Titel nicht passend ist, etwas zu negativ.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
@ ThomasL :
war sarkastisch gemeint (Tor mit 'h'), um meine 'Unfähigkeit' zu unterstreichen, und vor allem, dass ich als Anfänger keine Ratschläge geben sollte, sonst bekommt man schnell den Titel "Dummschwätzer".
Und danke für deine Anmerkung !
war sarkastisch gemeint (Tor mit 'h'), um meine 'Unfähigkeit' zu unterstreichen, und vor allem, dass ich als Anfänger keine Ratschläge geben sollte, sonst bekommt man schnell den Titel "Dummschwätzer".
Und danke für deine Anmerkung !
wer lesen kann ist klar im Vorteil
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
es gibt keine Probleme, sondern nur Lösungen !
Bildung ist die Freude auf mich selbst !
Enthusiasmus ist manchmal ein schlechter Ratgeber, diese Erfahrung habe ich in diesem Forum als Neuling auch gemacht.
Das gibt sich mit der Zeit und wachsendem Wissen.
Das gibt sich mit der Zeit und wachsendem Wissen.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png