La entrada de Python () no funciona como se esperaba

Soy un novato de python. Me estoy familiarizando con los bucles y probé este ejemplo de un libro.

while True: s = input('Enter something : ') if s == 'quit': break print('Length of the string is', len(s)) print('Done') 

Sin embargo, la salida es la siguiente

 Enter something : ljsdf Traceback (most recent call last): File "trial_2.py", line 2, in  s = input('Enter something : ') File "", line 1, in  NameError: name 'ljsdf' is not defined 

raw_input() usar raw_input() lugar (Python 2.x), porque input() es equivalente a eval(raw_input()) , por lo que analiza y evalúa su entrada como una expresión de Python válida.

 while True: s = raw_input('Enter something : ') if s == 'quit': break print('Length of the string is', len(s)) print('Done') 

Nota:

input() no detecta los errores del usuario (por ejemplo, si el usuario ingresa alguna expresión de Python no válida). raw_input() puede hacer esto, porque convierte la entrada en una string . Para más información, lea los documentos de Python .

quieres raw_input() en python2

 while True: s = raw_input('Enter something : ') if s == 'quit': break print 'Length of the string is', len(s) print 'Done' 

input() trata de evaluar (¡peligrosamente!) lo que le das

Tu código funcionará bien en Python 3.x

Pero si está usando python 2, tendrá que ingresar una cadena usando raw_input ()

 while True: s = raw_input('Enter something : ') if s == 'quit': break print('Length of the string is', len(s)) print('Done') 

Parece que estás usando Python 2.x, mientras que se espera que el código se ejecute en Python 3.x.

input en Python 2.x evalúa la cadena de input diferencia de la input en Python 3.x.

En Python 2.x, input() está diseñado para devolver números, int o float dependiendo de la entrada del usuario, también puede ingresar nombres de variables.

necesitas usar:

 raw_input('Enter something: ') 

El error se debe a que Python cree que “ljsdf” es el nombre de una variable, y es por eso que genera esta excepción:

NameError: name 'ljsdf' is not defined

porque “ljsdf” no se define como una variable. :RE

raw_input() es más seguro de usar y luego convierte la entrada a cualquier otro tipo después de: D