ajout representation construits
This commit is contained in:
572
representation_construits/chapitre_1/td/TD.ipynb
Normal file
572
representation_construits/chapitre_1/td/TD.ipynb
Normal file
@@ -0,0 +1,572 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# TD : Les Tableaux\n",
|
||||
"\n",
|
||||
"Ce TD va nous permettre de manipuler les tableaux en Python."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 1. Rappel\n",
|
||||
"\n",
|
||||
"Pour créer un tableau en python, la syntaxe est la suivante :\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> tableau = []\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Pour ajouter un élément à un tableau, on utilise la méthode `append` :\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> tableau.append('NSI')\n",
|
||||
">>> tableau.append('ANGLAIS')\n",
|
||||
">>> tableau\n",
|
||||
"['NSI', 'ANGLAIS']\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Pour accéder à un élément, on utilise son **indice** :\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> tableau[0]\n",
|
||||
"'NSI'\n",
|
||||
">>> tableau[1]\n",
|
||||
"'ANGLAIS'\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Il est également possible de créer un tableau avec un ensemble d'éléments :\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> tableau = ['NSI', 'ANGLAIS', 'PHYSIQUE']\n",
|
||||
">>> tableau\n",
|
||||
"['NSI', 'ANGLAIS', 'PHYSIQUE']\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Il est possible d'obtenir la taille du tableau, i.e le nombre d'éléments grâce à la méthode `len` :\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> len(tableau)\n",
|
||||
"3\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 2. Exercices"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Exercice 1 : Création de tableaux\n",
|
||||
"\n",
|
||||
"1. Créer un tableau contenant l'ensemble des noms des personnes dans la salle de TP\n",
|
||||
"2. Créer un tableau contenant l'ensemble des entiers pairs entre 0 et 20 inclus,\n",
|
||||
"3. Afficher uniquement les entiers du tableau, construit à la question 2, qui sont multiples de 4.\n",
|
||||
"4. Créer une fonction `aleatoire` qui renvoie un tableau de valeurs aléatoires. Elle prend 3 entiers en paramètre :\n",
|
||||
" - $n$ : le nombre d'éléments du tableau\n",
|
||||
" - $min$ : la valeur minimale possible\n",
|
||||
" - $max$ : la valeur maximale possible"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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 un tableau de noms et un nom et permet d'obtenir l'indice du nom dans le tableau.\n",
|
||||
"2. Écrire une fonction `est_present` qui prend en paramètre un tableau et un nom et renvoie True si le nom est présent dans le tableau, False sinon.\n",
|
||||
"3. Écrire une fonction `indices` qui prend en paramètre un tableau de noms et un nom et permet d'obtenir l'ensemble des indices du nom dans le tableau.\n",
|
||||
"4. Écrire une fonction `compte` qui prend en paramètre un tableau de noms et un nom et permet d'obtenir le nombre d'occurrences du nom dans le tableau."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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 un tableau de flottants et renvoie la somme des valeurs du tableau.\n",
|
||||
"2. Écrire une fonction `moyenne` qui prend en paramètre un tableau de flottants et renvoie la valeur moyenne du tableau.\n",
|
||||
"3. Écrire une fonction `maximum` qui prend en paramètre un tableau de flottants et renvoie la valeur maximale du tableau. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Exercice 4 : Manipulations sur les tableaux\n",
|
||||
"\n",
|
||||
"Pour tester les fonctions de manipulations, nous utiliserons le Code Konami<sup>[wikipédia](https://fr.wikipedia.org/wiki/Code_Konami)</sup>\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> code = [\"↑\", \"↑\", \"↓\",\"↓\", \"←\", \"→\", \"←\", \"→\", \"B\", \"A\"]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"1. Écrire une méthode `inverser` qui prend en paramètre un tableau et a pour effet de bord d'inverser l'ensemble des valeurs du tableau.\n",
|
||||
"2. Écrire une fonction `copie` qui prend en paramètre un tableau et renvoie une copie du tableau.\n",
|
||||
"3. Écrire une méthode `dedoublonner` qui prend en paramètre un tableau 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 un tableau et deux entiers $min$ et $max$, et renvoie le sous-tableau entre $min$ et $max$."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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 un tableau 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 un tableau 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 un tableau 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 un tableau 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"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"#### Application - Carré magique\n",
|
||||
"\n",
|
||||
"<table style=\"margin : 0 auto 0 auto; width:100px;text-align:center;\">\n",
|
||||
"<caption style=\"caption-side:bottom;\">Fig 1. - Carré d'ordre 4</caption>\n",
|
||||
"<tr style=\"border:none;\"><td>16</td><td>3</td><td>2</td><td>13</td></tr>\n",
|
||||
"<tr style=\"border:none;\"><td>5</td><td>10</td><td>11</td><td>8</td></tr>\n",
|
||||
"<tr style=\"border:none;\"><td>9</td><td>6</td><td>7</td><td>12</td></tr>\n",
|
||||
"<tr style=\"border:none;\"><td>4</td><td>15</td><td>14</td><td>1</td></tr>\n",
|
||||
"</table>\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’un tableau 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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width:100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig 1.1 - Carré magique avec sa constante égale à 34</caption>\n",
|
||||
"<tr style=\"border:none;\"><th style=\"border : none;\"></th><td>16</td><td>3</td><td>2</td><td>13</td><th style=\"border : none;padding-left:.5em;\">→34</th></tr>\n",
|
||||
"<tr style=\"border:none;\"><th style=\"border : none;\"></th><td>5</td><td>10</td><td>11</td><td>8</td><th style=\"border : none;padding-left:.5em;\">→34</th></tr>\n",
|
||||
"<tr style=\"border:none;\"><th style=\"border : none;\"></th><td>9</td><td>6</td><td>7</td><td>12</td><th style=\"border : none;padding-left:.5em;\">→34</th></tr>\n",
|
||||
"<tr style=\"border:none;\"><th style=\"border : none;\"></th><td>4</td><td>15</td><td>14</td><td>1</td><th style=\"border : none;padding-left:.5em;\">→34</th></tr>\n",
|
||||
"<tr style=\"border:none;\"><th style=\"border : none;\">↙ 34</th><th style=\"border:none;\">↓ 34</th><th style=\"border:none;\">↓ 34</th><th style=\"border:none;\">↓ 34</th><th style=\"border:none;\">↓ 34</th><th style=\"border:none;\">↘ 34</th></tr>\n",
|
||||
"</table>\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": []
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.2.1 - Carré magique de lettres d'ordre 3</caption>\n",
|
||||
"<tr><td>T</td><td>E</td><td>L</td></tr>\n",
|
||||
"<tr><td>E</td><td>T</td><td>E</td></tr>\n",
|
||||
"<tr><td>L</td><td>E</td><td>S</td></tr>\n",
|
||||
"</table>\n",
|
||||
"\n",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.2.2 - Carré magique de lettres d'ordre 5</caption>\n",
|
||||
"<tr><td>C</td><td>U</td><td>L</td><td>T</td><td>E</td></tr>\n",
|
||||
"<tr><td>U</td><td>N</td><td>I</td><td>E</td><td>S</td></tr>\n",
|
||||
"<tr><td>L</td><td>I</td><td>O</td><td>N</td><td>S</td></tr>\n",
|
||||
"<tr><td>T</td><td>E</td><td>N</td><td>T</td><td>A</td></tr>\n",
|
||||
"<tr><td>E</td><td>S</td><td>S</td><td>A</td><td>I</td></tr>\n",
|
||||
"</table>\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": []
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"#### Application - Pour aller plus loin\n",
|
||||
"\n",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.3 - Dessin d'une maison</caption>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"</table>\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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.3.1 - Effet miroir vertical de la Fig.4</caption>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"</table>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.3.2 - Effet miroir horizontal de la Fig.4</caption>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"</table>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 2"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.3.3 - Roration horaire de la Fig.4</caption>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"</table>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 3"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.3.4 - Roration anti-horaire de la Fig.4</caption>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"</table>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 4"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.4 - Dessin d'un bateau avec une mouette</caption>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"</table>\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
|
||||
}
|
||||
940
representation_construits/chapitre_1/td/correction.ipynb
Normal file
940
representation_construits/chapitre_1/td/correction.ipynb
Normal file
@@ -0,0 +1,940 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# TD : Les Tableaux\n",
|
||||
"\n",
|
||||
"Ce TD va nous permettre de manipuler les tableaux en Python."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 1. Rappel\n",
|
||||
"\n",
|
||||
"Pour créer un tableau en python, la syntaxe est la suivante :\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> tableau = []\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Pour ajouter un élément à un tableau, on utilise la méthode `append` :\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> tableau.append('NSI')\n",
|
||||
">>> tableau.append('ANGLAIS')\n",
|
||||
">>> tableau\n",
|
||||
"['NSI', 'ANGLAIS']\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Pour accéder à un élément, on utilise son **indice** :\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> tableau[0]\n",
|
||||
"'NSI'\n",
|
||||
">>> tableau[1]\n",
|
||||
"'ANGLAIS'\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Il est également possible de créer un tableau avec un ensemble d'éléments :\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> tableau = ['NSI', 'ANGLAIS', 'PHYSIQUE']\n",
|
||||
">>> tableau\n",
|
||||
"['NSI', 'ANGLAIS', 'PHYSIQUE']\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"Il est possible d'obtenir la taille du tableau, i.e le nombre d'éléments grâce à la méthode `len` :\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> len(tableau)\n",
|
||||
"3\n",
|
||||
"```"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"## 2. Exercices"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Exercice 1 : Création de tableaux\n",
|
||||
"\n",
|
||||
"1. Créer un tableau contenant l'ensemble des noms des personnes dans la salle de TP\n",
|
||||
"2. Créer un tableau contenant l'ensemble des entiers pairs entre 0 et 20 inclus,\n",
|
||||
"3. Afficher uniquement les entiers du tableau, construit à la question 2, qui sont multiples de 4.\n",
|
||||
"4. Créer une fonction `aleatoire` qui renvoie un tableau de valeurs aléatoires. Elle prend 3 entiers en paramètre :\n",
|
||||
" - $n$ : le nombre d'éléments du tableau\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",
|
||||
" tableau = []\n",
|
||||
" for i in range(n):\n",
|
||||
" tableau.append(random.randint(min, max))\n",
|
||||
" return tableau"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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 un tableau de noms et un nom et permet d'obtenir l'indice du nom dans le tableau.\n",
|
||||
"2. Écrire une fonction `est_present` qui prend en paramètre un tableau et un nom et renvoie True si le nom est présent dans le tableau, False sinon.\n",
|
||||
"3. Écrire une fonction `indices` qui prend en paramètre un tableau de noms et un nom et permet d'obtenir l'ensemble des indices du nom dans le tableau.\n",
|
||||
"4. Écrire une fonction `compte` qui prend en paramètre un tableau de noms et un nom et permet d'obtenir le nombre d'occurrences du nom dans le tableau."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 1\n",
|
||||
"def indice(tableau, element):\n",
|
||||
" '''\n",
|
||||
" Indique l'indice où se situe l'élément dans le tableau\n",
|
||||
" :param tableau: (list) un tableau\n",
|
||||
" :param element: (any) un élément\n",
|
||||
" :return: (int) le premier indice de l'élément dans le tableau, 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(tableau) and tableau[i] != element:\n",
|
||||
" i += 1\n",
|
||||
" if i == len(tableau):\n",
|
||||
" return None\n",
|
||||
" return i"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 2\n",
|
||||
"def est_present(tableau, element):\n",
|
||||
" '''\n",
|
||||
" Indique si l'élément est dans la liste\n",
|
||||
" :param tableau: (list) un tableau\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(tableau, element) is not None"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 3\n",
|
||||
"def indices(tableau, element):\n",
|
||||
" '''\n",
|
||||
" Indique les indices où se situent l'élément dans le tableau\n",
|
||||
" :param tableau: (list) un tableau\n",
|
||||
" :param element: (any) un élément\n",
|
||||
" :return: (list) les indices de l'élément dans le tableau\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(tableau)):\n",
|
||||
" if tableau[j] == element:\n",
|
||||
" i.append(j)\n",
|
||||
" return i"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 4\n",
|
||||
"def compte(tableau, element):\n",
|
||||
" '''\n",
|
||||
" Compte le nombre d'occurrences de l'élément dans le tableau\n",
|
||||
" :param tableau: (list) Un tableau\n",
|
||||
" :param element: (any) un élément\n",
|
||||
" ;return: (int) le nombre d'occurrences de l'élément dans le tableau\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 tableau:\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 un tableau de flottants et renvoie la somme des valeurs du tableau.\n",
|
||||
"2. Écrire une fonction `moyenne` qui prend en paramètre un tableau de flottants et renvoie la valeur moyenne du tableau.\n",
|
||||
"3. Écrire une fonction `maximum` qui prend en paramètre un tableau de flottants et renvoie la valeur maximale du tableau. "
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 1\n",
|
||||
"def somme(tableau):\n",
|
||||
" '''\n",
|
||||
" Calcule la somme des éléments du tableau\n",
|
||||
" :param tableau: (list) une tableau\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 tableau:\n",
|
||||
" _somme += element\n",
|
||||
" return _somme"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 2\n",
|
||||
"def moyenne(tableau):\n",
|
||||
" '''\n",
|
||||
" Calcule la moyenne des éléments du tableau\n",
|
||||
" :param tableau: (list) un tableau\n",
|
||||
" :return: (float) la moyenne des éléments du tableau\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(tableau) / len(tableau)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 3\n",
|
||||
"def maximum(tableau):\n",
|
||||
" '''\n",
|
||||
" Trouve l'élément avec la valeur maximale du tableau\n",
|
||||
" :param tableau: (list) un tableau\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(tableau) == 0:\n",
|
||||
" return None\n",
|
||||
" max = tableau[0]\n",
|
||||
" for element in tableau:\n",
|
||||
" if element > max:\n",
|
||||
" max = element\n",
|
||||
" return max"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"### Exercice 4 : Manipulations sur les tableaux\n",
|
||||
"\n",
|
||||
"Pour tester les fonctions de manipulations, nous utiliserons le Code Konami<sup>[wikipédia](https://fr.wikipedia.org/wiki/Code_Konami)</sup>\n",
|
||||
"\n",
|
||||
"```python\n",
|
||||
">>> code = [\"↑\", \"↑\", \"↓\",\"↓\", \"←\", \"→\", \"←\", \"→\", \"B\", \"A\"]\n",
|
||||
"```\n",
|
||||
"\n",
|
||||
"1. Écrire une méthode `inverser` qui prend en paramètre un tableau et a pour effet de bord d'inverser l'ensemble des valeurs du tableau.\n",
|
||||
"2. Écrire une fonction `copie` qui prend en paramètre un tableau et renvoie une copie du tableau.\n",
|
||||
"3. Écrire une méthode `dedoublonner` qui prend en paramètre un tableau 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 un tableau et deux entiers $min$ et $max$, et renvoie le sous-tableau entre $min$ et $max$."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 1\n",
|
||||
"def inverser(tableau):\n",
|
||||
" '''\n",
|
||||
" Inverse les éléments du tableau\n",
|
||||
" :param tableau: (list) un tableau\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(tableau) - 1\n",
|
||||
" \n",
|
||||
" while debut < fin:\n",
|
||||
" tableau[debut], tableau[fin] = tableau[fin], tableau[debut]\n",
|
||||
" debut += 1\n",
|
||||
" fin -= 1"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 2\n",
|
||||
"def copie(tableau):\n",
|
||||
" '''\n",
|
||||
" Renvoie une copie du tableau\n",
|
||||
" :param tableau: (list) un tableau\n",
|
||||
" :return: (list) une copie du tableau\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 tableau:\n",
|
||||
" resultat.append(element)\n",
|
||||
" return resultat"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"# Question 3\n",
|
||||
"def dedoublonner(tableau):\n",
|
||||
" '''\n",
|
||||
" Renvoie un tableau sans doublant\n",
|
||||
" :param tableau: (list) un tableau\n",
|
||||
" :return: (list) le tableau 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 tableau:\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(tableau, debut, fin):\n",
|
||||
" '''\n",
|
||||
" Obtient une tranche du tableau\n",
|
||||
" :param tableau: (list) un tableau\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) un tableau 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_tableau = []\n",
|
||||
" for i in range(debut, fin):\n",
|
||||
" sous_tableau.append(tableau[i])\n",
|
||||
" return sous_tableau"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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 un tableau 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 un tableau 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 un tableau 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 un tableau 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 un tableau 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) un tableau 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 un tableau 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) un tableau 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) un tableau 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) un tableau 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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width:100px;text-align:center;\">\n",
|
||||
"<caption style=\"caption-side:bottom;\">Fig 1. - Carré d'ordre 4</caption>\n",
|
||||
"<tr style=\"border:none;\"><td>16</td><td>3</td><td>2</td><td>13</td></tr>\n",
|
||||
"<tr style=\"border:none;\"><td>5</td><td>10</td><td>11</td><td>8</td></tr>\n",
|
||||
"<tr style=\"border:none;\"><td>9</td><td>6</td><td>7</td><td>12</td></tr>\n",
|
||||
"<tr style=\"border:none;\"><td>4</td><td>15</td><td>14</td><td>1</td></tr>\n",
|
||||
"</table>\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’un tableau 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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width:100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig 1.1 - Carré magique avec sa constante égale à 34</caption>\n",
|
||||
"<tr style=\"border:none;\"><th style=\"border : none;\"></th><td>16</td><td>3</td><td>2</td><td>13</td><th style=\"border : none;padding-left:.5em;\">→34</th></tr>\n",
|
||||
"<tr style=\"border:none;\"><th style=\"border : none;\"></th><td>5</td><td>10</td><td>11</td><td>8</td><th style=\"border : none;padding-left:.5em;\">→34</th></tr>\n",
|
||||
"<tr style=\"border:none;\"><th style=\"border : none;\"></th><td>9</td><td>6</td><td>7</td><td>12</td><th style=\"border : none;padding-left:.5em;\">→34</th></tr>\n",
|
||||
"<tr style=\"border:none;\"><th style=\"border : none;\"></th><td>4</td><td>15</td><td>14</td><td>1</td><th style=\"border : none;padding-left:.5em;\">→34</th></tr>\n",
|
||||
"<tr style=\"border:none;\"><th style=\"border : none;\">↙ 34</th><th style=\"border:none;\">↓ 34</th><th style=\"border:none;\">↓ 34</th><th style=\"border:none;\">↓ 34</th><th style=\"border:none;\">↓ 34</th><th style=\"border:none;\">↘ 34</th></tr>\n",
|
||||
"</table>\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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.2.1 - Carré magique de lettres d'ordre 3</caption>\n",
|
||||
"<tr><td>T</td><td>E</td><td>L</td></tr>\n",
|
||||
"<tr><td>E</td><td>T</td><td>E</td></tr>\n",
|
||||
"<tr><td>L</td><td>E</td><td>S</td></tr>\n",
|
||||
"</table>\n",
|
||||
"\n",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.2.2 - Carré magique de lettres d'ordre 5</caption>\n",
|
||||
"<tr><td>C</td><td>U</td><td>L</td><td>T</td><td>E</td></tr>\n",
|
||||
"<tr><td>U</td><td>N</td><td>I</td><td>E</td><td>S</td></tr>\n",
|
||||
"<tr><td>L</td><td>I</td><td>O</td><td>N</td><td>S</td></tr>\n",
|
||||
"<tr><td>T</td><td>E</td><td>N</td><td>T</td><td>A</td></tr>\n",
|
||||
"<tr><td>E</td><td>S</td><td>S</td><td>A</td><td>I</td></tr>\n",
|
||||
"</table>\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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.3 - Dessin d'une maison</caption>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"</table>\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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.3.1 - Effet miroir vertical de la Fig.4</caption>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"</table>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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 tableau in matrice:\n",
|
||||
" inverser(tableau)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.3.2 - Effet miroir horizontal de la Fig.4</caption>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"</table>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.3.3 - Roration horaire de la Fig.4</caption>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"</table>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.3.4 - Roration anti-horaire de la Fig.4</caption>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"</table>"
|
||||
]
|
||||
},
|
||||
{
|
||||
"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",
|
||||
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
|
||||
" <caption style=\"caption-side:bottom;\">Fig.4 - Dessin d'un bateau avec une mouette</caption>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚪</td><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚫</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚪</td><td>⚫</td></tr>\n",
|
||||
"<tr><td>⚪</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚫</td><td>⚪</td></tr>\n",
|
||||
"</table>\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
|
||||
}
|
||||
Reference in New Issue
Block a user