aus while Schleife mit str user input aussteigen

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
outoftune
User
Beiträge: 8
Registriert: Samstag 1. Mai 2010, 18:45

Tag zusammen.

Python ist doof zu mir - oder ich zu doof fuer Python. Mutmasslich isses gaaanz einfach, aber ich krieg nicht hin das er mit nem str aussteigt. Mit nem int isses kein problem. Was mach ich falsch?!

Die Schleife soll so lange laufen, bis der user "exit" eingibt. Ich verwende Python3.x

Vielen lieben Dank fuer jede Hilfe
OOT

Code: Alles auswählen

running=True

while (running):
    print("still running")
    userInput=input("input: ")
    
    if userInput == "exit":
        running=False

print("done")
Zuletzt geändert von outoftune am Samstag 1. Mai 2010, 19:07, insgesamt 1-mal geändert.
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Niemals `input` benutzen, es gibt `raw_input`.
outoftune
User
Beiträge: 8
Registriert: Samstag 1. Mai 2010, 18:45

oh mist, ich haette dazu sagen sollen das ich mit Python3.x unterwegs bin.

raw_input scheint es da nicht mehr zu geben...
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

Du lernst nicht zufällig mit einem Tutorial für Python der Version 3.x, benutzt als Interpreter aber Python 2.x?
outoftune
User
Beiträge: 8
Registriert: Samstag 1. Mai 2010, 18:45

nein, die installierte python version ist 3.

daher gibts kein raw_input() mehr.
Wie gesagt, wenn ich nach ner Zahl frage steigt die schleife brav aus, nur mit nem string gehts irgendwie nich :(
Zuletzt geändert von outoftune am Samstag 1. Mai 2010, 19:18, insgesamt 1-mal geändert.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Benutze zum "Aussteigen" aus einer Schleife das Statement ``break``. Außerdem empfiehlt es sich, PEP8-konforme Namen zu verwenden (also ``user_input`` statt ``userInput``).
Benutzeravatar
gkuhl
User
Beiträge: 600
Registriert: Dienstag 25. November 2008, 18:03
Wohnort: Hong Kong

outoftune hat geschrieben:nein, die installierte python version ist 3.
Verstehe ich irgendwie nicht. Bei mir läuft der Code mit Python 3 ohne Probleme. Kriegst du irgendeine Fehlermeldung und/oder hast du nicht den ganzen Code gepostet?
outoftune
User
Beiträge: 8
Registriert: Samstag 1. Mai 2010, 18:45

ahh.. da kommen wir der Sache naeher. Das Problem scheint bei Eclipse zu liegen. In der Konsole laeufts bei mir naemlich auch...

ich melde mich wieder, sobald ich das ein wenig untersuchen konnte...
Aber warum Eclipse mit 2.x arbeiten sollte, wenn nur 3.x instaliert ist, ist mir schleierhaft.


Vielen Dank
BlackJack

@outoftune: Eclipse/pydev ist an der Stelle ein wenig kaputt -- da funktioniert `input()` nicht so wie es sollte. Das ist schon seit Ewigkeiten so und anscheinend wird das auch nicht behoben.
outoftune
User
Beiträge: 8
Registriert: Samstag 1. Mai 2010, 18:45

Danke fuer die Info. Gibt es einen gangbaren workaround, oder wie behelfen sich da andere Leute?!
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Sie verwenden entweder kein Python3.x, kein Eclipse, kein input in Eclipse (unwahrscheinlich) oder haben ein seperates Shell-Fenster offen.
BlackJack

@derdon: Das ist ein generelles Problem bei Eclipse und hat nichts mit der Python-Version zu tun.
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Achso, da habe ich wohl etwas falsch verstanden. Ein Fehler meinerseits, ich bitte um Verzeihung. :oops:
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

BlackJack hat geschrieben:@derdon: Das ist ein generelles Problem bei Eclipse und hat nichts mit der Python-Version zu tun.
Ich habe mir (unter OSX) Eclipse 3.6M7 und Pydev 1.5.6 installiert. Ich habe ein Python-Projekt mit Python 3.1 (Macports) als Interpreter angelegt und starte dieses Programm:

Code: Alles auswählen

print(input("'exit' eingeben:") == "exit")
Gebe ich "exit" ein, wird `True` ausgegeben.

Was funktioniert denn das nicht?

Stefan
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Unter Windows XP (32 Bit) funktioniert input mit
Python 3.1.1 (r311:74483, Aug 17 2009, 17:02:12) [MSC v.1500 32 bit (Intel)] on
win32
nicht!

Code: Alles auswählen

'exit' eingeben:exit
False
Alerdings hab ich den "Fehler" mit dem Code gefunden:

Code: Alles auswählen

i = input('exit: ')
print(type(i))
print(repr(i))
print(i == 'exit')
Ausgabe:

Code: Alles auswählen

exit: exit
<class 'str'>
'exit\r'
False
Wenn man sma's Code abändert zu:

Code: Alles auswählen

print(input("'exit' eingeben:") == "exit\r")
funktionierts

Edit:// Pydev Version: 1.5.1.1
the more they change the more they stay the same
BlackJack

@Dav1d: Ja aber dann funktioniert's nur in Eclipse und überall anders wahrscheinlich wieder nicht bzw. selbst in Eclipse bei sma nicht. In Eclipse/PyDev wird bei `raw_input()` bzw. `input()` bei Python 3.x unter bestimmten Konstellationen die Zeilenendemarkierung oder Teile davon mit geliefert. Unter Linux hatte ich das auch schon mal, dass das '\n' noch dran war.
Dav1d
User
Beiträge: 1437
Registriert: Donnerstag 30. Juli 2009, 12:03
Kontaktdaten:

Es war auch nur auf Eclipse bezogen ;)

Etwas, was überall funktioniert:

Code: Alles auswählen

input('Eingabe: ').rstrip()
the more they change the more they stay the same
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Wenn Eclipse unter Windows fälschlich ein `\r` mitschickt, sollte sich das doch wohl einfach korrigieren lassen. Meines Wissens ist der Teil, der die Konsole mit dem Interpreter verbindet, in Python geschrieben, habe jetzt aber keine Lust, mich durch den unübersichtlichen Quelltext von pydev zu graben.

Stefan
Antworten