web-dev-qa-db-fra.com

Python 2.7 obtenir les entrées de l'utilisateur et les manipuler sous forme de chaîne sans guillemets

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

137
Mike Lee

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.

253
Sven Marnach

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.

11
chuck

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.

9
Projesh Bhoumik

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.

5
Prav001
testVar = raw_input("Ask user for something.")
2
Artur Gaspar

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

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)
0
Mak