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]]
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
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.
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)
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
>>> 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]
Tableau Python
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Découverte Python Doc Tkinter Les chaînes de caractères