Exercices sur les tableaux en python
Carré magique
exercice issu du site zonensi
Un carré magique d’ordre n est une matrice carrée n*n telle que que la somme des nombres sur chaque ligne, sur chaque colonne et sur chaque diagonale principale soient égales.
- Vérifier que la matrice M est bien un carré magique.:
M = [(4,9,2), (3,5,7), (8,1,6)]
- On se propose de construire une fonction vérifiant qu’une matrice de taille n*n est bien un carré magique:
- Créer une fonction
estCarre(M)qui vérifie que la matrice est bien carrée (son nombre de ligne est égal à son nombre de colonne). Cette fonction renverraTruedans ce cas, etFalsesinon. - Créer une fonction
sommeLigne(M,i)qui renvoie la somme des nombres de la ligne de la matrice M - Créer une fonction
sommeColonne(M,i)qui renvoie la somme des nombres de la colonne de la matrice M - Créer une fonction
sommeDiagPrincipale(M)qui renvoie la somme des nombres de la diagonale principale de M. (diagonale dont les éléments ont le même numéro de ligne et de colonne). - Créer une fonction
sommeDiagSecondaire(M)qui renvoie la somme des nombres de la diagonale non principale de M - En utilisant les fonctions précédentes, créer une fonction
estMagique(M)qui renvoieTruesi la matrice est magique, etFalsesinon.
- Ajouter des tests avec le module
doctest
Nous allons ajouter à nos fonctions des informations pour limiter les risques d’erreurs de programmation.
Ainsi, dans la fonction sommeLigne(M,i), on ajoutera les lignes dans le docstring:
def sommeLigne(M,i):
"""
>>> M = [(4,9,2),(3,5,7),(8,1,6)]
>>> sommeLigne(M,0)
15
"""
# script de la fonction
Puis, à la fin du programme:
if __name__ == "__main__":
import doctest
doctest.testmod()
Maintenant, lorsque vous executez le fichier, le module doctest va rechercher tous les tests simulés dans les docstrings, et vérifier les résultats. Un message affichera alors le nombre de tests reussis ou manqués.
Voir dans allophysique > Python avancé > 4. Programmer des tests avec Doctest
Ajouter un test avec son resultat dans chacune des fonctions programmées plus haut.
Créer un carré magique par tirage aléatoire
Au debut du programme, placer l’appel du module
random.randint:
from random import randint
La fonction randint fait le tirage aléatoire d’un entier compris entre les 2 bornes placées entre paramètres.
Exemple d’utilisation:
> M = []
> for j in range(3):
> M.append((randint(1,9),randint(1,9),randint(1,9)))
> M
[(5, 1, 8)]
Utiliser une boucle non bornée sur un nombre d’essais inférieur ou egal à 10000.
while essai < 10000:
A chaque essai:
- remplir une nouvelle fois la matrice
Mavec 3 tuples de 3 valeurs, choisies aléatoirement. - tester si la matrice
Mest un carré magique. - s’il s’agit d’un carré magique: sortir de la boucle (on peut utiliser la commande
break) - sinon, recommencer
A la fin (sortie de la boucle):
- Afficher la matrice
Ms’il s’agit d’un carré magique. - Afficher un autre message sinon. Par exemple: ’non trouvé'
Testez votre programme. Si celui-ci ne génère pas facilement un carré magique, augmentez le nombre d’essais possible dans la condition d’execution de la boucle.
Autre sujet: Le repertoire
Enoncé du TP sur la page levavasseur.xyz
Utilisez un Notebook sur CAPYTALE dans votre session ATRIUM.
