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
TLDR
input
, mais la fonction input
de Python 2 le fait (lisez la section suivante pour comprendre l'implication).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 int
s, 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 :)
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.
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())
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.
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))
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"))
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())
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"))
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: "))
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
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.
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
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.
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
).
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
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 `
analyser l'entrée dans un entier avec int
x = int(input("What is x?"))
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.