Seite 1 von 1

aus while Schleife mit str user input aussteigen

Verfasst: Samstag 1. Mai 2010, 18:54
von outoftune
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")

Verfasst: Samstag 1. Mai 2010, 19:01
von Dauerbaustelle
Niemals `input` benutzen, es gibt `raw_input`.

Verfasst: Samstag 1. Mai 2010, 19:06
von outoftune
oh mist, ich haette dazu sagen sollen das ich mit Python3.x unterwegs bin.

raw_input scheint es da nicht mehr zu geben...

Verfasst: Samstag 1. Mai 2010, 19:07
von gkuhl
Du lernst nicht zufällig mit einem Tutorial für Python der Version 3.x, benutzt als Interpreter aber Python 2.x?

Verfasst: Samstag 1. Mai 2010, 19:16
von outoftune
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 :(

Verfasst: Samstag 1. Mai 2010, 19:18
von derdon
Benutze zum "Aussteigen" aus einer Schleife das Statement ``break``. Außerdem empfiehlt es sich, PEP8-konforme Namen zu verwenden (also ``user_input`` statt ``userInput``).

Verfasst: Samstag 1. Mai 2010, 19:22
von gkuhl
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?

Verfasst: Samstag 1. Mai 2010, 20:02
von outoftune
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

Verfasst: Samstag 1. Mai 2010, 20:12
von 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.

Verfasst: Samstag 1. Mai 2010, 21:57
von outoftune
Danke fuer die Info. Gibt es einen gangbaren workaround, oder wie behelfen sich da andere Leute?!

Verfasst: Samstag 1. Mai 2010, 22:02
von derdon
Sie verwenden entweder kein Python3.x, kein Eclipse, kein input in Eclipse (unwahrscheinlich) oder haben ein seperates Shell-Fenster offen.

Verfasst: Samstag 1. Mai 2010, 22:45
von BlackJack
@derdon: Das ist ein generelles Problem bei Eclipse und hat nichts mit der Python-Version zu tun.

Verfasst: Samstag 1. Mai 2010, 23:08
von derdon
Achso, da habe ich wohl etwas falsch verstanden. Ein Fehler meinerseits, ich bitte um Verzeihung. :oops:

Verfasst: Sonntag 2. Mai 2010, 10:48
von sma
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

Verfasst: Sonntag 2. Mai 2010, 11:04
von Dav1d
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

Verfasst: Sonntag 2. Mai 2010, 11:58
von 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.

Verfasst: Sonntag 2. Mai 2010, 12:23
von Dav1d
Es war auch nur auf Eclipse bezogen ;)

Etwas, was überall funktioniert:

Code: Alles auswählen

input('Eingabe: ').rstrip()

Verfasst: Mittwoch 5. Mai 2010, 08:53
von sma
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