konsole schließt sich beim ausführen des scripts

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
Bravad
User
Beiträge: 4
Registriert: Sonntag 28. Januar 2007, 18:14
Kontaktdaten:

hi, ich habe gerade erst mit python angefangen und arbeite gerade das buch "objekt orientierte Programmierung mit Python" durch.

Ich hab folgenden Code, der den Gebrauch einer Endlosschleife vorsieht (is ein reines übungsscript, sinnvoll ist es nicht wirklich):

Code: Alles auswählen


print "Bitte Zahl zwischne 1 und 10 eingebn"

while TRUE:
    zahl = input("Zahl: ")
    if 1 <= zahl <= 10:
        break   # Benuter hat gueltige Zahl eingegeben
    else
        print "Die Zahl muss zwischne 1 und 10 liegen"
print "Vielen Dank"

Den Code habe ich jetzt als .py abgespeichert. wenn ich die Datei aufrufen will, blitz die Konsole leider nur kurz auf und is dann weg. Deshalb meine Frage: Muss ich den Code ergänzen, bzw ändern, damit ich das script ausführen kann. oder liegt das Problem woanders???

Gruß


Bravad
Benutzeravatar
Mawilo
User
Beiträge: 452
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Hallo,

ich habe mal noch ein raw_input zugefügt. Jetzt wird das Script erst beendet, wenn noch eine Taste gedrückt wurde.
Du hattest auch noch zwei Fehler drin. Du kannst nur True verwenden und nicht TRUE und nach else muss ein Doppelpunkt hin.

Ansonsten - herzlich willkommen im Forum.

Code: Alles auswählen

print "Bitte Zahl zwischen 1 und 10 eingeben"

while True:
    zahl = input("Zahl: ")
    if 1 <= zahl <= 10:
        break   # Benuter hat gueltige Zahl eingegeben
    else:
        print "Die Zahl muss zwischen 1 und 10 liegen"
print "Vielen Dank"

raw_input('Zum Beenden eine Taste drücken')
Stephan
Bravad
User
Beiträge: 4
Registriert: Sonntag 28. Januar 2007, 18:14
Kontaktdaten:

hi,
danke für deien Antwort, ich hatte es schon selbst mi raw_input versucht gehabt, allerdings hatte ich da wohl die Klammern vergessen. Aber so funktioniert es ja. :D
Komishc, dass mir "True" und ":" nicht selbst aufgefallen waren, wo ich mir den Code mehrmals angeguckt habe.
Wahrscheinlich muss ich mein Auge dafür noch schulen...

EIDT:

ich wollte jetzt das sript ändern, so dass das wort "Zahl" (ohne "") eingegebne werden muss. Dazu habe ich dann die if in

Code: Alles auswählen

if zahl == "Zahl":
geändert, alles ander bleibt gleich. Jetzt habe ich aber folgendes Problem:

Bei Eingabe einer Zahl wird die else Anweisung ausgegebn, so wie es sein soll.
Wenn man "Zahl" ohne "" eingibt schließt sich das script
und wenn man "Zahl" eingibt, wird die while anweisung beendet und es erscheint "Vielen Dank"

Was muss ich verändern, damit sich das script bei falschen buchstabeneingaben nicht schließt und damit es "Zahl" ohne "" als richtige Eingabe erkennt???

(wie gesagt, nur die if bedingung is geändert worden)


Gruß


Bravad
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du musst nach

Code: Alles auswählen

if zahl == "Zahl\n"
testen, denn raw_input liefert das Enter (\n) am Ende der Eingabe mit. Kannst es natürlich auch schon vor dem Testen weg-strip()en.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Das '\n' wird nicht von `raw_input()` zurückgegeben:

Code: Alles auswählen

In [5]: print repr(raw_input())
Zahl
'Zahl'
Bravad
User
Beiträge: 4
Registriert: Sonntag 28. Januar 2007, 18:14
Kontaktdaten:

hmm, ich kannte \n bisher nur als Zeilenumbruch. Allerdings muss ich auch leider sagen, dass ich aus deinem beitrag nicht schlau werden kann, in wie fern mir \n helfen kann :oops:
soll deine if jetzt meine ersetzen, oder muss die noch zusätzlich in den code :?:

