Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tableau Python

    23 décembre 2021 à 11:33:11

    Bonjour je crée sur sujet car j'ai besoin d'aide pour un exercice de codage en python sur les matrices ou tableaux de tableaux

    énoncé :

    Lorsqu'on pose une lampe dans une cellule, cette source de lumière va éclairer les deux couloirs de cette cellule (c'est à dire sa ligne et sa colonne dans la matrice). Ecrire un corps possible pour la fonction pose_lampe ci-dessous.

    def test_pose_lampe():
        copie_plateau1 = [[x for x in ligne] for ligne in plateau1]
        # on pose une lampe en (1,1) du plateau 1:
        assert pose_lampe(plateau1, 1, 1) == [[0, 2, 2], [2, 2, 2]]
        # on vérifie que l'appel à pose_lampe a laissé plateau1 inchangé:
        assert plateau1 == copie_plateau1
        # autre essai sur plateau1:
        assert pose_lampe(plateau1, 2, 1) == [[0, 1, 2], [2, 2, 2]]
        # nouvelle vérification de l'absence d'effet de bord sur plateau1:
        assert plateau1 == copie_plateau1
        assert pose_lampe(plateau2, 0, 1) == [[2, 1, 2, 0], [2, 2, 2, 2], [2, 2, 1, 1]]
        assert pose_lampe(plateau3, 4, 3) == [[2, 1, 1, 1, 2, 1, 1, 0, 2, 2],
                                                 [2, 2, 0, 1, 2, 2, 0, 2, 0, 2],
                                                 [1, 1, 1, 0, 2, 1, 1, 2, 0, 2],
                                                 [2, 2, 2, 2, 2, 2, 2, 2, 2, 2],
                                                 [1, 0, 2, 1, 2, 0, 0, 1, 2, 0],
                                                 [0, 1, 0, 0, 2, 1, 1, 2, 0, 0],
                                                 [2, 0, 1, 2, 2, 1, 2, 1, 1, 1]]

    tableaux a tester :

    plateau1 = [ [0, 1, 2],
                 [1, 2, 2]]
    
    plateau2 = [ 
        [0,1,2,0],
        [0,1,2,2],
        [2,2,1,1]
    ]
    
    plateau3 = [[2, 1, 1, 1, 0, 1, 1, 0, 2, 2],
     [2, 2, 0, 1, 0, 2, 0, 2, 0, 2],
     [1, 1, 1, 0, 1, 1, 1, 2, 0, 2],
     [0, 1, 2, 0, 2, 0, 2, 0, 1, 0],
     [1, 0, 2, 1, 2, 0, 0, 1, 2, 0],
     [0, 1, 0, 0, 0, 1, 1, 2, 0, 0],
     [2, 0, 1, 2, 2, 1, 2, 1, 1, 1]]
    
    plateau4 = [ [1,1,1,1],
                 [1,1,0,1],
                 [1,1,1,1],
                 [1,1,1,1]]

    mon code :

    def pose_lampe(plateau, colonne, ligne):
        
        """
        renvoie un nouveau plateau, copie du plateau d'entrée 
        mais dans lequel  la cellule (colonne, ligne) de plateau a été allumée,
        ainsi que toutes les cellules de sa colonne et toutes les cellules de sa ligne. 
        Attention, plateau doit rester inchangé: pas d'effet de bord.
        """
        n = len(plateau)
        for i in range(n):
            plateau[ligne][i] = 2
            plateau[i][colonne] = 2
        for lignes in plateau:
            print(lignes)

    mon problème est que par exemple pour le plateau 4 la boucle n'arrive pas à tout tester car le nombre de lignes est inférieur au nombre de colonnes 

    pouvez vous m'aider s'il vous plaît ? merci d'avance



    • Partager sur Facebook
    • Partager sur Twitter
      23 décembre 2021 à 11:44:03

      Corentin_n a écrit:

      mon problème est que par exemple pour le plateau 4 la boucle n'arrive pas à tout tester car le nombre de lignes est inférieur au nombre de colonnes.

      Si vous êtes sûr que ce sont des tableaux rectangulaires, toutes les lignes ont le même nombre de colonnes. Et on pourra récupérer le nombre de colonnes à partir de la longueur de n'importe quelle ligne.

      -
      Edité par mps 23 décembre 2021 à 11:44:31

      • Partager sur Facebook
      • Partager sur Twitter
        23 décembre 2021 à 11:53:36

        Oui mais je ne sais pas faire ça :/
        • Partager sur Facebook
        • Partager sur Twitter
          23 décembre 2021 à 12:12:20

          que donnent len(plateau) et len(plateau[0]) ?

          ceci-dit, plateau1 est déjà rectangulaire

          Sinon, il est dit que plateau ne doit pas changer, donc travailler sur une copie du tableau et le renvoyer (la fonction est censé renvoyée le plateau résultant)

          • Partager sur Facebook
          • Partager sur Twitter
            23 décembre 2021 à 12:13:43

            Corentin_n a écrit:

            Oui mais je ne sais pas faire ça :/


            C'est expliqué ici par exemple, vous n'avez pas de cours ?

            Par ailleurs, votre code ne répond aux spécifications données dans la docstring :

            Corentin_n a écrit:

            def pose_lampe(plateau, colonne, ligne):
                
                """
                renvoie un nouveau plateau, copie du plateau d'entrée 
                mais dans lequel  la cellule (colonne, ligne) de plateau a été allumée,
                ainsi que toutes les cellules de sa colonne et toutes les cellules de sa ligne. 
                Attention, plateau doit rester inchangé: pas d'effet de bord.
                """
                n = len(plateau)
                for i in range(n):
                    plateau[ligne][i] = 2
                    plateau[i][colonne] = 2
                for lignes in plateau:
                    print(lignes)

            Vous êtes censé créer et renvoyer un nouveau plateau, il est bien indiqué : pas d'effet de bord. 


            EDIT umfred a été plus rapide :) mais nous disons la même chose.

            -
            Edité par PascalOrtiz 23 décembre 2021 à 12:15:42

            • Partager sur Facebook
            • Partager sur Twitter
              23 décembre 2021 à 13:01:10

              Lu !

              Un bout de code rapidos avant de partir bosser :

              >>> tableau= [  [0,0,0,0,0],
              		[0,0,0,0,0],
              		[0,0,0,0,0],
              		[0,0,0,0,0]]
              >>> lampe = [2,2]
              >>> for i, line in enumerate(tableau):
              	if i == lampe[0]:
              		tableau[i] = [1]*len(line)
              	else:
              		line[lampe[1]] = 1
              
              		
              >>> for l in tableau:
              	print(l)
              
              	
              [0, 0, 1, 0, 0]
              [0, 0, 1, 0, 0]
              [1, 1, 1, 1, 1]
              [0, 0, 1, 0, 0]



              • Partager sur Facebook
              • Partager sur Twitter

              Tableau Python

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown