2010-12-10 5 views
0

ich Python bin mit 2.6.6Python geben Option, wenn Benutzereingaben String

ich diesen Code haben:

height = 20 
width = 10 
x = input('Please insert a number between ' + str(width + 1) + ' and ' + str(height) + ': ') 
while x < (width + 1) or x > 20: 
    print 'That option is not valid' 
    x = input('Please insert a number between ' + str(width + 1) + ' and ' + str(height) + ': ') 

Wenn der Benutzer nur die Nummer eingibt, funktioniert alles in Ordnung, aber wenn der Benutzer macht Fehler und die Art, zum Beispiel q, es gibt:

NameError: name 'q' is not defined

ich möchte, wenn der Benutzer eine Zeichenfolge einfügt, dem Benutzer, die while-Schleife Kicks und geben: Diese Option ist nicht gültig .... Wie ca n löse ich dies, ohne raw_input zu verwenden, da Breite und Höhe ich als Zahlen behandeln möchte?

Grüße,

Favolas

EDIT Nach Daniel Vorschlag, ich habe meinen Code zu dieser Änderung:

height = 20 
width = 10 
x = raw_input('Please insert a number between ' + str(width + 1) + ' and ' + str(height) + ': ') 
x = int(x) 
while x < (width + 1) or x > 20: 
    print 'That option is not valid' 
    x = raw_input('Please insert a number between ' + str(width + 1) + ' and ' + str(height) + ': ') 
    x = int(x) 

Wenn der Benutzer nur int Code eingibt, wie geplant funktioniert, aber Es ist nicht sicher vor Benutzerfehlern. Wenn die Benutzer, einen Fehler machen und 'q' eingeben gibt es diesen Fehler:

ValueError: invalid literal for int() with base 10: 'q' 

Ich verstehe warum, aber wie löse ich das?

Grüße,

Favolas

Antwort

5

Sie Muss Verwendung raw_input statt input in Python 2.x. input setzt voraus, dass der Benutzer gültiges Python zur Auswertung eingibt. Am besten nehmen Sie die Zeichenfolgeneingabe und konvertieren sie dann nach Bedarf. In diesem Fall sollten Sie versuchen, mit int zu konvertieren.

Nur als Erinnerung, from the documentation:

input([prompt])

Equivalent to eval(raw_input(prompt)) .

Warning: This function is not safe from user errors! It expects a valid Python expression as input; if the input is not syntactically valid, a SyntaxError will be raised. Other exceptions may be raised if there is an error during evaluation. (On the other hand, sometimes this is exactly what you need when writing a quick script for expert use.)

+0

Hallo Daniel. Danke für deine Antwort. Folgte Ihrem Vorschlag, hat aber immer noch einige Probleme. Ich habe meine ursprüngliche Frage bearbeitet. Favolas – Favolas

+0

@Favolas, entfernen Sie 'x = int (x)' aus Ihrem Code. Es wird dann perfekt mit 'raw_input' funktionieren. – systemovich

+0

Hallo Geoffrey. Danke, aber wenn ich die beiden entferne x = int (x), wenn ich dies und 12 (seine gültige) einfügen, tritt es in die While-Schleife. Es löst das Problem, dass der Benutzer eine Zeichenfolge einfügt, aber auf der anderen Seite und es funktioniert nicht mehr mit dem int – Favolas

Verwandte Themen