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 31990 Date d'inscription   Statut Modérateur Dernière intervention   10 015
     
    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 31990 Date d'inscription   Statut Modérateur Dernière intervention   10 015
       
      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 31990 Date d'inscription   Statut Modérateur Dernière intervention   10 015
       
      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