diff --git a/representation_construits/chapitre_1/td/correction.ipynb b/representation_construits/chapitre_1/td/correction.ipynb
deleted file mode 100644
index 62d8aff..0000000
--- a/representation_construits/chapitre_1/td/correction.ipynb
+++ /dev/null
@@ -1,940 +0,0 @@
-{
- "cells": [
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "# TD : Les Listes\n",
- "\n",
- "Ce TD va nous permettre de manipuler les listes en Python."
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 1. Rappel\n",
- "\n",
- "Pour créer une liste en python, la syntaxe est la suivante :\n",
- "\n",
- "```python\n",
- ">>> liste = []\n",
- "```\n",
- "\n",
- "Pour ajouter un élément à une liste, on utilise la méthode `append` :\n",
- "\n",
- "```python\n",
- ">>> liste.append('NSI')\n",
- ">>> liste.append('ANGLAIS')\n",
- ">>> liste\n",
- "['NSI', 'ANGLAIS']\n",
- "```\n",
- "\n",
- "Pour accéder à un élément, on utilise son **indice** :\n",
- "\n",
- "```python\n",
- ">>> liste[0]\n",
- "'NSI'\n",
- ">>> liste[1]\n",
- "'ANGLAIS'\n",
- "```\n",
- "\n",
- "Il est également possible de créer une liste avec un ensemble d'éléments :\n",
- "\n",
- "```python\n",
- ">>> liste = ['NSI', 'ANGLAIS', 'PHYSIQUE']\n",
- ">>> liste\n",
- "['NSI', 'ANGLAIS', 'PHYSIQUE']\n",
- "```\n",
- "\n",
- "Il est possible d'obtenir la taille d'une liste, i.e le nombre d'éléments grâce à la méthode `len` :\n",
- "\n",
- "```python\n",
- ">>> len(liste)\n",
- "3\n",
- "```"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "## 2. Exercices"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Exercice 1 : Création de listes\n",
- "\n",
- "1. Créer contenant l'ensemble des noms des personnes dans la salle de TP\n",
- "2. Créer contenant l'ensemble des entiers pairs entre 0 et 20 inclus,\n",
- "3. Afficher uniquement les entiers du liste, construit à la question 2, qui sont multiples de 4.\n",
- "4. Créer une fonction `aleatoire` qui renvoie une liste de valeurs aléatoires. Elle prend 3 entiers en paramètre :\n",
- " - $n$ : le nombre d'éléments du liste\n",
- " - $min$ : la valeur minimale possible\n",
- " - $max$ : la valeur maximale possible"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 1\n",
- "personnes = ['Albert', 'Bertrand', 'Camille']"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 2\n",
- "pairs = [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 3\n",
- "for entier in pairs:\n",
- " if entier % 4 == 0:\n",
- " print(entier)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 4\n",
- "import random\n",
- "def aleatoire(n, min, max):\n",
- " liste = []\n",
- " for i in range(n):\n",
- " liste.append(random.randint(min, max))\n",
- " return liste"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Exercice 2 : Parcours et Recherche\n",
- "\n",
- "```python\n",
- ">>> groupe_1 = ['Alan', 'Brice', 'Chloé', 'Damien', 'Eléonore', 'Farid']\n",
- ">>> groupe_2 = ['Damien', 'Killian', 'Margot', 'Tom', 'Hugo', 'Killian']\n",
- "```\n",
- "\n",
- "1. Écrire une fonction `indice` qui prend en paramètre une liste de noms et un nom et permet d'obtenir l'indice du nom dans la liste.\n",
- "2. Écrire une fonction `est_present` qui prend en paramètre une liste et un nom et renvoie True si le nom est présent dans la liste, False sinon.\n",
- "3. Écrire une fonction `indices` qui prend en paramètre une liste de noms et un nom et permet d'obtenir l'ensemble des indices du nom dans la liste.\n",
- "4. Écrire une fonction `compte` qui prend en paramètre une liste de noms et un nom et permet d'obtenir le nombre d'occurrences du nom dans la liste."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 1\n",
- "def indice(liste, element):\n",
- " '''\n",
- " Indique l'indice où se situe l'élément dans le liste\n",
- " :param liste: (list) une liste\n",
- " :param element: (any) un élément\n",
- " :return: (int) le premier indice de l'élément dans le liste, None sinon\n",
- " :doctest:\n",
- " >>> indice([0, 1, 2, 3], 1)\n",
- " 1\n",
- " >>> indice([], 1) is None\n",
- " True\n",
- " >>> indice([3, 2, 0, 1], 1)\n",
- " 3\n",
- " >>> indice([3, 2, 1, 1], 1)\n",
- " 2\n",
- " '''\n",
- " i = 0\n",
- " while i < len(liste) and liste[i] != element:\n",
- " i += 1\n",
- " if i == len(liste):\n",
- " return None\n",
- " return i"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 2\n",
- "def est_present(liste, element):\n",
- " '''\n",
- " Indique si l'élément est dans la liste\n",
- " :param liste: (list) une liste\n",
- " :param element: (any) un élément\n",
- " :return: (bool) True si l'élément est dans la liste, False sinon\n",
- " :doctest;\n",
- " >>> est_present([0, 1, 2, 3], 1)\n",
- " True\n",
- " >>> est_present([], 1)\n",
- " False\n",
- " >>> est_present(['Belgique', 'Pays-Bas', 'Luxembourg'], 'France')\n",
- " False\n",
- " >>> est_present([3, 2, 1, 1], 1)\n",
- " True\n",
- " '''\n",
- " return indice(liste, element) is not None"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 3\n",
- "def indices(liste, element):\n",
- " '''\n",
- " Indique les indices où se situent l'élément dans le liste\n",
- " :param liste: (list) une liste\n",
- " :param element: (any) un élément\n",
- " :return: (list) les indices de l'élément dans le liste\n",
- " :doctest:\n",
- " >>> indices([0, 1, 2, 3], 1)\n",
- " [1]\n",
- " >>> indices([], 1)\n",
- " []\n",
- " >>> indices([3, 2, 0, 1], 1)\n",
- " [3]\n",
- " >>> indices([3, 1, 2, 1], 1)\n",
- " [1, 3]\n",
- " '''\n",
- " i = []\n",
- " for j in range(len(liste)):\n",
- " if liste[j] == element:\n",
- " i.append(j)\n",
- " return i"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 4\n",
- "def compte(liste, element):\n",
- " '''\n",
- " Compte le nombre d'occurrences de l'élément dans le liste\n",
- " :param liste: (list) une liste\n",
- " :param element: (any) un élément\n",
- " ;return: (int) le nombre d'occurrences de l'élément dans le liste\n",
- " :doctest:\n",
- " >>> compte([], 1)\n",
- " 0\n",
- " >>> compte([1], 1)\n",
- " 1\n",
- " >>> compte([0], 1)\n",
- " 0\n",
- " >>> compte([1, 0, 1, 0], 1)\n",
- " 2\n",
- " '''\n",
- " occurrences = 0\n",
- " for x in liste:\n",
- " if x == element:\n",
- " occurrences += 1\n",
- " return occurrences"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Exercice 3 : Agrégation\n",
- "\n",
- "```python\n",
- ">>> notes = [14.5, 13, 7, 10.25, 16, 12.5, 9.5]\n",
- "```\n",
- "\n",
- "1. Écrire une fonction `somme` qui prend en paramètre une liste de flottants et renvoie la somme des valeurs du liste.\n",
- "2. Écrire une fonction `moyenne` qui prend en paramètre une liste de flottants et renvoie la valeur moyenne du liste.\n",
- "3. Écrire une fonction `maximum` qui prend en paramètre une liste de flottants et renvoie la valeur maximale du liste. "
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 1\n",
- "def somme(liste):\n",
- " '''\n",
- " Calcule la somme des éléments du liste\n",
- " :param liste: (list) une liste\n",
- " :return: (int) la somme\n",
- " :doctest:\n",
- " >>> somme([1, 2, 3])\n",
- " 6\n",
- " >>> somme([1, -2, 3])\n",
- " 2\n",
- " >>> somme([])\n",
- " 0\n",
- " '''\n",
- " _somme = 0\n",
- " for element in liste:\n",
- " _somme += element\n",
- " return _somme"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 2\n",
- "def moyenne(liste):\n",
- " '''\n",
- " Calcule la moyenne des éléments du liste\n",
- " :param liste: (list) une liste\n",
- " :return: (float) la moyenne des éléments du liste\n",
- " :doctest:\n",
- " >>> moyenne([1, 1, 1])\n",
- " 1.0\n",
- " >>> moyenne([1, 2, 3])\n",
- " 2.0\n",
- " >>> moyenne([])\n",
- " Traceback (most recent call last):\n",
- " ...\n",
- " ZeroDivisionError: division by zero\n",
- " '''\n",
- " return somme(liste) / len(liste)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 3\n",
- "def maximum(liste):\n",
- " '''\n",
- " Trouve l'élément avec la valeur maximale du liste\n",
- " :param liste: (list) une liste\n",
- " :return: (int) l'élément de valeur maximale\n",
- " :doctest:\n",
- " >>> maximum([1, 2, 3])\n",
- " 3\n",
- " >>> maximum([-1, -2, -3])\n",
- " -1\n",
- " >>> maximum([]) is None\n",
- " True\n",
- " '''\n",
- " if len(liste) == 0:\n",
- " return None\n",
- " max = liste[0]\n",
- " for element in liste:\n",
- " if element > max:\n",
- " max = element\n",
- " return max"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Exercice 4 : Manipulations sur les listes\n",
- "\n",
- "Pour tester les fonctions de manipulations, nous utiliserons le Code Konami[wikipédia](https://fr.wikipedia.org/wiki/Code_Konami)\n",
- "\n",
- "```python\n",
- ">>> code = [\"↑\", \"↑\", \"↓\",\"↓\", \"←\", \"→\", \"←\", \"→\", \"B\", \"A\"]\n",
- "```\n",
- "\n",
- "1. Écrire une méthode `inverser` qui prend en paramètre une liste et a pour effet de bord d'inverser l'ensemble des valeurs du liste.\n",
- "2. Écrire une fonction `copie` qui prend en paramètre une liste et renvoie une copie du liste.\n",
- "3. Écrire une méthode `dedoublonner` qui prend en paramètre une liste et a pour effet de bord de supprimer les doublons d'une même valeur. \n",
- "4. Écrire une fonction `tranche` qui prend en paramètre une liste et deux entiers $min$ et $max$, et renvoie le sous-liste entre $min$ et $max$."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 1\n",
- "def inverser(liste):\n",
- " '''\n",
- " Inverse les éléments du liste\n",
- " :param liste: (list) une liste\n",
- " :doctest:\n",
- " >>> t = [1, 2, 3]\n",
- " >>> inverser(t)\n",
- " >>> t\n",
- " [3, 2, 1]\n",
- " >>> t = ['b', 'o', 'n', 'j', 'o', 'u', 'r']\n",
- " >>> inverser(t)\n",
- " >>> t\n",
- " ['r', 'u', 'o', 'j', 'n', 'o', 'b']\n",
- " '''\n",
- " debut = 0\n",
- " fin = len(liste) - 1\n",
- " \n",
- " while debut < fin:\n",
- " liste[debut], liste[fin] = liste[fin], liste[debut]\n",
- " debut += 1\n",
- " fin -= 1"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 2\n",
- "def copie(liste):\n",
- " '''\n",
- " Renvoie une copie du liste\n",
- " :param liste: (list) une liste\n",
- " :return: (list) une copie du liste\n",
- " :doctest:\n",
- " >>> copie([1, 1, 1, 1])\n",
- " [1, 1, 1, 1]\n",
- " >>> copie([1, 2, 3, 4])\n",
- " [1, 2, 3, 4]\n",
- " >>> copie([])\n",
- " []\n",
- " '''\n",
- " resultat = []\n",
- " for element in liste:\n",
- " resultat.append(element)\n",
- " return resultat"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 3\n",
- "def dedoublonner(liste):\n",
- " '''\n",
- " Renvoie une liste sans doublant\n",
- " :param liste: (list) une liste\n",
- " :return: (list) le liste sans doublon\n",
- " :doctest:\n",
- " >>> dedoublonner([1, 1, 1, 1])\n",
- " [1]\n",
- " >>> dedoublonner([1, 2, 3, 4])\n",
- " [1, 2, 3, 4]\n",
- " >>> dedoublonner([1, 2, 1, 4])\n",
- " [1, 2, 4]\n",
- " '''\n",
- " resultat = []\n",
- " for element in liste:\n",
- " if not est_present(resultat, element):\n",
- " resultat.append(element)\n",
- " return resultat"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 4\n",
- "def tranche(liste, debut, fin):\n",
- " '''\n",
- " Obtient une tranche du liste\n",
- " :param liste: (list) une liste\n",
- " :param debut: (int) l'indice du début de la tranche\n",
- " :param fin: (int) l'indice de fin de la tranche\n",
- " :return: (list) une liste contenant les éléments entre début et fin non inclus\n",
- " :doctest:\n",
- " >>> tranche([ i for i in range(10)], 0, 10)\n",
- " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]\n",
- " >>> tranche([ i for i in range(10)], 0, 5)\n",
- " [0, 1, 2, 3, 4]\n",
- " >>> tranche([ i for i in range(10)], 5, 10)\n",
- " [5, 6, 7, 8, 9]\n",
- " '''\n",
- " sous_liste = []\n",
- " for i in range(debut, fin):\n",
- " sous_liste.append(liste[i])\n",
- " return sous_liste"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "### Exercice 5 : Matrice\n",
- "\n",
- "1. Écrire une fonction `ligne` qui prend en paramètre une matrice et un indice de ligne en entrées et renvoie une liste avec l'ensemble des valeurs de la ligne.\n",
- "2. Écrire une fonction `colonne` qui prend en paramètre une matrice et un indice de colonne en entrées et renvoie une liste avec l'ensemble des valeurs de la colonne.\n",
- "3. Écrire une fonction `diagonale_nord_ouest` qui prend en paramètre une matrice et renvoie une liste avec l'ensemble des valeurs de la diagonale. La première valeur est celle à l'indice \\[0]\\[0] et la dernière celle correspondant à l'indice \\[len(matrice) - 1]\\[len(matrice) - 1].\n",
- "4. Écrire une fonction `diagonale_nord_est` qui prend en paramètre une matrice et renvoie une liste avec l'ensemble des valeurs de la diagonale. La première valeur est celle à l'indice \\[0]\\[len(matrice) - 1] et la dernière celle correspondant à l'indice \\[len(matrice) - 1]\\[0]."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 1\n",
- "def ligne(matrice, indice):\n",
- " '''\n",
- " Obtient une liste comportant l'ensemble des valeurs de la ligne indice de la matrice\n",
- " :param matrice: (list) une matrice\n",
- " :param indice: (int) un entier\n",
- " :return: (list) une liste de valeurs de la ligne indice\n",
- " :doctest:\n",
- " >>> ligne([[1, 2],[3, 4]], 0)\n",
- " [1, 2]\n",
- " >>> ligne([[1, 2],[3, 4]], 1)\n",
- " [3, 4]\n",
- " '''\n",
- " return matrice[indice]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 2\n",
- "def colonne(matrice, indice):\n",
- " '''\n",
- " Obtient une liste comportant l'ensemble des valeurs de la colonne indice de la matrice\n",
- " :param matrice: (list) une matrice\n",
- " :param indice: (int) un entier\n",
- " :return: (list) une liste de valeurs de la colonne indice\n",
- " :doctest:\n",
- " >>> colonne([[1, 2],[3, 4]], 0)\n",
- " [1, 3]\n",
- " >>> colonne([[1, 2],[3, 4]], 1)\n",
- " [2, 4]\n",
- " '''\n",
- " return [ matrice[i][indice] for i in range(len(matrice[0]))]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 3\n",
- "def diagonale_nord_ouest(matrice):\n",
- " '''\n",
- " Obtient les valeurs de la diagonale de la matrice, dont l'origine est la valeur correspondant à l'indice [0][0]\n",
- " :param matrice: (list) une matrice\n",
- " :return: (list) une liste de valeurs de la diagonale\n",
- " :doctest:\n",
- " >>> diagonale_nord_ouest([[1, 2], [3, 4]])\n",
- " [1, 4]\n",
- " >>> diagonale_nord_ouest([['A', 'D', 'C'], ['B', 'F', 'E'], ['H', 'I', 'G']])\n",
- " ['A', 'F', 'G']\n",
- " '''\n",
- " return [matrice[i][i] for i in range(0, len(matrice))]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 4\n",
- "def diagonale_nord_est(matrice):\n",
- " '''\n",
- " Obtient les valeurs de la diagonale de la matrice, dont l'origine est la valeur correspondant à l'indice [0][len(matrice) - 1]\n",
- " :param matrice: (list) une matrice\n",
- " :return: (list) une liste de valeurs de la diagonale\n",
- " :doctest:\n",
- " >>> diagonale_nord_est([[1, 2], [3, 4]])\n",
- " [2, 3]\n",
- " >>> diagonale_nord_est([['A', 'D', 'C'], ['B', 'F', 'E'], ['H', 'I', 'G']])\n",
- " ['C', 'F', 'H']\n",
- " '''\n",
- " return [matrice[i][len(matrice[0]) - 1 - i] for i in range(0, len(matrice))]"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### Application - Carré magique\n",
- "\n",
- "
\n",
- "Fig 1. - Carré d'ordre 4\n",
- "| 16 | 3 | 2 | 13 |
\n",
- "| 5 | 10 | 11 | 8 |
\n",
- "| 9 | 6 | 7 | 12 |
\n",
- "| 4 | 15 | 14 | 1 |
\n",
- "
\n",
- "\n",
- "\n",
- "En mathématiques, un ***carré magique*** d’ordre $n$ est composé de $n^2$ entiers strictement positifs, écrits sous la forme d’une liste carré. Ces nombres sont disposés de sorte que leurs sommes sur chaque rangée, sur chaque colonne et sur chaque diagonale principale soient égales. On nomme alors ***constante magique*** la valeur de ces sommes.\n",
- "\n",
- "\n",
- " Fig 1.1 - Carré magique avec sa constante égale à 34\n",
- " | 16 | 3 | 2 | 13 | →34 |
\n",
- " | 5 | 10 | 11 | 8 | →34 |
\n",
- " | 9 | 6 | 7 | 12 | →34 |
\n",
- " | 4 | 15 | 14 | 1 | →34 |
\n",
- "| ↙ 34 | ↓ 34 | ↓ 34 | ↓ 34 | ↓ 34 | ↘ 34 |
\n",
- "
\n",
- "\n",
- "\n",
- "> Écrire un prédicat `est_magique` qui prend une matrice d'entiers en paramètre et indique si le carré est magique ou non."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "def est_magique(matrice):\n",
- " '''\n",
- " Indique si le carré est magique ou non\n",
- " :param matrice: (list) un carré d'entiers\n",
- " :return: (bool) True si les sommes de chaque ligne, colonne et diagonale sont égales.\n",
- " :doctest:\n",
- " >>> est_magique([[2, 7, 6], [9, 5, 1], [4, 3, 8]])\n",
- " True\n",
- " >>> est_magique([[2, 7, 6], [9, 1, 5], [4, 3, 8]])\n",
- " False\n",
- " >>> est_magique([[16, 3, 2, 13], [5, 10, 11, 8], [9, 6, 7, 12], [4, 15, 14, 1]])\n",
- " True\n",
- " '''\n",
- " constante = somme(matrice[0])\n",
- " return (\n",
- " all([somme(ligne(matrice, i)) == constante for i in range(1, len(matrice))]) and\n",
- " all([somme(colonne(matrice, i)) == constante for i in range(0, len(matrice[0]))]) and\n",
- " somme(diagonale_nord_ouest(matrice)) == constante and\n",
- " somme(diagonale_nord_est(matrice)) == constante\n",
- " )"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### Carré magique de lettres\n",
- "\n",
- "Un ***carré magique de lettres***, également appelé « ***mots carrés*** », est une forme de mots croisés disposé en carré, ne comportant pas de case noire et constitué de mots valides dans une langue définie. Ils peuvent, par définition, être lus horizontalement et verticalement et présentent dans ces deux sens les mêmes mots.\n",
- "\n",
- "\n",
- " Fig.2.1 - Carré magique de lettres d'ordre 3\n",
- "| T | E | L |
\n",
- "| E | T | E |
\n",
- "| L | E | S |
\n",
- "
\n",
- "\n",
- "\n",
- " Fig.2.2 - Carré magique de lettres d'ordre 5\n",
- "| C | U | L | T | E |
\n",
- "| U | N | I | E | S |
\n",
- "| L | I | O | N | S |
\n",
- "| T | E | N | T | A |
\n",
- "| E | S | S | A | I |
\n",
- "
\n",
- "\n",
- "> Écrire un prédicat `est_magique_lettres` qui prend une matrice de caractères en paramètre et indique si le carré est magique de lettres ou non."
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "def est_magique_lettres(matrice):\n",
- " '''\n",
- " Indique si une matrice de caractères est un carré magique ou non\n",
- " :param matrice: (list) une matrice de caractères\n",
- " :return: (bool) True si la matrice est un carré magique de lettres, False sinon\n",
- " :doctest:\n",
- " >>> est_magique_lettres([['T', 'E', 'L'], ['E', 'T', 'E'], ['L', 'E', 'S']])\n",
- " True\n",
- " >>> est_magique_lettres([['T', 'E', 'L'], ['E', 'R', 'E'], ['L', 'A', 'S']])\n",
- " False\n",
- " >>> est_magique_lettres([['S', 'A', 'T', 'O', 'R'], ['A', 'R', 'E', 'P', 'O'], ['T', 'E', 'N', 'E', 'T'], ['O', 'P', 'E', 'R', 'A'], ['R', 'O', 'T', 'A', 'S']])\n",
- " True\n",
- " '''\n",
- " return all([ ligne(matrice, i) == colonne(matrice, i) for i in range(len(matrice))])"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "#### Application - Pour aller plus loin\n",
- "\n",
- "\n",
- " Fig.3 - Dessin d'une maison\n",
- "| ⚪ | ⚪ | ⚪ | ⚫ | ⚪ | ⚪ |
\n",
- "| ⚪ | ⚪ | ⚫ | ⚪ | ⚫ | ⚪ |
\n",
- "| ⚪ | ⚫ | ⚪ | ⚪ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚫ | ⚪ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "
\n",
- "\n",
- "Déclaration de la matrice correspondante à la Fig.1 :\n",
- "```python\n",
- "matrice = [\n",
- " ['⚪', '⚪', '⚪', '⚫', '⚪', '⚪'],\n",
- " ['⚪', '⚪', '⚫', '⚪', '⚫', '⚪'],\n",
- " ['⚪', '⚫', '⚪', '⚪', '⚪', '⚫'],\n",
- " ['⚫', '⚫', '⚫', '⚫', '⚫', '⚫'],\n",
- " ['⚫', '⚪', '⚫', '⚪', '⚪', '⚫'],\n",
- " ['⚫', '⚫', '⚫', '⚫', '⚫', '⚫']\n",
- "]\n",
- "```"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "1. Écrire une méthode `miroir_vertical` qui prend en paramètre une matrice et a pour effet de bord de réaliser l'effet miroir vertical sur les valeurs de la matrice.\n",
- "\n",
- "\n",
- " Fig.3.1 - Effet miroir vertical de la Fig.4\n",
- "| ⚪ | ⚪ | ⚫ | ⚪ | ⚪ | ⚪ |
\n",
- "| ⚪ | ⚫ | ⚪ | ⚫ | ⚪ | ⚪ |
\n",
- "| ⚫ | ⚪ | ⚪ | ⚪ | ⚫ | ⚪ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚪ | ⚫ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 1\n",
- "def miroir_vertical(matrice):\n",
- " '''\n",
- " Applique l'effet miroir par rapport à l'axe vertical sur une matrice\n",
- " :param matrice: (list) une matrice\n",
- " :doctest:\n",
- " >>> matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n",
- " >>> miroir_vertical(matrice)\n",
- " >>> matrice\n",
- " [[3, 2, 1], [6, 5, 4], [9, 8, 7]]\n",
- " >>> matrice = [['⚫', '⚪', '⚫'], ['⚪', '⚪', '⚫'], ['⚪', '⚫', '⚪']]\n",
- " >>> miroir_vertical(matrice)\n",
- " >>> matrice\n",
- " [['⚫', '⚪', '⚫'], ['⚫', '⚪', '⚪'], ['⚪', '⚫', '⚪']]\n",
- " '''\n",
- " for liste in matrice:\n",
- " inverser(liste)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "2. Écrire une méthode `miroir_horizontal` qui prend en paramètre une matrice et a pour effet de bord de réaliser l'effet miroir horizontal sur les valeurs de la matrice.\n",
- "\n",
- "\n",
- " Fig.3.2 - Effet miroir horizontal de la Fig.4\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚫ | ⚪ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚪ | ⚫ | ⚪ | ⚪ | ⚪ | ⚫ |
\n",
- "| ⚪ | ⚪ | ⚫ | ⚪ | ⚫ | ⚪ |
\n",
- "| ⚪ | ⚪ | ⚪ | ⚫ | ⚪ | ⚪ |
\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 2\n",
- "def miroir_horizontal(matrice):\n",
- " '''\n",
- " Applique l'effet miroir par rapport à l'axe horizontal sur une matrice\n",
- " :param matrice: (list) une matrice\n",
- " :doctest:\n",
- " >>> matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n",
- " >>> miroir_horizontal(matrice)\n",
- " >>> matrice\n",
- " [[7, 8, 9], [4, 5, 6], [1, 2, 3]]\n",
- " >>> matrice = [['⚫', '⚪', '⚫'], ['⚪', '⚪', '⚫'], ['⚪', '⚫', '⚪']]\n",
- " >>> miroir_horizontal(matrice)\n",
- " >>> matrice\n",
- " [['⚪', '⚫', '⚪'], ['⚪', '⚪', '⚫'], ['⚫', '⚪', '⚫']]\n",
- " '''\n",
- " inverser(matrice)"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "3. Écrire une fonction `rotation_horaire` qui prend en paramètre une matrice et renvoie une matrice dont les valeurs correspondent à la rotation dans le sens horaire des valeurs de la matrice.\n",
- "\n",
- "\n",
- " Fig.3.3 - Roration horaire de la Fig.4\n",
- "| ⚫ | ⚫ | ⚫ | ⚪ | ⚪ | ⚪ |
\n",
- "| ⚫ | ⚪ | ⚫ | ⚫ | ⚪ | ⚪ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚪ | ⚫ | ⚪ |
\n",
- "| ⚫ | ⚪ | ⚫ | ⚪ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚫ | ⚪ | ⚫ | ⚪ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚪ | ⚪ |
\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 3\n",
- "def rotation_horaire(matrice):\n",
- " '''\n",
- " :param matrice: (list) une matrice\n",
- " :doctest:\n",
- " >>> matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n",
- " >>> rotation_horaire(matrice)\n",
- " [[7, 4, 1], [8, 5, 2], [9, 6, 3]]\n",
- " >>> matrice = [['⚫', '⚪', '⚫'], ['⚪', '⚪', '⚫'], ['⚪', '⚫', '⚪']]\n",
- " >>> rotation_horaire(matrice)\n",
- " [['⚪', '⚪', '⚫'], ['⚫', '⚪', '⚪'], ['⚪', '⚫', '⚫']]\n",
- " '''\n",
- " resultat = []\n",
- " for i in range(len(matrice[0])):\n",
- " resultat.append(colonne(matrice, i))\n",
- " miroir_vertical(resultat)\n",
- " return resultat"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "4. Écrire une fonction `rotation_anti_horaire` qui prend en paramètre une matrice et renvoie une matrice dont les valeurs correspondent à la rotation dans le sens anti-horaire des valeurs de la matrice.\n",
- "\n",
- "\n",
- " Fig.3.4 - Roration anti-horaire de la Fig.4\n",
- "| ⚪ | ⚪ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚪ | ⚫ | ⚪ | ⚫ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚪ | ⚫ | ⚪ | ⚫ |
\n",
- "| ⚪ | ⚫ | ⚪ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚪ | ⚪ | ⚫ | ⚫ | ⚪ | ⚫ |
\n",
- "| ⚪ | ⚪ | ⚪ | ⚫ | ⚫ | ⚫ |
\n",
- "
"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Question 4\n",
- "def rotation_anti_horaire(matrice):\n",
- " '''\n",
- " :param matrice: (list) une matrice\n",
- " :doctest:\n",
- " >>> matrice = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]\n",
- " >>> rotation_anti_horaire(matrice)\n",
- " [[3, 6, 9], [2, 5, 8], [1, 4, 7]]\n",
- " >>> matrice = [['⚫', '⚪', '⚫'], ['⚪', '⚪', '⚫'], ['⚪', '⚫', '⚪']]\n",
- " >>> rotation_anti_horaire(matrice)\n",
- " [['⚫', '⚫', '⚪'], ['⚪', '⚪', '⚫'], ['⚫', '⚪', '⚪']]\n",
- " '''\n",
- " resultat = []\n",
- " for i in range(len(matrice[0]) - 1, -1, -1):\n",
- " resultat.append(colonne(matrice, i))\n",
- " return resultat"
- ]
- },
- {
- "cell_type": "markdown",
- "metadata": {},
- "source": [
- "Pour valider vos fonctions, vous pouvez réaliser sur papier les opérations miroir et de rotation sur la Fig.4 et vérifier que les résultats obtenus sont conformes.\n",
- "\n",
- "\n",
- " Fig.4 - Dessin d'un bateau avec une mouette\n",
- "| ⚪ | ⚪ | ⚫ | ⚪ | ⚪ | ⚪ | ⚪ |
\n",
- "| ⚪ | ⚫ | ⚫ | ⚪ | ⚫ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚫ | ⚪ | ⚪ | ⚫ | ⚪ |
\n",
- "| ⚪ | ⚫ | ⚫ | ⚪ | ⚪ | ⚪ | ⚪ |
\n",
- "| ⚪ | ⚪ | ⚫ | ⚪ | ⚪ | ⚪ | ⚪ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚪ | ⚪ | ⚪ | ⚪ | ⚫ |
\n",
- "| ⚪ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚪ |
\n",
- "
\n",
- "\n",
- "Déclaration de la matrice correspondante à la Fig.4 :\n",
- "```python\n",
- "matrice = [\n",
- " ['⚪', '⚪', '⚫', '⚪', '⚪', '⚪', '⚪'],\n",
- " ['⚪', '⚫', '⚫', '⚪', '⚫', '⚪', '⚫'],\n",
- " ['⚫', '⚪', '⚫', '⚪', '⚪', '⚫', '⚪'],\n",
- " ['⚪', '⚫', '⚫', '⚪', '⚪', '⚪', '⚪'],\n",
- " ['⚪', '⚪', '⚫', '⚪', '⚪', '⚪', '⚪'],\n",
- " ['⚫', '⚫', '⚫', '⚫', '⚫', '⚫', '⚫'],\n",
- " ['⚫', '⚪', '⚪', '⚪', '⚪', '⚪', '⚫'],\n",
- " ['⚪', '⚫', '⚫', '⚫', '⚫', '⚫', '⚪']\n",
- "]\n",
- "```"
- ]
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "Python 3",
- "language": "python",
- "name": "python3"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.9.7"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
-}