Je veux obtenir une chaîne d'un utilisateur, puis la manipuler.
testVar = input("Ask user for something.")
Existe-t-il un moyen pour que testVar soit une chaîne sans que l'utilisateur ne tape sa réponse entre guillemets? i.e. "Bonjour" vs Bonjour
Si l'utilisateur tape Bonjour, j'obtiens le message d'erreur suivant:
NameError: le nom 'Hello' n'est pas défini
Utilisez raw_input()
au lieu de input()
:
testVar = raw_input("Ask user for something.")
input()
évalue l'entrée en tant que code Python. Je suggère de ne jamais l'utiliser. raw_input()
renvoie la chaîne textuelle saisie par l'utilisateur.
La fonction input
évaluera également les données lues sous forme de code python, ce qui n'est pas vraiment ce que vous voulez.
L'approche générique consisterait à traiter l'entrée utilisateur (de sys.stdin
) comme n'importe quel autre fichier. Essayer
import sys
sys.stdin.readline()
Si vous voulez faire court, vous pouvez utiliser raw_input
qui est identique à input
mais en omettant l'évaluation.
Nous pouvons utiliser la fonction raw_input()
dans Python 2 et la fonction input()
dans Python 3. Par défaut, la fonction d'entrée prend une entrée au format chaîne. Pour les autres types de données, vous devez convertir l'entrée utilisateur.
Dans Python 2, nous utilisons la fonction raw_input()
. Il attend que l'utilisateur tape une entrée et appuie sur return
et nous devons stocker la valeur dans une variable en définissant le type de données souhaité. Soyez prudent lorsque vous utilisez le transtypage
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
Dans Python 3, nous utilisons la fonction input () qui renvoie une valeur d'entrée utilisateur.
x = input("Enter a number: ") #String input
Si vous entrez une chaîne, int, float, eval, cela prendra comme entrée de chaîne
x = int(input("Enter a number: ")) #integer input
Si vous entrez une chaîne pour la conversion int ValueError: invalid literal for int() with base 10:
x = float(input("Enter a float number: ")) #float input
Si vous entrez une chaîne pour la conversion flottante ValueError: could not convert string to float
x = eval(input("Enter a float number: ")) #eval input
Si vous entrez une chaîne pour la diffusion eval NameError: name ' ' is not defined
, ces erreurs s'appliquent également à Python 2.
Si vous voulez utiliser input au lieu de raw_input dans python 2.x, cette astuce vous sera utile.
if hasattr(__builtins__, 'raw_input'):
input=raw_input
Après quoi,
testVar = input("Ask user for something.")
fonctionnera très bien.
testVar = raw_input("Ask user for something.")
Mon code de travail avec des correctifs:
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!")
Ceci est mon travail pour échouer en toute sécurité au cas où j'aurais besoin de passer à python 3 à l'avenir.
def _input(msg):
return raw_input(msg)