Gruß


Bravad
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Hi und willkommen im Python-Forum:

Code: Alles auswählen

print "Bitte Zahl zwischen 1 und 10 eingeben"

while True:
    zahl = raw_input("Zahl: ")
    try:
        zahl = int(zahl)
    except ValueError:
        pass
    
    if 1 <= zahl <= 10:
        break   # Benuter hat gueltige Zahl eingegeben
    elif zahl == "foobar": 
        print "%s eingegeben" % zahl
        break
    else:
        print "Die Zahl muss zwischen 1 und 10 liegen oder foobar eingebenen worden sein."
print "Vielen Dank"

raw_input('Zum Beenden eine Taste druecken')
``input`` in Zeile 4 durch ``raw_input`` ersetzen.

Dieser Abschnitt versucht die eingab in ein integer umzuwandeln....

Code: Alles auswählen

try:
        zahl = int(zahl)
    except ValueError:
        pass
...Falls es nicht geht, weil ein alphanumerischer wert eingeben wurde, löst es die Exception ValueError aus, die untern abgefangen wird. Das machen wir uns zu nutzen! -> Somit kann auf bestimmte Zeichenkette gesteste werden (Wenn die Umwandlung nicht geht) oder eben auch auf Zahlen (Falls die Umwandlung geklappt hat.)

lg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Bravad hat geschrieben:hmm, ich kannte \n bisher nur als Zeilenumbruch.
Es ist ja auch ein Eilenumbruch - aber wie BlackJack schrieb, ist das natürlich Schwachsinn gewesen. Ich solle öfters testen, was ich schreibe.

Aber dann verstehe ich dein Problem nicht ganz:

Code: Alles auswählen

zahl = raw_input('Zahl: ')
if zahl == 'Zahl':
    print "'Zahl' eingegeben"
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Leonidas hat geschrieben: Aber dann verstehe ich dein Problem nicht ganz:

Code: Alles auswählen

zahl = raw_input('Zahl: ')
if zahl == 'Zahl':
    print "'Zahl' eingegeben"
Naja, er hat das Script ja nur erweitert und will aber das folgendes auch noch geht (So hatte ich das verstanden):

Code: Alles auswählen

if 1 <= zahl <= 10:
        break   # Benuter hat gueltige Zahl eingegeben 
Das geht aber schlecht mit strings und ``raw_input`` liefert nur strings. Daher habe ich zum Script Zeile 5 - 8 hinzugefügt:

Code: Alles auswählen

try:
        zahl = int(zahl)
    except ValueError:
        pass
@Bravad:
In meinen Beispiel:
Wenn sich der Wert von Zahl in ein ``int`` konvertieren lässt und der Wert dann zwischen 1 - 10 ist, greift die erste if Anweisung. Falls das konvertieren nicht klappt und der String als Wert ``foobar`` hat, greift die zweite. Wen keins zutrifft wird else ausgeführt.

lg

EDIT: Fehler berichtigt.
Bravad
User
Beiträge: 4
Registriert: Sonntag 28. Januar 2007, 18:14
Kontaktdaten:

Hey, danke für eure Mühe.
Ich werde versuchen, mich in Zukunft besser auszudrücken, um Missverständnisse zu vermeiden :D
Aber sape hat mein Problem so interpretiert wie ich es ausdrücken wollte. Danke auch für deine Erklärungen des Codes, funktioniert alles so wie ich es mir vorgestellt habe :wink:
"try" kannte ich bisher noch nicht, ist aber nicht allzu schwer zu verstehen :wink:
Ich were mich wohl erst nochmal konzentrierter mit meinem Buch beschäftigen müssen, mir ist nämlich aufgefallen, dass ich einige Sachen doch hätte wissen müssen, was mein Problem angeht. Ist wahrscheinlich die mangelnde Praxis- Erfahrung!

Nochmals vielen Dank für eure schnelle und tolle Hilfe


Bravad
Antworten