Seite 1 von 1
konsole schließt sich beim ausführen des scripts
Verfasst: Samstag 3. Februar 2007, 21:10
von Bravad
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
Verfasst: Samstag 3. Februar 2007, 21:20
von Mawilo
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
Verfasst: Samstag 3. Februar 2007, 21:59
von Bravad
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.
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
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
Verfasst: Samstag 3. Februar 2007, 23:47
von Leonidas
Du musst nach
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.
Verfasst: Samstag 3. Februar 2007, 23:56
von BlackJack
Das '\n' wird nicht von `raw_input()` zurückgegeben:
Verfasst: Sonntag 4. Februar 2007, 00:01
von Bravad
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
soll deine if jetzt meine ersetzen, oder muss die noch zusätzlich in den code
Gruß
Bravad
Verfasst: Sonntag 4. Februar 2007, 09:27
von sape
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....
...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
Verfasst: Sonntag 4. Februar 2007, 12:32
von Leonidas
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"
Verfasst: Sonntag 4. Februar 2007, 12:46
von sape
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:
@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.
Verfasst: Sonntag 4. Februar 2007, 14:03
von Bravad
Hey, danke für eure Mühe.
Ich werde versuchen, mich in Zukunft besser auszudrücken, um Missverständnisse zu vermeiden
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
"try" kannte ich bisher noch nicht, ist aber nicht allzu schwer zu verstehen
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