Pourquoi x
et les y
chaînes au lieu des entiers dans le code ci-dessous?
(Note: l'utilisation de Python 2.x raw_input()
. En Python 3.x utilisation input()
. raw_input()
A été renommé 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:
TLDR
input
fonction, mais lainput
fonction de Python 2 le fait (lisez la section suivante pour comprendre l'implication).input
est laraw_input
fonction.Python 2.x
Il y avait deux fonctions pour obtenir une entrée utilisateur, appelées
input
etraw_input
. La différence entre eux est,raw_input
n'évalue pas les données et retourne tel quel, sous forme de chaîne. Mais,input
évaluera tout ce que vous avez entré et le résultat de l'évaluation sera retourné. Par exemple,Les données
5 + 17
sont évaluées et le résultat est22
. Lorsqu'il évalue l'expression5 + 17
, il détecte que vous ajoutez deux nombres et donc le résultat sera également du mêmeint
type. Ainsi, la conversion de type est effectuée gratuitement et22
est retournée comme résultat deinput
et stockée dans unedata
variable. Vous pouvez penserinput
commeraw_input
composé avec uneval
appel.Remarque: vous devez être prudent lorsque vous utilisez
input
en Python 2.x. J'ai expliqué pourquoi il fallait être prudent lors de son utilisation, dans cette réponse .Mais,
raw_input
n'évalue pas l'entrée et retourne telle quelle, sous forme de chaîne.Python 3.x
Python 3.x
input
et Python 2.xraw_input
sont similaires etraw_input
ne sont pas disponibles dans Python 3.x.Solution
Pour répondre à votre question, puisque Python 3.x n'évalue pas et ne convertit pas le type de données, vous devez convertir explicitement en
int
s, avecint
, comme ceciVous pouvez accepter des nombres de n'importe quelle base et les convertir directement en base-10 avec la
int
fonction, comme ceciLe deuxième paramètre indique quelle est la base des nombres entrés, puis en interne il le comprend et le convertit. Si les données saisies sont incorrectes, elles lanceront a
ValueError
.Pour les valeurs qui peuvent avoir une composante fractionnaire, le type serait
float
plutôt queint
:En dehors de cela, votre programme peut être légèrement modifié, comme ceci
Vous pouvez vous débarrasser de la
play
variable en utilisantbreak
etwhile True
.la source
eval
fonctionnerait, mais n'y allez pas sauf si vous avez des raisons pressantes.ast.literal_eval
pour cela. Il n'a pas les problèmes de sécurité deeval
.int(input()
à- dire ... en haut? Python 2 approche de la fin de sa vie et les informations sur python 3 sont trop enterrées IMODans Python 3.x, a
raw_input
été renomméinput
et Python 2.x ainput
été supprimé.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 nombres entiers en les mettant
int
:la source
Pour plusieurs nombres entiers sur une seule ligne, cela
map
pourrait être mieux.Si le nombre est déjà connu (comme 2 entiers), vous pouvez utiliser
la source
input()
(Python 3) etraw_input()
(Python 2) renvoient toujours des chaînes. Convertissez le résultat en entier explicitement avecint()
.la source
Plusieurs questions nécessitent la saisie de plusieurs entiers sur une seule ligne. La meilleure façon est de saisir la chaîne entière de nombres sur une ligne, puis de les diviser en entiers. Voici une version Python 3:
Une compréhension de liste peut également être utilisée
Et pour convertir toutes les entrées de la chaîne en int, nous procédons comme suit
imprime les éléments de la liste en ligne droite.
la source
Convertir en entiers:
De même pour les nombres à virgule flottante:
la source
la boucle for doit être exécutée «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 retourner le tableau à la fin de la boucle for.
la source
J'ai rencontré un problème de prise d'entrée entière lors de la résolution d'un problème sur CodeChef , où deux entiers - séparés par un espace - devraient être lus à partir d'une ligne.
Bien que cela
int(input())
soit suffisant pour un seul entier, je n'ai pas trouvé de moyen direct d'entrer deux entiers. J'ai essayé ceci:Maintenant, j'utilise num1 et num2 comme entiers. J'espère que cela t'aides.
la source
i
détruit à lafor
sortie de la boucle?@hosch250
Lorsqu'une boucle est quittée, la valeur de la variable d'index (icii
) reste. J'ai essayé cette pièce et elle fonctionne correctement.num1, num2 = map(int, input().split())
si vous savez combien d'entiers vous rencontrerez ounums = list(map(int, input().split()))
si vous ne le faites pas.la source
Alors que dans votre exemple,
int(input(...))
fait le tour dans tous les cas,python-future
l »builtins.input
Envisage vaut depuis être sûr que vos œuvres de code pour Python 2 et 3 et le comportement par défaut désactive python2 d'input
essayer d'être « intelligent » sur le type de données d'entrée (builtins.input
fondamentalement juste se comporte commeraw_input
).la source