398 votes

Quelle est la différence entre `raw_input()` et `input()` en Python 3 ?

Quelle est la différence entre raw_input() et input() dans Python 3 ?

3 votes

Comment rendre compatible un programme qui prend en entrée à la fois Python 2 et Python 3 ?

2 votes

Pour ce faire, vous essayez de définir input à raw_input et ignore les erreurs de nom.

3 votes

Recherchez la bibliothèque 'six' pour la compatibilité avec python 2 et 3.

451voto

Sven Marnach Points 133943

La différence est que raw_input() n'existe pas dans Python 3.x, alors que input() fait. En fait, l'ancien raw_input() a été renommé en input() et l'ancien input() a disparu, mais peut facilement être simulé en utilisant eval(input()) . (Rappelez-vous que eval() est mauvais. Essayez d'utiliser des moyens plus sûrs pour analyser votre entrée si possible).

107 votes

"Quelle est la différence entre raw_input ... ?" - "La différence est qu'il n'y a pas raw_input ." ...Une différence assez drastique, je dirais !

10 votes

Dans Python 2, je suppose qu'ils ont supposé que les programmeurs voulaient effectivement "exécuter" comme une commande l'entrée de l'utilisateur, puisque initialement (je suppose) demander l'entrée de l'utilisateur pourrait être seulement pour cela. Mais lorsqu'ils ont réalisé que les programmeurs pouvaient également vouloir obtenir l'entrée "brute", ils ont conçu une autre fonction appelée "raw_input". Dans Python 3, ils ont remarqué que c'était stupide et ont simplement supprimé l'exécution du défaut d'entrée original, ce qui a donné une seule fonction simple.

1 votes

Repl.it, qui fonctionne avec Py3.5.1 a raw_input() comme mot-clé.

198voto

Thomas K Points 16753

En Python 2 , raw_input() renvoie une chaîne de caractères, et input() essaie d'exécuter l'entrée comme une expression Python.

Puisque l'obtention d'une chaîne de caractères est presque toujours ce que vous voulez, Python 3 le fait avec input() . Comme le dit Sven, si vous voulez l'ancien comportement, eval(input()) travaux.

8 votes

Vous devriez ajouter que Python 3 ne dispose pas de raw_input() .

0 votes

Quelle est l'utilité de l'entrée d'exécution en tant qu'expression python ?

1 votes

@AkshayVijayJain, il était probablement destiné à la saisie de chiffres. Mais c'est totalement dangereux.

125voto

Eyesno Points 366

Python 2 :

  • raw_input() prend exactement ce que l'utilisateur a tapé et le renvoie sous forme de chaîne.

  • input() prend d'abord le raw_input() puis effectue un eval() sur elle aussi.

La principale différence est que input() s'attend à une déclaration python syntaxiquement correcte où raw_input() ne le fait pas.

Python 3 :

  • raw_input() a été renommé en input() alors maintenant input() renvoie la chaîne exacte.
  • Vieux input() a été supprimé.

Si vous voulez utiliser l'ancien input() Si vous avez besoin d'évaluer une entrée utilisateur en tant qu'instruction python, vous devez le faire manuellement à l'aide de la commande eval(input()) .

31voto

Harsha Vardhan Points 631

Dans Python 3, raw_input() n'existe pas, ce qui a déjà été mentionné par Sven.

Dans Python 2, la fonction input() évalue votre entrée.

Exemple :

name = input("what is your name ?")
what is your name ?harsha

Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    name = input("what is your name ?")
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

Dans l'exemple ci-dessus, Python 2.x essaie d'évaluer harsha comme une variable plutôt que comme une chaîne de caractères. Pour éviter cela, nous pouvons utiliser des guillemets doubles autour de notre entrée comme "harsha" :

>>> name = input("what is your name?")
what is your name?"harsha"
>>> print(name)
harsha

raw_input()

La fonction raw_input()` n'évalue pas, elle va juste lire ce que vous avez entré.

Exemple :

name = raw_input("what is your name ?")
what is your name ?harsha
>>> name
'harsha'

Exemple :

 name = eval(raw_input("what is your name?"))
what is your name?harsha

Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    name = eval(raw_input("what is your name?"))
  File "<string>", line 1, in <module>
NameError: name 'harsha' is not defined

Dans l'exemple ci-dessus, j'essayais simplement d'évaluer l'entrée de l'utilisateur avec la fonction eval fonction.

8voto

Rubal Points 846

J'aimerais ajouter un peu plus de détails à l'explication fournie par tout le monde pour la utilisateurs de python 2 . raw_input() qui, comme vous le savez maintenant, évalue toutes les données que l'utilisateur saisit sous forme de chaîne. Cela signifie que python n'essaie même pas de comprendre à nouveau les données saisies. Tout ce qu'il considère, c'est que les données saisies sont des chaînes de caractères, qu'il s'agisse ou non d'une chaîne de caractères réelle, d'un nombre entier ou de quoi que ce soit d'autre.

Alors que input() d'autre part, essaie de comprendre les données saisies par l'utilisateur. Ainsi, l'entrée comme helloworld afficherait même l'erreur comme ' helloworld is undefined '.

En conclusion, pour python 2 pour entrer une chaîne de caractères, vous devez aussi l'entrer comme ''. helloworld ' qui est la structure commune utilisée en python pour utiliser les chaînes de caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X