2017-12-31 134 views
2

Ich habe ein Python 3-Programm geschrieben, das eine Tastatureingabe enthält, und ich wollte testen, was kommt, um sicherzustellen, dass es bestimmte Kriterien erfüllt, nämlich ein einzelnes Zeichen und nur a, b oder c . Da ich neu bei Python bin, habe ich hier Code von anderen Seiten zusammengeschustert, und es scheint zu funktionieren, aber ich bin mir nicht sicher, ob es Best Practice folgt (oder sogar die richtige Programmierung ist). Also alle Kommentare/Verbesserungen oder Alternativen sind sehr willkommen.Überprüfen der Tastatureingabe

chars = set('abc') 
trigger = 0 
while (trigger == 0): 
    answer = input(':') 
    if len(answer) != 1: 
     print ('Please enter only one character') 
    if any ((c in chars) for c in answer): 
     trigger = 1 
    else: 
     print ('please answer a,b or c') 
+2

Wenn dies ** Arbeitscode ** ist, von dem Sie glauben, dass er verbessert werden könnte, siehe [codereview.se]. Wenn Sie sich nicht sicher sind, löschen Sie die Frage und gehen Sie und ** testen Sie es **. Wenn Ihnen ein bestimmtes Problem bekannt ist, [bearbeiten] Sie ein [mcve]. Im Allgemeinen finden Sie unter https://stackoverflow.com/questions/23294658/asking-the-user-for-input-until-they-give-a-valid-response Anleitungen zur Validierung von Benutzereingaben. – jonrsharpe

+0

Vielen Dank, der Link, den Sie angegeben haben, brachte mich zu dem, wonach ich suchte, obwohl ich bei meinen Suchen nicht auf diese Seite gestoßen war. –

Antwort

2

Erstellen Sie eine Liste gültiger Eingaben, und verwenden Sie in zum Testen. Beispiel:

>>> rv = input() 
a 
>>> rv in ['a', 'b', 'c'] 
True 
>>> rv = input() 
test 
>>> rv in ['a', 'b', 'c'] 
False 
+0

Sie müssten auch 'len (rv) == 1 'für Multi-Char-Eingabe hinzufügen –

+0

@JoeIddon Das ist nicht notwendig. Wie Sie im zweiten Versuch sehen können, schlägt eine Zeichenfolge mit einer Länge> 1 fehl. Wenn Sie "aa" in ['a', 'b', 'c'] ausprobieren würden, würde es auch fehlschlagen. –

+0

Entschuldigung! Mein Fehler, ich nahm an, dass du den 'in'-Operator an einer 'string' verwendest. In diesem Fall müsstest du überprüfen, ob die Länge' 1' ist, mein Fehler! –