Keine Eingabemöglichkeit nach raw_input()

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
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

ich bin gerade dabei mich in Python, meiner ersten Programmiersprache überhaupt ein zu arbeiten und habe folgendes Problem:

eingabe= raw_input ("Bitte geben Sie eine Zahl, die kleiner als 10 ist ein: ")

und das Programm wartet auf eine Eingabe, logisch o.k.

2te Zeile:

if eingabe > 10:
print "Ich sagte kleiner als 10"

und das Programm wartet nicht mehr auf eine Eingabe! Warum?

Was habe ich falsch gemacht?
Zuletzt geändert von breathe_easy am Sonntag 19. August 2007, 16:59, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo breathe_easy,

könntest du dem Thread einen sinnvollen Titel geben? "Anfängerfrage" ist schlichtweg sinnlos und ohne Aussage.
breathe_easy hat geschrieben:und das Programm wartet nicht mehr auf eine Eingabe! Warum?

Was habe ich falsch gemacht?
Weil ``raw_input()`` einen String zurückgibt und du dann eine Zahl vergleichst. Du musst also erstmal den String in eine Zahl wandeln, das geht mit ``int()``.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Möchtest du erreichen, dass das Programm "nochmal fragt", wenn es nicht kleiner als 10 ist?

Code: Alles auswählen

while True:
    num = int(raw_input("Zahl < 10 eingeben: "))
    if num > 10:
        print "Kleiner als 10!"
    else:
        break
Einer Möglichkeit...
Zuletzt geändert von BlackVivi am Sonntag 19. August 2007, 15:00, insgesamt 1-mal geändert.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackVivi hat geschrieben:Einer Möglichkeit...
``input()`` zu verwenden ist in diesem Fall höchstens eine fahrlässige Möglichkeit.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Leonidas hat geschrieben:
BlackVivi hat geschrieben:Einer Möglichkeit...
``input()`` zu verwenden ist in diesem Fall höchstens eine fahrlässige Möglichkeit.
Ja, hab vorhin nochmal drüber nachgedacht, idiotisch... Und nicht typsicher...
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

o.k. das mit dem Titel sehe ich ein und werde mir beim nächsten Mal mehr Gedanken machen.
Veränderung mit:
eingabe=int(raw_input "Bitte.................: "))
habe ich gemacht, aber ich bekomme immer noch kein Ausdruck bei einem Input, der größer als 10 ist.
Warum?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackVivi hat geschrieben:Und nicht typsicher...
Naja, die Typsicherheit ist nicht so das Problem, eher die Code Execution, die ``input()`` vornimmt.
breathe_easy hat geschrieben:o.k. das mit dem Titel sehe ich ein und werde mir beim nächsten Mal mehr Gedanken machen.
Machs doch jetzt und editier in deinem ersten Post den Titel.
breathe_easy hat geschrieben:Veränderung mit:
eingabe=int(raw_input "Bitte.................: "))
habe ich gemacht, aber ich bekomme immer noch kein Ausdruck bei einem Input, der größer als 10 ist.
Warum?
Kann nicht sein:

Code: Alles auswählen

In [2]: num = int(raw_input('Bitte geben Sie eine Zahl die kleiner als 10 ist ein: '))
Bitte geben Sie eine Zahl die kleiner als 10 ist ein: 11
In [3]: if num > 10: print 'ich sagte kleiner als 10'
   ...:
ich sagte kleiner als 10
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

Doch kann sein! Ich weiss auch nicht warum.

Hier mein Programm:

Code: Alles auswählen

#!/usr/bin/python

eingabe = int(raw_input("Bitte geben Sie eine Zahl ein, die kleiner als 10 ist:  "))
if eingabe > 10:
  print "Ich habe gesagt kleiner als 10 !"
elif eingabe ==10:
	print "Nein kleiner als 10 nicht gleich 10"
else eingabe < 10:
	print "Super echt toll gelöst"
	
print "Fertig"

und die Konsole springt kurz auf und schließt sich sofort wieder, wenn ich dieses unter eingabe.py abgespeicherte Programm versuche zu öffnen.

