web-dev-qa-db-fra.com

Comment puis-je lire les entrées sous forme de nombres?

Pourquoi les chaînes x et y au lieu de ints dans le code ci-dessous? Tout sur le Web dit d'utiliser raw_input(), mais j'ai lu sur Stack Overflow (sur un thread qui ne traitait pas l'entrée entière) que raw_input() a été renommé input() dans Python 3.x.

play = True

while play:

    x = input("Enter a number: ")
    y = input("Enter a number: ")

    print(x + y)
    print(x - y)
    print(x * y)
    print(x / y)
    print(x % y)

    if input("Play again? ") == "no":
        play = False
241
Hosch250

TLDR

  • Python 3 n'évalue pas les données reçues avec la fonction input, mais la fonction input de Python 2 le fait (lisez la section suivante pour comprendre l'implication).
  • L'équivalent de Python 2 dans la variable input de Python 3 est la fonction raw_input.

Python 2.x

Il y avait deux fonctions pour obtenir une entrée utilisateur, appelées input et raw_input . La différence entre eux est que raw_input n'évalue pas les données et renvoie tel quel, sous forme de chaîne. Mais input évaluera tout ce que vous avez entré et le résultat de l’évaluation sera renvoyé. Par exemple,

>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

La donnée 5 + 17 est évaluée et le résultat est 22. Lorsqu'il évalue l'expression 5 + 17, il détecte que vous ajoutez deux nombres et le résultat sera donc du même type int. Ainsi, la conversion de type est effectuée gratuitement et 22 est renvoyé à la suite de input et stocké dans la variable data. Vous pouvez penser à input en tant que raw_input composé avec un eval call.

>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

Remarque: vous devez faire attention lorsque vous utilisez input dans Python 2.x. J'ai expliqué pourquoi il faut être prudent lors de son utilisation, dans cette réponse .

Cependant, raw_input n'évalue pas l'entrée et renvoie tel quel, sous forme de chaîne.

>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)

Python 3.x

Python 3.x input et le raw_input de Python 2.x sont similaires et raw_input n'est pas disponible dans Python 3.x. 

>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <class 'str'>)

Solution

Pour répondre à votre question, étant donné que Python 3.x n'évalue pas et ne convertit pas le type de données, vous devez explicitement convertir en ints, avec int , comme ceci

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Vous pouvez accepter les numéros de n'importe quelle base et les convertir directement en base 10 avec la fonction int, comme ceci

>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365

Le second paramètre indique quelle est la base des nombres entrés, puis le comprend et le convertit en interne. Si les données saisies sont incorrectes, la variable ValueError sera lancée.

>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'

Pour les valeurs pouvant avoir un composant fractionnaire, le type serait float plutôt que int:

x = float(input("Enter a number:"))

En dehors de cela, votre programme peut être légèrement modifié, comme ceci

while True:
    ...
    ...
    if input("Play again? ") == "no":
        break

Vous pouvez vous débarrasser de la variable play en utilisant break et while True

PS: Python n'attend pas ; à la fin de la ligne :)

260
thefourtheye

Dans Python 3.x, raw_input a été renommé en input et le Python 2.x input a été supprimé. 

Cela signifie que, tout comme raw_input, input dans Python 3.x renvoie toujours un objet chaîne.

Pour résoudre le problème, vous devez explicitement transformer ces entrées en entiers en les plaçant dans int :

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

De plus, Python n’a pas besoin/n’utilise pas de points-virgules pour terminer les lignes. Donc, les avoir ne fait rien de positif.

38
iCodez

Pour plusieurs nombres entiers sur une seule ligne, map pourrait être meilleur.

arr = map(int, raw_input().split())

Si le nombre est déjà connu (comme 2 entiers), vous pouvez utiliser

num1, num2 = map(int, raw_input().split())
22
user1341043

input() (Python 3) et raw_input() (Python 2) toujours retourne des chaînes. Convertissez le résultat en entier explicitement avec int().

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Conseil pro: les points-virgules ne sont pas nécessaires en Python.

13
Martijn Pieters

Plusieurs questions nécessitent une entrée pour plusieurs nombres entiers sur une seule ligne. Le meilleur moyen est de saisir toute la chaîne de nombres sur une ligne, puis de les diviser en entiers.

 p=raw_input()
    p=p.split()      
    for i in p:
        a.append(int(i))
9
gumboy

Convertir en nombres entiers:

my_number = int(input("enter the number"))

De même pour les nombres à virgule flottante:

my_decimalnumber = float(input("enter the number"))
6
Hemanth Savasere

