54 votes

Divisez un nombre entier en chiffres pour calculer une somme de contrôle ISBN.

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.

84voto

nosklo Points 75862

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 .

70voto

Alexandru Nedelcu Points 3801
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.

23voto

mavnn Points 3359
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.

13voto

st0le Points 15318

Sur les anciennes versions de Python...

map(int,str(123))

Sur la nouvelle version 3k

list(map(int,str(123)))

2voto

Evgeny Points 1387

Convertissez-le en chaîne de caractères et mappez-le avec la fonction int().

map(int, str(1231231231))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X