Python créer des listes avec itérations par boucles
Résolu/Fermé
Thomasdu33
-
Modifié le 2 mars 2022 à 14:26
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 - 21 mars 2022 à 10:21
mamiemando Messages postés 33535 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 12 février 2025 - 21 mars 2022 à 10:21
A voir également:
- Modifier le programme afin que à chaque itération de la boucle
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Modifier story facebook - Guide
- Comment modifier un pdf - Guide
- Programme demarrage windows 10 - Guide
26 réponses
Utilisateur anonyme
22 févr. 2022 à 18:15
22 févr. 2022 à 18:15
Bonjour
En Python, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
En Python, l’indentation est primordiale, or par défaut le site ne la conserve pas.
Pour la conserver il faut utiliser les balises de code. Voir ce petit tuto https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
On pourra commencer à essayer de t’aider quand tu auras reposté correctement ton code.
def f(): a = 0 for x in range(2, 10): while x != 1: if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 a = a + 1 print(x) yield x print(a) print("-" * 78) print(max(f())) print("-" * 78)
Utilisateur anonyme
22 févr. 2022 à 18:59
22 févr. 2022 à 18:59
Est ce que tu sais comment une fonction peut retourner une liste? deux listes?
Utilisateur anonyme
22 févr. 2022 à 19:02
22 févr. 2022 à 19:02
Et en attendant, je te propose de modifier un peu ton code comme ça
et d'observer ce qui se passe
def f(): a = 0 for x in range(2, 10): while x != 1: if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 a = a + 1 print("x ", x) yield x print("a ", a) print("-" * 78) print(max(f())) print("-" * 78)
et d'observer ce qui se passe
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Utilisateur anonyme
22 févr. 2022 à 19:05
22 févr. 2022 à 19:05
Nos messages se sont croisés.
Regarde donc le message 5, et ensuite ici https://lite.qwant.com/?q=python+fonction+retourner+plusieurs+valeurs&client=opensearch
Regarde donc le message 5, et ensuite ici https://lite.qwant.com/?q=python+fonction+retourner+plusieurs+valeurs&client=opensearch
Rebonjour,
J'ai vu que cela associe les nombres obtenus grâce aux boucles à
Je n'arrive toujours pas à intégrer dans mon programme un moyen de lister pour chaque nombre dans la rangée, les nombres obtenus grâce aux boucles de ce nombre.
après j'ai trouvé comment les trier en décroissance avec la fonction
Après, je pense pouvoir retourner les 2 listes grâce à ce qu'on m'a envoyé.
J'ai vu que cela associe les nombres obtenus grâce aux boucles à
x, mais c'est tout pour moi.
Je n'arrive toujours pas à intégrer dans mon programme un moyen de lister pour chaque nombre dans la rangée, les nombres obtenus grâce aux boucles de ce nombre.
après j'ai trouvé comment les trier en décroissance avec la fonction
sorted()et quelque chose comme
reverse = True.
def f(): a = 0 for x in list(sorted(range(2, 10))): while x != 1: if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 a = a + 1 print("x ", x) yield x print("a ", a) print("-" * 78) print(max(f())) print("-" * 78)
Après, je pense pouvoir retourner les 2 listes grâce à ce qu'on m'a envoyé.
Utilisateur anonyme
Modifié le 24 févr. 2022 à 17:40
Modifié le 24 févr. 2022 à 17:40
Procédons par étape
trier à cette endroit là
Tu as écrit
Essaye dans un premier temps, avec des prints d'afficher
trier à cette endroit là
for x in list(sorted(range(2, 10))):ne va rien t'apporter.
Tu as écrit
pour afficher de 2 à 10, le nombre d'itérations correspondant.
Essaye dans un premier temps, avec des prints d'afficher
"Pour yy, il y a XXX itérations"pour chaque nombre de 2 à 10.
Rebonjour,
J'ai vus que ça associer le x à chaque nombre obtenu par boucle au return. Mais c'est tout ce que j'ai compris.
Après j'ai trouvé des trucs comme le "reverse = True" et le sorted() et .sort() pour trier les nombres, cependant j'ai pas compris comment mettre dans une list la boucle for.
J'ai essayé de faire quelque chose comme ça mais ça ne change rien.
J'ai vus que ça associer le x à chaque nombre obtenu par boucle au return. Mais c'est tout ce que j'ai compris.
Après j'ai trouvé des trucs comme le "reverse = True" et le sorted() et .sort() pour trier les nombres, cependant j'ai pas compris comment mettre dans une list la boucle for.
def f(): a = 0 for x in list(sorted(range(2, 10))): while x != 1: if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 a = a + 1 print("x ", x) yield x print("a ", a) print("-" * 78) print(max(f())) print("-" * 78)
J'ai essayé de faire quelque chose comme ça mais ça ne change rien.
J'ai fais un truc comme ça:
Mais ça me donne ça:
def f(): a = 0 list = [] for x in range(2, 10): while x != 1: if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 a = a + 1 print("x ", x) yield x list.append(x) print("a ", a) print(list) print("-" * 78) print(max(f())) print("-" * 78)
Mais ça me donne ça:
a 45
[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]
52.0
Utilisateur anonyme
Modifié le 2 mars 2022 à 14:29
Modifié le 2 mars 2022 à 14:29
Je te dis de procéder par étape.
Essaye avec un ou des
Essaye avec un ou des
J'ai fais ça, mais je ne sais pas quoi mettre à la place de XXX.
def f(): a = 0 for x in range(2, 10): while x != 1: if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 a = a + 1 print("x ", x) yield x print("a ", a) print("-" * 78) print(max(f())) print("-" * 78) print("Pour " +x+ ", il y a " XXX " itérations" )
J'ai fais ça, mais je ne sais pas quoi mettre à la place des XXX
def f(): a = 0 for x in range(2, 10): while x != 1: if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 a = a + 1 print("x ", x) yield x print("a ", a) print("-" * 78) print(max(f())) print("-" * 78) print("Pour " +x+ ", il y a " XXX " itérations" )
mamiemando
Messages postés
33535
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 février 2025
7 827
2 mars 2022 à 14:34
2 mars 2022 à 14:34
Bonjour
Par rapport au message #17 : J'ai fait ça, mais je ne sais pas quoi mettre à la place de XXX.
Tu peux compter le nombre de fois où tu as itérer avec
Bonne chance
Par rapport au message #17 : J'ai fait ça, mais je ne sais pas quoi mettre à la place de XXX.
Tu peux compter le nombre de fois où tu as itérer avec
enumerate, peu importe la nature de l'itérable (générateur, liste, etc.) :
l = [10, 20, 30] # Ou n'importe quel itérable for (i, x) in enumerate(l): print(i, x)
Bonne chance
Maintenant j'ai fais ça, qui me donne le nombre de boucle par itération.
Cependant il me faut qu'au print que je puisse avoir une décroissance.
J'ai trouvé ceci, mais je n'arrive pas à l'utiliser ou je ne sais pas quoi utiliser d'autre.
x.sort(reverse = True)
mais je crois qu'il me faudrait réussir à mettre les nombres obtenus dans une liste pour pouvoir ensuite les triers.
Cependant il me faut qu'au print que je puisse avoir une décroissance.
def f(): l = [2,3,4,5,6,7,8,9,10] # Ou n'importe quel itérable for (i, x) in enumerate(l): a = 0 while x != 1: if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 a = a + 1 yield x print(i+1, x) print("a ", a) print("-" * 78) print(max(f())) print("-" * 78)
J'ai trouvé ceci, mais je n'arrive pas à l'utiliser ou je ne sais pas quoi utiliser d'autre.
x.sort(reverse = True)
mais je crois qu'il me faudrait réussir à mettre les nombres obtenus dans une liste pour pouvoir ensuite les triers.
Utilisateur anonyme
2 mars 2022 à 17:41
2 mars 2022 à 17:41
Bonsoir
non tu n'as toujours pas le nombre d'itération par entier de 2 à 10.
Essaye ça et compte le nombre de "coucou" et compare le avec ta variable a
non tu n'as toujours pas le nombre d'itération par entier de 2 à 10.
Essaye ça et compte le nombre de "coucou" et compare le avec ta variable a
def f(): a = 0 for x in range(9, 10): print("entier : ", x) while x != 1: print("coucou") if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 a = a + 1 yield x print("ce que tu crois être les itérations : ", a) print(max(f()))
Utilisateur anonyme
4 mars 2022 à 13:22
4 mars 2022 à 13:22
Ha oui.
Une itération c’est un passage dans une boucle.
Une itération c’est un passage dans une boucle.
Donc là, j'ai réussis à faire ce qu'ils ont demandés ?
<< La première liste affiche, pour chaque entier de 2 à 10, le nombre d'itérations correspondant >>
Avec ça:
<< La première liste affiche, pour chaque entier de 2 à 10, le nombre d'itérations correspondant >>
Avec ça:
def f(): a = 0 for x in range(2, 5): print("entier : ", x) list = [] while x != 1: if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 a = a + 1 list.append(x) print(x) yield x print(sorted(list, reverse = True)) print("ce que tu crois être les itérations : ", a) print(max(f()))
Utilisateur anonyme
5 mars 2022 à 09:22
5 mars 2022 à 09:22
Bonjour
Non a n’est pas le nombre d’itérations.
La boucle c’est le while.
a n’est pas incrémenté à chaque passage dans le while, donc tu ne comptes pas les itérations.
Tu comptes le nombre de fois ou x est paire
Non a n’est pas le nombre d’itérations.
La boucle c’est le while.
a n’est pas incrémenté à chaque passage dans le while, donc tu ne comptes pas les itérations.
Tu comptes le nombre de fois ou x est paire
Utilisateur anonyme
10 mars 2022 à 14:59
10 mars 2022 à 14:59
Alors oui, "a = a + 1" doit être déplacé un niveau du while.
Par contre, ça ne doit pas retourner 3 mais un truc du genre, "pour la valeur d'entrée X il y a eu Y itérations" et ce pour chaque valeur de X.
Cela dit dans un soucis de cohérence, essaye de renommer ta variable, "a" ça ne fait pas penser à "itération", il y a "i" bien sûr, ou encore "iterations"
Par contre, ça ne doit pas retourner 3 mais un truc du genre, "pour la valeur d'entrée X il y a eu Y itérations" et ce pour chaque valeur de X.
Cela dit dans un soucis de cohérence, essaye de renommer ta variable, "a" ça ne fait pas penser à "itération", il y a "i" bien sûr, ou encore "iterations"
D'accord, alors j'ai fais un programme comme ça :
Mais je ne sais pas comment récupéré le premier x, et ainsi de suite jusqu'au dernier x de la range.
def f(): i = 0 for x in range(2, 5): print("entier : ", x) list = [] while x != 1: if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 list.append(x) print(x) i = i + 1 yield x print(sorted(list, reverse = True)) print("nombre d'itérations : ", i) print("Pour la valeur "+ str(x) +", il y a "+ str(i) +" itérations") print(max(f()))
Mais je ne sais pas comment récupéré le premier x, et ainsi de suite jusqu'au dernier x de la range.
mamiemando
Messages postés
33535
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 février 2025
7 827
>
Thomasdu33
Modifié le 10 mars 2022 à 16:12
Modifié le 10 mars 2022 à 16:12
Ou plus simplement :
Note aussi que vu que tu itères sur
Bonne chance
for (i, x) in enumerate(range(2, 5)): print(f"entier : {x}") print(f"nombre d'itérations : {i}")
Note aussi que vu que tu itères sur
range(2, 5)tu sais par avance exactement il y aura 3 itérations...
Bonne chance
Thomasdu33
>
mamiemando
Messages postés
33535
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 février 2025
10 mars 2022 à 16:21
10 mars 2022 à 16:21
ça signifie quoi les f et les {} ?
mamiemando
Messages postés
33535
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 février 2025
7 827
>
Thomasdu33
Modifié le 10 mars 2022 à 19:17
Modifié le 10 mars 2022 à 19:17
ça signifie quoi les f et les {} ?
C'est ce qu'on appelle une f-string. Ce qui est entre accolade est évalué et remplacé par son résultat. Ainsi, écrire
Les f-strings n'ont rien d'obligatoire et tu peux utiliser la syntaxe que tu connais si tu préfères.
Ensuite concernant
Bonne chance
C'est ce qu'on appelle une f-string. Ce qui est entre accolade est évalué et remplacé par son résultat. Ainsi, écrire
{x}dans une f-string revient à dire "écrit à cet endroit la valeur de la variable
x". Si tu mettais
"{x+2}"ça remplacerait ce bloc par la valeur de
x + 2. C'est donc une manière assez élégante de spécifier ce que tu veux écrire.
Les f-strings n'ont rien d'obligatoire et tu peux utiliser la syntaxe que tu connais si tu préfères.
Ensuite concernant
enumerate
: c'est une manière d'itérer sur un itérable (par exemple, un range
, une list
, etc.) et de récupérer simultanément le nombre d'itérations faites (idans mon exemple) et la valeur itérée (
xdans mon exemple)
Bonne chance
Utilisateur anonyme
10 mars 2022 à 17:25
10 mars 2022 à 17:25
Bonjour mamiemando.
Thomas n’en est pas encore là.
Thomas.
Pour l’instant on va oublier les listes triées ou pas.
On va juste essayer d’afficher le nombre d’itérations pour chaque entier.
Et même on va juste essayer pour un seul entier
Exécute ceci
Regarde bien ce qu’affichent les print.
En fonction doit moins si la phrase "Pour la valeur "+ str(x) +", il y a "+ str(i) +" itérations") est cohérente?
Pourquoi ?
Thomas n’en est pas encore là.
Thomas.
Pour l’instant on va oublier les listes triées ou pas.
On va juste essayer d’afficher le nombre d’itérations pour chaque entier.
Et même on va juste essayer pour un seul entier
Exécute ceci
def f(): i = 0 for x in range(3, 4): print("entier : ", x) while x != 1: print("coucou") if x % 2 == 1: x = x * 3 + 1 else: x = x / 2 print("x: ", x) i = i + 1 yield x print("Pour la valeur "+ str(x) +", il y a "+ str(i) +" itérations") print("max: ", max(f ))
Regarde bien ce qu’affichent les print.
En fonction doit moins si la phrase "Pour la valeur "+ str(x) +", il y a "+ str(i) +" itérations") est cohérente?
Pourquoi ?
mamiemando
Messages postés
33535
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
12 février 2025
7 827
>
Utilisateur anonyme
10 mars 2022 à 19:23
10 mars 2022 à 19:23
Ah oui c'est possible, tout dépend des itérations dont on parle, donc toi tu dirais que c'est le nombre de fois qu'on boucle sur le
Malheureusement, avec
Attention toutefois ! Si le
Bonne chance
whileet non le
for.
Malheureusement, avec
while, on ne peut pas utiliser
enumerate
, car whilene travaille pas sur un itérable. On est alors obligé de déclarer au préalable un compteur, qu'on incrémente à chaque tour de boucle.
compteur = 0 while ... ... compteur += 1 print("Nombre d'itérations :", compteur) # ou print(f"Nombre d'itérations : {compteur}")
Attention toutefois ! Si le
whilecomporte des
continueet/ou des
breakà bien incrémenter le compteur avant d'atteindre l'un de ces mots clés, sinon on oubliera de compter certains tour de boucle...
Bonne chance
22 févr. 2022 à 18:16