Exercice de programmation en python / Listes

Signaler
-
Messages postés
1532
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
9 avril 2021
-
Bonjour,
Je dois faire un exercice de programmation en python, mais je ne comprend pas où se trouve on erreur.
L'exercice est le suivant :
Nous avons la liste suivante :
liste = [1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0]

et nous devons créer une fonction telle que le renvoi de cette fonction donne :
[[1,0,1,1,0],[0,0,0,1,0],[0,0,0,0,0,1],[1,0,0,0,0],[0,0,0,0,0]]
Soit des listes de listes dans lesquelles on a 5 éléments pour chaque.

Mon problème étant que nous n'avons pas le droit d'utiliser l'écriture [:5]
(ou tout autre chiffre)

Voici le code que j'ai déjà fait :
def List (l, n):
    JuyList = []
    for k in range (n):
        for k in range (0, len(l)):
            JuyList.append([l[k]])
    return JuyList

l = [1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0]
print(List(l, 5))


La fonction List doit obligatoirement appeler que ces deux caractères.

Merci de votre aide

4 réponses

Messages postés
31496
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 avril 2021
7 539
Bonjour,

Déjà tu as 2 boucles qui utilisent le même indice k , même si cela fonctionne, cela gène la lecture ;-)

Après tu pourrais utiliser le pas d'incrémentation de la fonction range() qui permettrait d'avancer de n en n

Je viens de retravailler mon code. Je reçois bien l'affichage que je veux, mais les valeurs contenues dedans ne sont pas justes. Pourquoi ?

Voici le code:
def List (l, n):
    JuyList = []
    for k in range (0, len(l), n):
        JuyList.append([l[k]]*n)
    return JuyList

l = [1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0]
print(List(l, 5))
Messages postés
31496
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 avril 2021
7 539
le *n renvoie n fois le même caractère,

moi j'effectuerais 2 boucles, une de n en n et un second niveau de 0 à n avec une liste intermédiaire des n positions à ajouter au resultat final
J'ai essayé de suivre vos instructions mais j'ai maintenant un problème de range :
def List (l, n):
    NewList = []
    for i in range (n):
        for v in range (0, n):
            NewList.append(l[v])
            del(l[0])
    return NewList

l = [1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0]
print(List(l, 5))
Messages postés
31496
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 avril 2021
7 539
là tu es reparti sur ton code de départ

voila de quoi avancer par bloc, mais dans la boucle i il faut une variable intermédiaire pour creer le regroupement par bloc de n qui sera ajouté à chaque tour à NewList

def List (l, n):
    NewList = []
    for i in range (0, len(l)-1, n):
        for v in range (0, n):
             NewList.append(l[i+v])
    return NewList

l = [1,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0]
print(List(l, 5))    
Messages postés
1532
Date d'inscription
samedi 12 septembre 2020
Statut
Membre
Dernière intervention
9 avril 2021
128
Salut,

Ta description en premier message n'est pas cohérente. Tu as un bloc de 6 éléments au lieu de 5 : et nous devons créer une fonction telle que le renvoi de cette fonction donne :
[[1,0,1,1,0],[0,0,0,1,0],[0,0,0,0,0,1],[1,0,0,0,0],[0,0,0,0,0]]

Je n'ai pas essayé tes codes. J'ai fait autrement. Difficile de t'aider, mais, un indice : pense à faire une liste temporaire qui peut avoir jusqu'à 5 éléments maximum.

Je n'ai aucunement utilisé la fonction range(). Ça fonctionne très bien.