python fonction int( )
Le code ci-dessous affiche l'erreur si une virgule (eg. 49.9) est envoyé à next
variable. Pouvez-vous s'il vous plaît dites-moi pourquoi? Pourquoi ne int()
le convertit en un nombre entier?
next=raw_input("> ")
how_much = int(next)
if how_much < 50:
print"Nice, you're not greedy, you win"
exit(0)
else:
dead("You greedy bastard!")
Si je n'utilise pas int()
ou float()
et il suffit d'utiliser:
how_much=next
puis il se déplace vers "autre chose", même si je donne l'entrée comme 49.8
.
Vous voulez probablement dire
petite note de côté:
vous êtes ici à cause de cela. learnpythonthehardway.org/book/ex35.html
how_much = int(float(...))
ou how_much = int(round(float(...)))
.petite note de côté:
next
n'est pas un bon choix pour un var nom, comme il est un build en fonction next()
depuis 2.6 de pythonvous êtes ici à cause de cela. learnpythonthehardway.org/book/ex35.html
OriginalL'auteur Shubham Agrawal | 2012-08-18
Vous devez vous connecter pour publier un commentaire.
Que les autres réponses ont mentionné, le
int
opération va planter si la chaîne d'entrée n'est pas convertible en un int (comme un float ou caractères). Ce que vous pouvez faire est d'utiliser un peu de méthode d'aide à essayer et à interpréter la chaîne pour vous:Donc il va prendre une corde et d'essayer de le convertir en int, puis flotter, et sinon chaîne de retour. Ce n'est plus juste un exemple général de la recherche à la convertibles types. Il serait une erreur de votre valeur de retour de cette fonction d'être toujours une chaîne de caractères, qui vous voulez par rapport à l'utilisateur et de poser pour la nouvelle entrée.
Peut-être une variante qui renvoie
None
si son ni flotter ni int:Parce que vous êtes de la comparaison de chaînes ensuite:
"49.8" < 50
J'ai eu une faute de frappe et j'ai oublié de mettre le
None
dans le second. Juste fixe.Nu à l'exception c'est le mal.
except ValueError
serait sans doute une meilleure idée.Tout peut soulever
KeyboardInterrupt
. L'utilisateur peut taper Ctrl+C à tout moment.OriginalL'auteur jdi
int()
seulement œuvres pour cordes qui ressemblent à des nombres entiers; ce sera un échec pour les chaînes qui ressemblent à des flotteurs. Utilisationfloat()
à la place.Parce qu'il ne peut pas être interprété comme un entier.
OriginalL'auteur Ignacio Vazquez-Abrams
Entiers (
int
pour faire court) sont les nombres de compter avec 0, 1, 2, 3 ... et leurs homologues négatives ... -3, -2, -1 ceux sans la partie décimale.Donc, une fois que vous introduisez un point décimal, votre pas vraiment affaire avec des entiers. Vous avez affaire à des nombres rationnels. Le Python de type float ou décimal types sont ce que vous voulez de les représenter ou de rapprocher ces chiffres.
De vous peuvent être utilisés dans une langue qui automatiquement fait pour vous(Php). Python, cependant, a une préférence explicite pour forcer code explicite plutôt implicite.
Eh bien c'est parce que
how_much
devient alors une chaîne de caractères. Je ne m'attends pas que de travail même.OriginalL'auteur Doug T.
dans cette, première chaîne le nombre
str()
, qui les convertit en un inopérable nombre. Ensuite, jeint()
integerize, de la rendre opératoire nombre. Je viens de tester votre problème sur mon RALENTI GUI, et il a dit que 49.8 < 50.OriginalL'auteur user3317399
Utilisation float() en place de int() afin que votre programme peut gérer les décimales. Aussi, n'utilisez pas de
next
que c'est un built-in fonction Python, next().Également vous code affiché est manquant
import sys
et la définition dedead
Il ne peut pas convertir quelque chose avec un point décimal à un int, il doit obtenir une chaîne de caractères qui ressemble à un int.
Pouvez-vous nous dire de votre objectif et pourquoi
float()
ne serait pas une solution acceptable?float() est une solution acceptable. Si j'ai de la police utiliser float() ou int() alors pourquoi doesent python reconnaître l'entrée du type et de vérifier si son inférieur ou supérieur à 50?
OriginalL'auteur Levon