Ma boucle ne fonctionne pas
Résolu
Megamanbuster21
-
Furansujean Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
Furansujean Messages postés 58 Date d'inscription Statut Membre Dernière intervention -
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 #
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 #
A voir également:
- Ma boucle ne fonctionne pas
- Boucle excel sans macro - Forum Excel
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Mise à disposition de boucle locale dédiée ✓ - Forum Freebox
- Vlc lire en boucle ✓ - Forum Lecteurs et supports vidéo
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
2 réponses
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
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
Bonjour Megamanbuster21,
Avec ta version, ta variable
Ceci étant dit, tu t'es compliqué la tâche.
Je te donne une autre piste : utilise les indices (le "slicing")
Si tu as :
A l'issue de ces 2 lignes, que vaut :
Avec ta version, ta variable
mest initialisée, mais dans ta boucle elle n'est pas modifiée. Le fait que tu modifies
cne modifie pas
m. il faut donc recalculer
mdans 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]?