Python 2.7 obtiene la entrada del usuario y la manipulación como una cadena sin comillas

Quiero obtener una cadena de un usuario y luego manipularla.

testVar = input("Ask user for something.") 

¿Hay alguna forma de que testVar sea una cadena sin que el usuario escriba su respuesta entre comillas? es decir “hola” vs. hola

Si el usuario escribe Hello, aparece el siguiente error:

NameError: el nombre ‘Hello’ no está definido

Use raw_input() lugar de input() :

 testVar = raw_input("Ask user for something.") 

input() realidad evalúa la entrada como código Python. Sugiero no usarlo nunca. raw_input() devuelve la cadena textual introducida por el usuario.

La input función también evaluará los datos que acaba de leer como código de Python, que no es realmente lo que quieres.

El enfoque genérico sería tratar la entrada del usuario (de sys.stdin ) como cualquier otro archivo. Tratar

 import sys sys.stdin.readline() 

Si desea que sea breve, puede usar raw_input que es lo mismo que la input pero omite la evaluación.

Podemos usar la función raw_input() en Python 2 y la función input() en Python 3. Por defecto, la función de entrada toma una entrada en formato de cadena. Para otro tipo de datos tienes que emitir la entrada del usuario.

En Python 2 usamos la función raw_input() . Espera a que el usuario escriba alguna entrada y presione return y necesitamos almacenar el valor en una variable convirtiéndolo como nuestro tipo de datos deseado. Tenga cuidado al utilizar el tipo de fundición

 x = raw_input("Enter a number: ") #String input x = int(raw_input("Enter a number: ")) #integer input x = float(raw_input("Enter a float number: ")) #float input x = eval(raw_input("Enter a float number: ")) #eval input 

En Python 3 usamos la función input () que devuelve un valor de entrada del usuario.

 x = input("Enter a number: ") #String input 

Si ingresa una cadena, int, float, eval, tomará como entrada de cadena

 x = int(input("Enter a number: ")) #integer input 

Si ingresa una cadena para int cast ValueError: invalid literal for int() with base 10:

 x = float(input("Enter a float number: ")) #float input 

Si ingresa una cadena para float cast ValueError: could not convert string to float

 x = eval(input("Enter a float number: ")) #eval input 

Si ingresa una cadena para eval cast NameError: name ' ' is not defined Esos errores también son aplicables para Python 2.

Si desea utilizar input en lugar de raw_input en python 2.x, este truco le resultará útil.

  if hasattr(__builtins__, 'raw_input'): input=raw_input 

Después de lo cual,

 testVar = input("Ask user for something.") 

funcionará bien

 testVar = raw_input("Ask user for something.") 

Mi código de trabajo con arreglos:

 import random import math print "Welcome to Sam's Math Test" num1= random.randint(1, 10) num2= random.randint(1, 10) num3= random.randint(1, 10) list=[num1, num2, num3] maxNum= max(list) minNum= min(list) sqrtOne= math.sqrt(num1) correct= False while(correct == False): guess1= input("Which number is the highest? "+ str(list) + ": ") if maxNum == guess1: print("Correct!") correct = True else: print("Incorrect, try again") correct= False while(correct == False): guess2= input("Which number is the lowest? " + str(list) +": ") if minNum == guess2: print("Correct!") correct = True else: print("Incorrect, try again") correct= False while(correct == False): guess3= raw_input("Is the square root of " + str(num1) + " greater than or equal to 2? (y/n): ") if sqrtOne >= 2.0 and str(guess3) == "y": print("Correct!") correct = True elif sqrtOne < 2.0 and str(guess3) == "n": print("Correct!") correct = True else: print("Incorrect, try again") print("Thanks for playing!") 

Este es mi trabajo para fallar a salvo en caso de que necesite moverme a Python 3 en el futuro.

 def _input(msg): return raw_input(msg) 

El problema parece estar resuelto en Python versión 3.4.2.

 testVar = input("Ask user for something.") 

Funcionará bien.