web-dev-qa-db-fra.com

Comment entrez-vous des entiers en utilisant l'entrée en Python

J'essaie de m'apprendre à coder en Python et c'est la première fois que je publie sur Stack Overflow, veuillez donc excuser les impropriétés commises dans ce message. Mais allons droit au but.

J'essaie d'utiliser la commande input pour renvoyer un entier. J'ai également effectué mes recherches. Voici ci-dessous mes multiples tentatives sous Python 3.4 et les résultats suivants:

Tentative n ° 1

guess_row = int(input("Guess Row: "))

Je récupère ce qui suit:

Traceback (most recent call last):
File "<input>", line 1, in <module> 
ValueError: invalid literal for int() with base 10: 'Guess Row: 2`

Tentative n ° 2

guess_row = float(input("Guess Row: "))

Je récupère ce qui suit: 

Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: could not convert string to float: "Guess Row: 2""

Tentative n ° 3

try:
    guess_row=int(input("Guess Row: "))
except ValueError:
    print("Not an integer")

Ici, je récupère ce qui suit:

Guess Row: 2
Not an integer

Bien que cela retourne quelque chose, je sais que c'est faux car, pour l'un, l'entrée retourne sous forme de chaîne et renvoie également la commande print.

En gros, j'ai essayé int, float et try, et jusqu'à présent rien n'a fonctionné. Aucune suggestion? Je veux juste pouvoir entrer un entier et le renvoyer comme un. 

4
The_Last_Halibut

Votre troisième tentative est correcte - mais que se passe-t-il avec guess_row avant/après ce code? Par exemple, considérons ce qui suit:

a = "Hello"
try:
    a = int(input("Enter a number: "))
except ValueError:
    print("Not an integer value...")
print(str(a))

Si vous entrez un nombre valide, la dernière ligne affichera la valeur que vous avez entrée. Sinon, une exception sera levée (affichant le message d'erreur dans le bloc except) et a demeurant inchangé, la dernière ligne affichera plutôt "Hello".

Vous pouvez préciser cela pour qu'un nombre non valide invite l'utilisateur à ressaisir la valeur:

a = None
while a is None:
    try:
        a = int(input("Enter a number: "))
    except ValueError:
        print("Not an integer value...")
print(str(a))
4
GoBusto

Pour illustrer les commentaires, depuis 3.4.2 Idle Shell sous Windows, programme d'installation de python.org (PSF)

>>> n = int(input('Guess1: '))
Guess1: 2
>>> n2 = float(input('Guess2: '))
Guess2: 3.1
>>> n, n2
(2, 3.1)

Quel système utilisez-vous et comment avez-vous installé Python?

2
Terry Jan Reedy

Cependant, j'ai remarqué quelque chose d'étrange. Le code fonctionne si je l'exécute en utilisant simplement l'exécution traditionnelle (c'est-à-dire le bouton vert) qui exécute l'intégralité du code, plutôt que d'essayer d'exécuter des lignes de code individuelles en appuyant sur F2. Est-ce que quelqu'un sait pourquoi cela peut être le cas?

Cela semble être un problème dans Eclipse, depuis PyDev FAQ :

Pourquoi raw_input ()/input () ne fonctionne pas correctement dans PyDev?

La console Eclipse n’est pas une copie exacte d’un shell. L’un des changements est que lorsque vous appuyez sur un shell, il peut vous donner un caractère\r,\n ou\r\n comme caractère de fin de ligne, selon sur votre plate-forme. Python ne s’y attend pas - dans la documentation, il dit qu’il supprimera le dernier\n (vérifié dans la version 2.4), mais, sur certaines plates-formes, il en restera un. Cela signifie que raw_input () doit généralement être utilisé comme raw_input (). Replace ('\ r', ''), et que input () doit être modifié pour: eval (raw_input (). Replace ('\ r', ' ')).

Voir également: PyDev 3.7.1 dans Eclipse 4 - input () ajoute une chaîne d'invite à la variable d'entrée? , Impossible de fournir une entrée utilisateur dans la console PyDev sur Eclipse avec Jython .

1
Martin Tournoij