Fonction ne fonctionne pas dans la boucle for
Bonjour,
Je suis débutant en python et je n'arrive pas à comprendre comment je pourrai parvenir à faire fonctionner une partie de mon petit programme :
Quand je lance le programme, code1 étant "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" cela me donne ça:
À chaque fois que la variable "place" est imprimée, elle est vide alors qu'elle ne le devrait pas. J'ai essayé ma fonction:
Dès que je mets ma fonction dans ma boucle
Pourriez-vous m'expliquer ce que j'ai fait de faux s'il vous plaît. Ou alors me donner une alternative pour faire la même chose.
Merci d'avance
Je suis débutant en python et je n'arrive pas à comprendre comment je pourrai parvenir à faire fonctionner une partie de mon petit programme :
def findoccurence(fcx, fclistetotal): fcplace = [] for n in range(len(fclistetotal)): if fclistetotal[n] == fcx: fcplace.append(n) return fcplace car = [ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's','t', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1','2', '3', '4', '5', '6', '7', '8', '9', ' ',',', '.', ';', ':', '-', '_', '!', '?', '@', '#', '(', ')' ] listetotal = list(code1) for x in car: print(findoccurence(x, listetotal)) if int(len(findoccurence(x, listetotal))) <= 1: print("test") elif int(len(findoccurence(x, listetotal))) > 1: place = findoccurence(x, listetotal) print(place) del place[0] for e in place: listetotal[e] = max1[0] del max1[0] print(listetotal)
Quand je lance le programme, code1 étant "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" cela me donne ça:
[]
test
[]
test
[]
.....
test
[]
test
[]
test
[]
test
['a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a']
À chaque fois que la variable "place" est imprimée, elle est vide alors qu'elle ne le devrait pas. J'ai essayé ma fonction:
findoccurence, dans un programme à part en dehors d'une boucle
for, et là tout marche correctement.
Dès que je mets ma fonction dans ma boucle
forcomme dans le programme ci-dessus, la fonction que j’ai créée ne fonctionne apparemment plus car
placeest vide alors qu'il devrait y avoir toutes les occurrences de la lettre "a" présente dans la liste
listetotal.
Pourriez-vous m'expliquer ce que j'ai fait de faux s'il vous plaît. Ou alors me donner une alternative pour faire la même chose.
Merci d'avance
A voir également:
- Fonction ne fonctionne pas dans la boucle for
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Fonction si et - Guide
- Idm for mac - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Instagram for pc - Télécharger - Divers Communication
2 réponses
Bonjour,
Au début de ton code, on voit:
mais code1 est initialisée où ?
Sinon:
L'indentation étant importante en Python, merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :
Au début de ton code, on voit:
listetotal = list(code1)
mais code1 est initialisée où ?
Sinon:
L'indentation étant importante en Python, merci de copier/coller ici ton code complet avec les balises de code
mode d'emploi:
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Visuellement, ça doit ressembler à ceci (avec la coloration syntaxique) :
def test(): print('test') test()
Bonjour,
@Phil :
Plusieurs remarques en vrac :
... ou avec une liste compréhension :
place = findoccurence(x, listetotal)
Si le but est de créer une structure qui compte la distribution des caractères ASCII dans une chaîne de caractère
Bonne chance
@Phil :
code1est spécifié dans l'énoncé, pas dans le code ;
Plusieurs remarques en vrac :
- Donne-nous un code minimal, qui se lance et qui reproduit le problème ;
- Je te recommande d'utiliser des indentations de taille 2 ou 4 (tu peux configurer ton éditeur pour que lorsque tu appuies sur la touche tabulation, cela engendre un nombre donné d'espaces) ; généralement on prend 4 espaces ;
- Merci d'expliquer brièvement le but de ton programme, et en particulier le résultat attendu ;
- Nomme tes variables de manière plus explicites ; en particulier je te recommande de noter au pluriel les listes (genre
characters
au lieu decar
), cela rend le code plus lisible (et permet par la suite d'écrire des choses du genrefor element in elements
) - En PEP8 tes variables devrait avoir un nom du genre
ma_variable
au lieu demavariable
; idem pour les fonctions ; - Inutile de transformer le résultat de
len()
enint
: c'est déjà une valeur entière ; - Il est plus naturel d'itérer sans utiliser d'indice, ainsi ta fonction devient :
def findoccurence(fcx, fclistetotal): fcplace = [] for c in fclistetotal): if c == fcx: fcplace.append(n) return fcplace
... ou avec une liste compréhension :
def findoccurence(fcx, fclistetotal): return [c for c in fclistetotal) if c == fcx]
- Ton test
if int(len(findoccurence(x, listetotal))) <= 1:
vérifie si le résultat defindoccurence(x, listetotal)
est une liste vide ce qui s'écrit plus simplement :
if not findoccurence(x, listetotal):
- le test dans le
elif
est inutile (et relance le calcul pour rien), un simpleelse
suffit. En fait il faudrait plutôt écrire :
place = findoccurence(x, listetotal)
if not place: print("test") else: ...
- Pas besoin de créer une liste pour lister les caractères intéressants. Une chaîne est au même titre qu'une liste un itérable indexé. Donc tu peux directement utiliser une chaîne dans laquelle sont concaténés tous les caractères. Note que ce que tu veux est sans doute simplement
string.printable
:
import string car = string.printable
Si le but est de créer une structure qui compte la distribution des caractères ASCII dans une chaîne de caractère
code1, voici comment je procèderais :
import string from pprint import pprint from collections import defaultdict def compute_distribution(s): distribution = defaultdict(lambda: 0) for a in s: if a in string.printable: distribution[a] += 1 return distribution pprint(compute_distribution("ababaabc"))
Bonne chance