Notebook originel: cc_231012.ipynb
CC-231012 Science des données🔗
Consignes🔗
Créez un répertoire CC231012_NOM_Prenom/ dans lequel vous travaillerez, et où sera stocké le package python en développement, selon les instructions ci-dessous.
Vous devez alors mettre ce répertoire sous contrôle git sur un projet dédié sur le serveur https://gitlab.in2p3.fr, et en transmettre l’adresse à y.copin@ipnl.in2p3.fr.
Si, par manque de temps ou de connaissance, vous ne pouvez pas créer un dépôt git, envoyez par mail la distribution source du package à y.copin@ipnl.in2p3.fr (cette solution sera pénalisée dans la notation).
Carré magique🔗
Nous avons vu en exercice l’algorithme de création de carrés magiques d’ordre impair:
[1]:
def carremagique(n):
"""
Retourne le carré magique d'ordre n (impair).
"""
assert n % 2 == 1, f"L'ordre {n} n'est pas impair."
array = [[0 for j in range(n)] for i in range(n)]
i, j = n, (n + 1) // 2
array[i - 1][j - 1] = 1
for k in range(2, n**2 + 1):
i2 = (i + 1) % n
j2 = (j + 1) % n
if array[i2 - 1][j2 - 1] == 0:
i, j = i2, j2
else:
i = (i - 1) % n
array[i - 1][j - 1] = k
return array
Inclure cette fonction dans un fichier
carremagique.py.Y commenter succinctement ce code pour expliquer les différentes parties de l’algorithme.
Dans le même fichier, écrire une fonction
constante_magique(n)qui retourne la constante magique d’un carré magique d’ordre \(n\), c.-à-d. l’entier \(n\times(n^2+1)/2\).Ajouter une fonction booléenne
est_carre(array)testant si un tableau 2D est carré, c.-à-d. constitué de n listes de n éléments (utiliser les fonctions python all ou any).Ajouter une fonction booléenne
est_magique(array)testant si un tableau carré (pas nécessairement d’ordre impair) est magique, c.-à-d. que toutes les sommes des lignes, des colonnes et des diagonales sont égales à la constante magique du tableau.Cette fonction verifiera d’abord l’hypothèse que le tableau est carré (
assert).Pour réaliser le test, calculer d’abord la somme de toutes les lignes, et vérifier qu’elles sont toutes égales à la constante magique:
constante = constante_magique(len(array)) somme_lignes = [ sum(ligne) for ligne in array ] test_lignes = all([ somme == constante for somme in somme_lignes ])
Réaliser le même test sur les colonnes.
Réaliser le même test sur les deux diagonales principales.
Packaging🔗
Créer un package
carre_nom_prenomconstitué du seul modulecarremagique.pyprécédent, avec l’arborescence suivante:CC231012_Nom_Prenom/ ├── carre_nom_prenom │ ├── carremagique.py │ └── __init__.py ├── setup.cfg └── setup.py
avec les fichiers suivants (à adapter si nécessaire):
Créer un fichier
__main__.pyà votre package pour pouvoir exécuter:$ python -m carre_nom_prenom 5 11 18 25 2 9 10 12 19 21 3 4 6 13 20 22 23 5 7 14 16 17 24 1 8 15
Utiliser sys.argv (ou argparse pour un bonus) pour la gestion de l’argument sur la ligne de commande.
Commit/pushtoutes vos modifications sur votre répo centralgit, et envoyer l’adresse de ce répo à y.copin@ipnl.in2p3.fr.Si vous n’avez pas réussi à stocker votre package sous
git, générer une distribution des sources de votre package avec la commande$ python setup.py sdist
et envoyer l’archive correspondante (générée sous
dist/) à y.copin@ipnl.in2p3.fr.Si vous n’avez pas non plus réussi à configurer votre package, générer manuellement une archive de votre package:
$ tar cvzf CC231012_NOM_Prenom.tgz CC231012_NOM_Prenom/
et envoyer le tarball.
[ ]:
Cette page a été générée à partir de
cc_231012.ipynb.