J'écris un programme qui calcule le chiffre de contrôle d'un numéro ISBN. Je dois lire l'entrée de l'utilisateur (neuf chiffres d'un ISBN) dans une variable entière, puis multiplier le dernier chiffre par 2, l'avant-dernier chiffre par 3 et ainsi de suite. Comment puis-je "diviser" le nombre entier en ses chiffres constitutifs pour faire cela ? Comme il s'agit d'un exercice de base, je ne suis pas censé utiliser une liste.
Réponses
Trop de publicités?Il suffit de créer une chaîne à partir de ça.
myinteger = 212345
number_string = str(myinteger)
C'est suffisant. Maintenant vous pouvez itérer dessus :
for ch in number_string:
print ch # will print each digit in order
Ou vous pouvez le couper en tranches :
print number_string[:2] # first two digits
print number_string[-3:] # last three digits
print number_string[3] # forth digit
Ou mieux, ne pas convertir l'entrée de l'utilisateur en un nombre entier (l'utilisateur tape une chaîne de caractères).
isbn = raw_input()
for pos, ch in enumerate(reversed(isbn)):
print "%d * %d is %d" % pos + 2, int(ch), int(ch) * (pos + 2)
Pour plus d'informations, lisez un tutoriel .
while number:
digit = number % 10
# do whatever with digit
# remove last digit from number (as integer)
number //= 10
À chaque itération de la boucle, elle supprime le dernier chiffre du nombre, en l'assignant à digit
. C'est à l'envers, on commence par le dernier chiffre et on termine par le premier.
list_of_ints = [int(i) for i in str(ISBN)]
Vous donnera une liste ordonnée d'ints. Bien sûr, étant donné le typage des canards, vous pourriez tout aussi bien travailler avec str(ISBN).
Edit : Comme mentionné dans les commentaires, cette liste n'est pas triée dans le sens d'être ascendante ou descendante, mais elle a un ordre défini (les ensembles, dictionnaires, etc. en python ne le font pas en théorie, bien qu'en pratique l'ordre tende à être assez fiable). Si vous voulez le trier :
list_of_ints.sort()
est votre ami. Notez que sort() trie en place (c'est-à-dire qu'il change l'ordre de la liste existante) et ne retourne pas une nouvelle liste.