Edit by Gerold: Code in Code-Tags; Bitte beim nächsten mal selber machen.
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Du siehst die Ausgabe einfach nicht...

(Welcher Idiot kam bei Windows auf die Idee, die Konsole wieder zu schließen wenn ein Befehl ausgeführt wurde oO?)

Ausführen --> CMD --> In das Verzeichnis "CD"en, in der das Script liegt, ausführen. Dann siehst du auch die Ausgabe... Oder du machst es mit IDLE, neues Fenster in Idle, Code eingeben, abspeichern... Anschließend F5 und dann müsste es auch besser sichtbar sein, was für eine Ausgabe erscheint.
Benutzeravatar
Craven
User
Beiträge: 223
Registriert: Dienstag 24. Januar 2006, 13:37

Code: Alles auswählen

#!/usr/bin/python

eingabe = int(raw_input("Bitte geben Sie eine Zahl ein, die kleiner als 10 ist:  "))
if eingabe > 10:
  print "Ich habe gesagt kleiner als 10 !"
elif eingabe ==10:
	print "Nein kleiner als 10 nicht gleich 10"
else eingabe < 10:
	print "Super echt toll gelöst"
	
print "Fertig"
Is klar, weil du bei else keine Bedingung anführen darfst:

Code: Alles auswählen

else:
	print "Super echt toll gelöst"
Fehlermeldung:
Commandline hat geschrieben:C:\Dokumente und Einstellungen\Craven\Desktop>asd.py
File "C:\Dokumente und Einstellungen\Craven\Desktop\asd.py", line 7

else eingabe < 10:
^
SyntaxError: invalid syntax
Zuletzt geändert von Craven am Sonntag 19. August 2007, 17:37, insgesamt 1-mal geändert.
[code]q = 'q = %s; print q %% repr(q)'; print q % repr(q) [/code]
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo!

Code: Alles auswählen

if bedingung:

elif bedingung:

else:
Und achte bitte darauf, dass überall die gleiche Anzahl (4) Leerzeichen für die Einrückung verwendet wird.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

BlackVivi hat geschrieben:(Welcher Idiot kam bei Windows auf die Idee, die Konsole wieder zu schließen wenn ein Befehl ausgeführt wurde oO?)
Welcher Idiot kam ueberhaupt auf Windoze :shock:

Naja, um mal noch ein bissl was sinnvolleres zu bringen:

Du koenntest am Ende des Programmes nochmal ein raw_input anhaengen, also zB so:

Code: Alles auswählen

if __name__ == '__main__':
    while True:
        zahl = int( raw_input("Bitte Zahl kleiner als 10 eingeben:") )
        if zahl > 10: print "Hey, kleiner als 10 war gesagt!"
        elif zahl == 10: print "Kleiner... nicht *gleich* 10!"
        else: break

    raw_input("Gut gemacht... bitte Enter druecken, zum Beenden.")
(habs jetzt nicht auf Fehler ueberprueft)

