2015-09-03 9 views
3

Donc, j'ai récemment commencé à apprendre python et je suis dans la section raw_input().Python: Qu'est-ce que cela signifie dans la fonction raw_input?

Alors que j'essayais différentes choses, j'ai fait une erreur (du moins c'est ce que je pense pour le moment). Quelqu'un peut-il expliquer s'il vous plaît quelle est la différence entre les deux déclarations?

  1. var1 = int(raw_input())

  2. var1 = int((raw_input())

Je sais que le premier attend une entrée de l'utilisateur et l'affecte à la variable var1 mais, dans le second cas, cela est la sortie que je reçois.

>>> x = int((raw_input()) En appuyant sur Entrée, les ellipses sont affichées et attend une entrée utilisateur. Douze était mon entrée et ensuite j'obtiens l'erreur suivante.

File "<stdin>", line 2 12 ^ SyntaxError: invalid syntax

Je sais qu'il dit clairement qu'il est une erreur de syntaxe, mais il ne devrait pas accepter même la déclaration? Pourquoi attend-il une entrée en entrée?

Merci.

Python Version: 2.7 OS: Windows

Répondre

10

var1 = int((raw_input()) a trois parenthèses gauche et deux bonnes. Jusqu'à ce que vous remplissiez l'expression avec une autre parenthèse droite, Python pense que vous n'avez pas fini d'écrire l'expression. C'est pourquoi il montre une ellipse.

Lorsque vous tapez "12", l'expression complète devient var1 = int((raw_input())12, ce qui n'est pas une syntaxe valide car vous ne pouvez pas avoir un nombre immédiatement après une fermeture de paren.

+0

Wow, c'était rapide. Merci pour la réponse rapide. Compris maintenant. – DigvijaySingh

2

En développant la réponse de Kevin, voici pourquoi vous voudriez que Python se comporte comme ceci. Dans ce cas, il vous offre une erreur assez confuse, mais si vous avez fait quelque chose comme

>>> x = int((raw_input()) 
... + "123") 

alors il pourrait être analysé comme

>>> x = int((raw_input()) + "123") 

ou

>>> x = int(raw_input() + "123") 

qui serait expression valide. Cela devient utile lorsque vous voulez écrire des expressions très longues qui ne tiennent pas sur une ligne. Chaque fois que vous avez une parenthèse ouvrante supplémentaire, vous pouvez continuer l'expression sur une nouvelle ligne. Un cas que vous pourriez vouloir faire ceci est:

if (check_a_condition(a) and check_a_condition(b) or 
    check_a_condition(c) and check_a_condition(d)): 
    pass 
+0

Merci beaucoup d'avoir éclairci le sujet. Maintenant, cela devient plus clair pour moi. Juste une question, je suis loin de mon ordinateur portable maintenant, mais si j'ai exécuté la commande suivante 'x = int ((raw_input()) +" bonjour ")' et mon entrée était un entier ou une chaîne, il en résulterait une erreur non? Corrigez-moi si je me trompe. – DigvijaySingh

+0

Oui, ce n'est pas un bon exemple, '" 42hello "' ne sera jamais un entier valide. Je vais le changer. – porglezomp

+0

Génial. Merci encore. – DigvijaySingh