Aller au contenu

Ajout d'une colonne contenant le nombre de 1 par ligne⚓︎

On dispose d'un tableau non vide ne contenant que des 0 et des 1 et on voudrait lui rajouter une colonne à droite ou figurent les totaux par ligne.

Par exemple, le tableau :

\[ \begin{array}{*{6}{|c|}} \hline 0&1&1&1&0&1\\ \hline 0&0&1&0&0&1\\ \hline 1&0&0&1&1&0\\ \hline 1&0&0&1&1&1\\ \hline \end{array} \]

sera représenté sur machine par la liste de listes suivante :

🐍 Console Python
>>> tab1 = [
...     [0, 1, 1, 1, 0, 1],
...     [0, 0, 1, 0, 0, 1],
...     [1, 0, 0, 1, 1, 0],
...     [1, 0, 0, 1, 1, 1],
... ]

et deviendra :

\[ \begin{array}{*{7}{|c|}} \hline 0&1&1&1&0&1&4\\ \hline 0&0&1&0&0&1&2\\ \hline 1&0&0&1&1&0&3\\ \hline 1&0&0&1&1&1&4\\ \hline \end{array} \]

Vous coderez une fonction ajoute_bord(tab) qui modifie le paramètre tab en lui ajoutant la colonne décrite précédemment :

Exemples

🐍 Console Python
>>> tab1 = [
...     [0, 1, 1, 1, 0, 1],
...     [0, 0, 1, 0, 0, 1],
...     [1, 0, 0, 1, 1, 0],
...     [1, 0, 0, 1, 1, 1],
... ]
>>> ajoute_bord(tab1)
>>> tab2 = [
...     [0, 1, 1, 1, 0, 1, 4],
...     [0, 0, 1, 0, 0, 1, 2],
...     [1, 0, 0, 1, 1, 0, 3],
...     [1, 0, 0, 1, 1, 1, 4],
... ]
>>> tab1 == tab2
True
# pas d'autres testsbksl-nlbksl-nl ∞/∞

def ajoutepy-undbord(tab):bksl-nl passbksl-nlbksl-nlbksl-nltab1 = [bksl-nl [0, 1, 1, 1, 0, 1],bksl-nl [0, 0, 1, 0, 0, 1],bksl-nl [1, 0, 0, 1, 1, 0],bksl-nl [1, 0, 0, 1, 1, 1]bksl-nl ]bksl-nlbksl-nlajoutepy-undbord(tab1)bksl-nlbksl-nltab1py-undattendu = [bksl-nl [0, 1, 1, 1, 0, 1, 4],bksl-nl [0, 0, 1, 0, 0, 1, 2],bksl-nl [1, 0, 0, 1, 1, 0, 3],bksl-nl [1, 0, 0, 1, 1, 1, 4],bksl-nl]bksl-nlbksl-nlassert tab1 == tab1py-undattendubksl-nlbksl-nldef ajoutepy-undbord(tab):bksl-nl nbpy-undl, nbpy-undc = len(tab), len(tab[0])bksl-nl for i in range(nbpy-undl):bksl-nl sompy-undi = 0bksl-nl for j in range(nbpy-undc):bksl-nl sompy-undi += tab[i][j]bksl-nl tab[i].append(sompy-undi)bksl-nlbksl-nltab1 = [bksl-nl [0, 1, 1, 1, 0, 1],bksl-nl [0, 0, 1, 0, 0, 1],bksl-nl [1, 0, 0, 1, 1, 0],bksl-nl [1, 0, 0, 1, 1, 1]bksl-nl ]bksl-nlbksl-nlbksl-nltab2 = [bksl-nl [0, 0, 0],bksl-nl [0, 0, 0]bksl-nl ]bksl-nlbksl-nlajoutepy-undbord(tab1)bksl-nlbksl-nlassert tab1 == [[0, 1, 1, 1, 0, 1, 4],bksl-nl [0, 0, 1, 0, 0, 1, 2],bksl-nl [1, 0, 0, 1, 1, 0, 3],bksl-nl [1, 0, 0, 1, 1, 1, 4]]bksl-nlbksl-nlajoutepy-undbord(tab2)bksl-nlbksl-nlassert tab2 == [[0, 0, 0, 0], [0, 0, 0, 0]]bksl-nlbksl-nl

A

Pas forcément simple.

Variantes :

  • on renvoie le plus petit numéro de colonne contenant le maximum de 1
🐍 Script Python
def max_col(tab):
    maxc = 0
    for j in range(len(tab[0])):
        somj = 0
        for i in range(len(tab)):
            somj += tab[i][j]
        if somj > maxc:
            maxc = somj
    return maxc
  • même exo mais avec la recherche des numéros de ligne
🐍 Script Python
def max_row(tab):
    maxr = 0
    inds_maxr = []
    for i in range(len(tab)):
        somi = 0
        for j in range(len(tab[0])):
            somi += tab[i][j]
        if somi > maxc:
            inds_maxr = [i]
            maxr = somi
        elif somi > 0 and somi == maxr:
            inds_maxc.append(i)
    return inds_maxr
  • on demande plutôt de rajouter une ligne avec le nombre de 1 par colonnes
🐍 Script Python
def bord_row(tab):
    new_tab = tab[:]
    new_tab.append([0 for _ in range(len(new_tab[0]))])
    for j in range(len(tab[0])):
        somj = 0
        for i in range(len(tab)):
            somj += tab[i][j]
        new_tab[len(tab)][j] = somj
    return new_tab

Z

Retour en haut de la page