Edit: Achja, es ist unter Windows nicht notwendig den SheBang (#!/usr/bin/python) mit anzugeben... aber schaden tut es nicht, falls es auch unter Unixsystemen problemlos starten soll.
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

nkoehring hat geschrieben:
BlackVivi hat geschrieben:(Welcher Idiot kam bei Windows auf die Idee, die Konsole wieder zu schließen wenn ein Befehl ausgeführt wurde oO?)
Welcher Idiot kam ueberhaupt auf Windoze :shock:
Weder in GNOME noch in KDE geht überhaupt eine Konsole auf, wenn man ein Script startet - so weiß man nicht einmal ob überhaupt etwas gestartet ist. In Windows 9x, wo ``command.com`` dabei war, ging das DOS-Fenster übrigens nicht automatisch nach dem beenden zu.
nkoehring hat geschrieben:Du koenntest am Ende des Programmes nochmal ein raw_input anhaengen
Das ist eine recht hässliche Lösung und sie nervt wenn man das Programm aus der Shell startet - dann muss man nämlich einmal zusätzlich und unnötigerweise Enter drücken. Außerdem ist deine Lösung ebenfalls nicht brauchbar, denn wenn eine Exception kommt, dann bricht es vor dem ``raw_input()`` das das Fenster offen halten soll und die Exception ist nicht mehr sichtbar. Da müsste man eher mit ``atexit`` ran, aber wie gesagt - ich rate davon ab. Konsolenprogramme startet man nunmal in der Konsole, wie BackVivi gesagt hat. In den FAQ ist auch noch ein [wiki=FAQ#WieStarteIchSkripte]ausführlicher Punkt[/wiki] dazu.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

Leonidas hat geschrieben:Weder in GNOME noch in KDE geht überhaupt eine Konsole auf, wenn man ein Script startet - so weiß man nicht einmal ob überhaupt etwas gestartet ist.
Wobei man das imho wenigstens anpassen kann.
Trotzdem hat Leonidas natürlich Recht: Konsolenprogramme am Besten aus der systemtypischen Konsole starten. Ist besonders nützlich, wenn diese auch noch Argumente verarbeiten können.
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

So o.k. Eins nach dem Anderen. Ich bin kein Windows-user! Debian (Sid) Linux
Na klar, nach else keine Bedingung, Danke!
Aus kde keine Scripte ich weiss zwar noch nicht genau den Unterschied zwischen Skript und Programm aber ein einfaches
eingabe = int ( raw_input ( "Bitte geben Sie ...................))
unter dem Namen eingabe.py geht in der Konsole auf und wartet auch auf die Eingabe! Nur wenn diesem erwarteten !!! (noch keine Eingabe) !!! Input weitere Zeilen in Fomr von Berechnungen folgen bzw. Bedingungen schließt sich das Fenster sofort wieder. Eine echter Erklärung dafür habe ich auch in den FAQ nicht gefunden.
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

breathe_easy hat geschrieben:Aus kde keine Scripte ich weiss zwar noch nicht genau den Unterschied zwischen Skript und Programm aber ein einfaches
eingabe = int ( raw_input ( "Bitte geben Sie ...................))
unter dem Namen eingabe.py geht in der Konsole auf und wartet auch auf die Eingabe! Nur wenn diesem erwarteten !!! (noch keine Eingabe) !!! Input weitere Zeilen in Fomr von Berechnungen folgen bzw. Bedingungen schließt sich das Fenster sofort wieder. Eine echter Erklärung dafür habe ich auch in den FAQ nicht gefunden.
Skript und Programm ist im Prinzip dasselbe.
In dem Code, den du oben angegeben hast, sind mehrere Syntaxfehler.
Sobald Python einen solchen beim Öffnen des Programms entdeckt, bricht
es die Verarbeitung mit einer Fehlermeldung ab.
Daher starte vorher eine "Konsole" bzw. ein xterm und führe dein Programm von dort aus, dann siehst du auch in diesem Fall die Meldungen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

breathe_easy hat geschrieben:Nur wenn diesem erwarteten !!! (noch keine Eingabe) !!! Input weitere Zeilen in Fomr von Berechnungen folgen bzw. Bedingungen schließt sich das Fenster sofort wieder. Eine echter Erklärung dafür habe ich auch in den FAQ nicht gefunden.
Nicht sofort, sondern nach ein paar Milisekunden. Das ist ganz einfach. Das Programm wartet auf deine Eingaben. Danach gibt es die Ausgabe aus und beendet sich. Nun da das Programm beendet ist, ist das Konsolenfensterunnötig und wird geschlossen.
Heißt also: das Fenster schließt sich nicht sofort,sondern nachdem das Programm beendet ist. Nur eben schneller als du die Ausgaben lesen kannst.

Der Tipp besteht immer noch: Starte das Programm in einer schon offenen Konsole - die bleibt nach dem Beenden des Programmes offen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
breathe_easy
User
Beiträge: 58
Registriert: Sonntag 29. Juli 2007, 18:34

Alles klar jetzt habe ich alles verstanden, den Tip mit der Konsole habe ich ausprobiert und es funzt natürlich. Danke an alle, die sich Gedanken gemacht haben!

in diesem Sinne breathe_easy
Antworten