Prenant int comme entrée en python: Nous prenons une simple chaîne d'entrée en utilisant

input()

maintenant, nous voulons int en tant qu'entrée.so nous transtypons cette chaîne en int. en utilisant simplement:

int(input())
6
Rohit-Pandey

En Python 3.x. Par défaut, la fonction d’entrée prend les entrées au format chaîne. Pour le convertir en entier, vous devez inclure int (input ())

x=int(input("Enter the number"))
5

Python 3.x a la fonction input() qui retourne toujours string.Ainsi, vous devez convertir en int

python 3.x

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

python 2.x

En python 2.x, les fonctions raw_input() et input() renvoient toujours chaîne, vous devez donc les convertir en int.

x = int(raw_input("Enter a number: "))
y = int(input("Enter a number: "))
5
Harun ERGUL
def dbz():
    try:
        r = raw_input("Enter number:")
        if r.isdigit():
            i = int(raw_input("Enter divident:"))
            d = int(r)/i
            print "O/p is -:",d
        else:
            print "Not a number"
    except Exception ,e:
        print "Program halted incorrect data entered",type(e)
dbz()

Or 

num = input("Enter Number:")#"input" will accept only numbers
3
Sanyal

J'ai rencontré un problème de saisie d'un entier en résolvant un problème sur CodeChef , où deux entiers - séparés par un espace - doivent être lus à partir d'une ligne.

Alors que int(input()) est suffisant pour un seul entier, je n'ai pas trouvé de moyen direct de saisir deux entiers. J'ai essayé ceci:

num = input()
num1 = 0
num2 = 0

for i in range(len(num)):
    if num[i] == ' ':
        break

num1 = int(num[:i])
num2 = int(num[i+1:])

Maintenant, j'utilise num1 et num2 en tant qu'entiers. J'espère que cela t'aides.

3
Aravind
play = True

while play:

    #you can simply contain the input function inside an int function i.e int(input(""))
    #This will only accept int inputs
    # and can also convert any variable to 'int' form

    x = int(input("Enter a number: "))    
    y = int(input("Enter a number: "))

    print(x + y)
    print(x - y)
    print(x * y)
    print(x / y)
    print(x % y)

    if input("Play again? ") == "no":
        play = False
2
uday more
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

la boucle for doit courir 'n' nombre de fois. le second 'n' est la longueur du tableau . la dernière instruction mappe les entiers à une liste et prend les entrées sous forme séparée par des espaces . vous pouvez également renvoyer le tableau à la fin de la boucle for.

2
ravi tanwar

Alors que dans votre exemple, int(input(...)) fait toujours l'affaire, python-future 's builtins.input vaut la peine d'être pris en compte, car cela garantit que votre code fonctionne pour Python 2 et 3 et désactive le comportement par défaut de input de Python2 " "malin" sur le type de données en entrée (builtins.input se comporte fondamentalement comme raw_input).

2
Tobias Kienzler
play = True

while play:

x = input("Enter a number: ")
y = input("Enter a number: ")

    print(int(x) + int(y))
    print(int(x) - int(y))
    print(int(x) * int(y))
    print(int(x) / int(y))
    print(int(x) % int(y))

    if input("Play again? ") == "no":
        play = False

cela fait savoir que les variables 'x' et 'y' sont des entiers et les utilise donc comme des entiers, si vous voulez pouvoir utiliser les décimales, changez 'int' en 'float'.

la sortie pour la première fonction 

print(int(x) + int(y))

la sortie où x est 3 et y est 7 est 10

0
Gregg Morgan

Dans le cas de données d'entrée, il s'agit toujours d'une chaîne. Vous devez donc le convertir explicitement en int. Votre code devrait être comme ci-dessous:

play = True

while play:

  x = (input("Enter a number: ")
  y = input("Enter a number: ")

  print(int(x) + int(y))
  print(int(x) - int(y))
  print(int(x) * int(y))
  print(int(x) / int(y))
  print(int(x) % int(y))

  if input("Play again? ") == "no":
    play = False `
0
Tarun Singhal

analyser l'entrée dans un entier avec int

x = int(input("What is x?"))
0
Ewanziak

Beaucoup de gens aiment faire int(input("etc")), mais si vous mettez une chaîne, cela provoquera une erreur.

Ce que j'aime faire, c'est ceci:

s = input("integer: ")
integer = int(s)

Maintenant, utilisez un entier pour quelque fin que ce soit !!

De plus, si s est une chaîne, cela ne génère pas d'erreur !!!

Du moins pas tout de suite.

0
user11093202