2011-02-10 20 views

Respuesta

188

Uso raw_input() en lugar de input():

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

input() realidad evalúa la entrada como código Python. Sugiero que nunca lo use. raw_input() devuelve la cadena verbatim ingresada por el usuario.

+77

Aunque para cualquiera que lea esto utilizando Python ** 3 **, 'input' ahora funciona de esta manera, y raw_input se ha ido. –

+2

¿En qué situación le gustaría que el usuario inserte el código python en su propio código? – JFA

+0

@JFA: No creo que 'input()' sea una función útil, y no recomiendo usarlo. –

8

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

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

import sys 
sys.stdin.readline() 

Si quieres que sea breve, puede utilizar raw_input que es el mismo que input pero omite la evaluación.

+1

también, si está escribiendo un programa interactivo, considere importar 'readline' - esto le dará características similares a bash (historial de la caja, autocompletar requerirá algo de trabajo de campo) –

+0

¡Bien hecho! He usado la misma función durante años y siempre funcionó bien. –

2
testVar = raw_input("Ask user for something.") 
-4

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

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

Funcionará bien.

+3

Python 3.x 'input' es equivalente a Python 2.x' raw_input' (ver https://docs.python.org/3.0/whatsnew/3.0.html#builtins); este es un problema específico de 2.x. – jonrsharpe

4

Si desea utilizar la entrada en lugar de raw_input en Python 2.x, entonces este truco vendrá a mano

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

Después de lo cual,

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

funcionará bien.

0

código Mi trabajo con correcciones:

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!") 
0

Este es mi trabajo en torno a prueba de fallos en caso de que si voy a tener que pasar a Python 3 en el futuro.

def _input(msg): 
    return raw_input(msg) 
2

podemos utilizar la función raw_inpu() en Python 2 y la función de entrada() en Python 3 Por defecto, la función de entrada de toma de entrada como formato de cadena

para otros tipo de datos que tiene que emitir el usuario entrada

En Python 2 utilizamos la función raw_input(). Espera a que el usuario escriba algo de entrada y presiona return y necesitamos almacenar el valor en una variable al convertir nuestro tipo de datos deseado.Tenga cuidado al usar el tipo de colada

x = raw_input ("Introduzca un número: ") #String entrada

x = int (raw_input (" Introduzca un número:")) de entrada #integer

x = flotador (raw_input ("Introduzca un número de flotador: ")) #float entrada

x = eval (raw_input (" Introduzca un número de flotador:")) de entrada #eval

En Python 3 utilizamos entrada () función que devuelve un valor de entrada de usuario

x = input ("Ingrese un número: ") #String entrada

si escribe una cadena, int, float, eval tomará como entrada de cadena

x = int (entrada (" Introduzca una número: ")) de entrada #integer si se introduce una cadena para int fundido ValueError: inválido literal para int() con la base 10:

x = flotación (entrada (" Introduzca un número flotante: ")) #float input si ingresa una cadena para fundir el valor ValueError: no se pudo convertir la cadena al valor flotante

x = eval (entrada ("Introduzca un número flotante:")) de entrada #eval si se introduce una cadena para NameError fundido eval: nombre de '' no está definido Los errores también se aplica para el pitón 2

Cuestiones relacionadas