Lesen von Zeichen von der Tastatur in eine while-Schleife

Den folgenden code-block:

ans = 'x'
while ans not in ['Y','y','N','n']:
    ans = input("Do Something? [y|n]:")
    print(ans in ['Y','y','N','n'])

erzeugt die folgende Ausgabe:

Do Something? [y|n]:Y
False
Do Something? [y|n]:y
False
Do Something? [y|n]:N
False
Do Something? [y|n]:n
False
Do Something? [y|n]:asdf
False
Do Something? [y|n]:Traceback (most recent call last):
  File "./NumberPatterns.py", line 27, in <module>
    ans = input("Do Something? [y|n]:")
KeyboardInterrupt

Will ich Lesen die Eingabe des Benutzers wiederholt, bis es ist 'Y','y','N','n'.
Aber die Schleife nie beendet. Es muss etwas sein, dass ich vermisst werde.
Bitte helfen Sie mir.

EDIT:

Dies ist das gleiche Ergebnis mit dem gleichen code, der bei Ausführung im Interaktiven Modus:
Version 3.2.0 auf einem Windows 7-Maschine.

C:\Users\jwalker>python
Python 3.2 (r32:88445, Feb 20 2011, 21:30:00) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> ans = 'x'
>>> while ans not in ['Y','y','N','n']:
...     ans = input("Do Something? :")
...     print(ans in ['Y','y','N','n'])
...     print(ans, type(ans), len(ans), ord(ans[0]), repr(ans))
...     print('Y', type('Y'), len('Y'), ord('Y'), repr('Y'))
...
Do Something? :asdf
False
 <class 'str'> 5 97 'asdf\r'
Y <class 'str'> 1 89 'Y'
Do Something? :Y
False
 <class 'str'> 2 89 'Y\r'
Y <class 'str'> 1 89 'Y'
Do Something? :n
False
 <class 'str'> 2 110 'n\r'
Y <class 'str'> 1 89 'Y'
Do Something? :Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
>>>
>>> ^Z
  • Das ist seltsam. Wenn ich input zu raw_input Portierung auf Python 2.6, es funktioniert gut für mich. Die einzige Vermutung die ich habe ist, dass input gibt einen anderen Typ. Was Drucke, wenn Sie diese in deine Schleife: print(type(ans), type('Y'))?
  • Ich bin damit einverstanden, aber ich Frage mich, was der Typ sein könnte. Kann nicht an nichts denken.
  • Könntest du bitte drucken Sie den Inhalt ans?
  • ich dachte, Python ist3 nicht Strippen \n , aber der doc sagt, es ist ausgezogen...
  • sehr komisch, wenn ich deinen code auf meine Python ist3 version, es funktioniert wie ein Charme ... Sie nicht, geben Sie "Y", wenn gefragt wird, was ?
  • -1 wegen fehlender follow-up von kafedakias.
  • könnten Sie print ans, print type(ans), print len(ans) etc? ich glaube nicht, jemand hat Ahnung noch. Im inneren Schleife, rechts, nachdem Sie bekam Eingabe von Benutzer.
  • Ich ausgeführt wird, den gleichen code im Interaktiven Modus mit dem gleichen Ergebnis. Und ich habe auch enthalten Informationen wie print(ans) , print(type(ans)).
  • Meine geänderte -1 bis +1.
  • Könnten Sie print(repr(ans))?
  • Hi Sebastian, ich aktualisierte den block von meinem loop, um weitere Informationen.
  • Ich bemerkte, dass ein CR-escape-Zeichen enthalten ist, in die variable ans hinzufügen 1 um die Länge. Und auch print(ans, nicht drucken wird der Inhalt der Variablen. Aber wenn ich print(ans) es tut. Über die ord und die repr ich gar nicht wissen, was Sie sind, für.

InformationsquelleAutor kafedakias | 2011-11-03
Schreibe einen Kommentar