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.