Ma boucle ne fonctionne pas

Résolu/Fermé
Megamanbuster21 - Modifié le 7 mai 2020 à 12:21
Furansujean Messages postés 58 Date d'inscription lundi 1 juillet 2019 Statut Membre Dernière intervention 12 septembre 2022 - 7 mai 2020 à 13:01
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

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
7 mai 2020 à 12:24
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
1
Furansujean Messages postés 58 Date d'inscription lundi 1 juillet 2019 Statut Membre Dernière intervention 12 septembre 2022 5
7 mai 2020 à 13:01
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]
?
1