Ma boucle ne fonctionne pas [Résolu]

Signaler
-
Messages postés
55
Date d'inscription
lundi 1 juillet 2019
Statut
Membre
Dernière intervention
16 mai 2020
-
Bonjour,
je dois faire un programme qui sépare un nombre à 15 chiffre en 2 nombres, un bloc avec les 13 premiers, un autre avec les 2 derniers. J'ai eu l'idée de les mettre dans une liste pour pouvoir multiplier le premier chiffre pas 10**12, le second par 10**11, etc, jusqu'au 13ème par 10**0, c'est à dire 1, et d'ensuite additionner tous ces chiffres. Quand j'ai exécuté ce programme, j'ai obtenu une somme bien plus élevée que prévue. J'ai donc légèrement modifié le programme pour qu'il soit plus court et qu'il me renvoie la liste des nombres à additionner:

def test_insee(n):
##s=[ ]
##chaine=str(n)
##l=[ int(el) for el in chaine ]
##c=4
##m=10**c
##for el in l:
####s.append(el*m)
####c=c-1
##return s

test_insee(52213)

[50000, 20000, 20000, 10000, 30000]

Comme vous pouvez le voir avec la liste qu'on obtient, on peut voir que la boucle ne prend pas en compte le c=c-1. J'aimerai donc savoir pourquoi, et si quelqu'un peut éclairer ma lanterne. Merci à vous

Edit: Je vois que les indentations ne veulent pas s'afficher ici donc je les marquerai par des #

2 réponses

Messages postés
14474
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
9 juillet 2020
554
Bonjour

il y a un truc fondamental en Python => l'indentation.
Pour qu'elle soit conservée sur le site il faut utiliser les balises de code, voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Messages postés
55
Date d'inscription
lundi 1 juillet 2019
Statut
Membre
Dernière intervention
16 mai 2020
5
Bonjour Megamanbuster21,

Avec ta version, ta variable
m
est initialisée, mais dans ta boucle elle n'est pas modifiée. Le fait que tu modifies
c
ne modifie pas
m
. il faut donc recalculer
m
dans ta boucle à chaque fois.

Ceci étant dit, tu t'es compliqué la tâche.
Je te donne une autre piste : utilise les indices (le "slicing")
Si tu as :
insee = 123456789012345
chaine = str(insee)

A l'issue de ces 2 lignes, que vaut :
chaine[0:13]
ou en condensé
chaine[:13]
?