Exercice de programmation en python / Listes

Makikpo -  
dachiasse Messages postés 1932 Statut Membre -
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

  1. jee pee Messages postés 9437 Date d'inscription   Statut Modérateur Dernière intervention   9 973
     
    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

    0
  2. Makiko
     
    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))
    0
    1. jee pee Messages postés 9437 Date d'inscription   Statut Modérateur Dernière intervention   9 973
       
      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
      0
  3. Makiko
     
    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))
    
    0
    1. jee pee Messages postés 9437 Date d'inscription   Statut Modérateur Dernière intervention   9 973
       
      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))    
      0
  4. dachiasse Messages postés 1932 Statut Membre 153
     
    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.
    0