/ / Comment puis-je lire les entrées sous forme d'entiers? - python, python-2.7, python-3.x, int

Comment puis-je lire les entrées sous forme d'entiers? - python, python-2.7, python-3.x, int

Pourquoi ce code ne pas entrer des entiers? 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é en input() en 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

Réponses:

202 pour la réponse № 1

Python 2.x

Il y avait deux fonctions pour obtenir une entrée utilisateur, appelée input et raw_input. La différence entre eux est, raw_input doesn "t évaluer 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">)

Les données 5 + 17 est évalué et le résultat est 22. Quand il évalue l'expression 5 + 17, il détecte que vous ajoutez deux nombres et le résultat sera donc identique. int type. Ainsi, la conversion de type est faite gratuitement et 22 est renvoyé à la suite de input et stocké dans data variable. Vous pouvez penser à input comme le raw_input composé avec un eval appel.

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

Remarque: vous devriez faire attention lorsque vous utilisez input en Python 2.x. J'ai expliqué pourquoi il faut faire attention en l'utilisant, en cette réponse.

Mais, raw_input n’évalue pas l’entrée et retourne 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 "s input et Python 2.x "s raw_input 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, Python 3.x n’évaluant pas et ne convertissant pas le type de données, vous devez convertir explicitement en ints, avec int, comme ça

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

Vous pouvez accepter les numéros de toutes les bases et les convertir directement en base 10 avec le int fonction, comme ça

>>> 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 erronées, cela jettera un ValueError.

>>> 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"

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 du play variable en utilisant break et while True.

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


28 pour la réponse № 2

En Python 3.x, raw_input a été renommé en input et le Python 2.x input a été éliminé.

Cela signifie que, tout comme raw_input, input en 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 mettant 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.


18 pour la réponse № 3

Pour plusieurs entiers sur une seule ligne, carte pourrait être mieux.

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())

13 pour la réponse № 4

input() (Python 3) et raw_input() (Python 2) toujours retourne des chaînes. Convertir 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.


8 pour la réponse № 5

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))

4 pour la réponse № 6

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"))

4 pour la réponse № 7

Prenant int comme entrée en python: nous prenons une chaîne simple 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())

3 pour la réponse № 8

Python 3.x a input() fonction 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 raw_input() et input() les fonctions retournent toujours une chaîne, vous devez donc les convertir également en int.

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

3 pour la réponse № 9

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"))

2 pour la réponse № 10

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 sur une seule ligne.

Tandis que int(input()) suffit 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.


2 pour la réponse № 11
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

2 pour la réponse № 12

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


1 pour la réponse № 13

Par défaut, la fonction d’entrée prend l’entrée sous forme de chaîne

pour les autres types de données, vous devez convertir l'entrée utilisateur

En Python 2, nous utilisons entrée brute() une fonction. il attend que l'utilisateur saisisse une entrée, appuie sur la touche Entrée et nous devons stocker la valeur dans une variable en définissant le type de données souhaité. Soyez prudent lorsque vous utilisez le transtypage

x = raw_input("Enter a number: ") #String input
x = int(raw_input("Enter a number: ")) #integer input
x = float(raw_input("Enter a float number: ")) #float input
x = eval(raw_input("Enter a float number: ")) #eval input

En Python 3, nous utilisons contribution() fonction qui retourne une valeur d'entrée utilisateur

x = input("Enter a number: ") #String input

si vous entrez une chaîne, int, float, eval, cela prendra comme entrée de chaîne

x = int(input("Enter a number: ")) #integer input

Si vous entrez une chaîne pour la conversion int, ValueError: Littéral non valide pour int () avec base 10:

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

si vous entrez une chaîne pour la conversion flottante, ValueError: impossible de convertir une chaîne en float

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

si vous entrez une chaîne pour la diffusion eval

NameError: name "" n'est pas défini

Ces erreurs s'appliquent également à Python 2


0 pour la réponse № 14

Oui, en python 3.x, raw_input est remplacé par input. Pour revenir à l'ancien comportement de input utilisation:

eval(input("Enter a number: "))

Cela fera savoir à python que l'entrée entrée est un entier


0 pour la réponse № 15
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.