====== Programmation en Python ======
===== Environnements de programmation =====
IDE [[https://www.jetbrains.com/pycharm/|PyCharm]]\\
IDE [[https://www.spyder-ide.org/|Spyder]]\\
Distribution [[https://www.anaconda.com/distribution/|Anaconda]] incluant Spyder\\
Environnement pédagogique [[https://thonny.org/|Thonny]]\\
Environnement pédagogique [[https://edupython.tuxfamily.org/|EduPython]]
==== Editeurs de texte ====
[[https://www.sublimetext.com/|Sublime Text]]\\
[[https://notepad-plus-plus.org/fr/|Notepad++]]\\
[[https://visualstudio.microsoft.com/fr/|Visual Studio]]
===== Apprendre à programmer en Python =====
[[prog:python:python-support|Aide-mémoire perso]] JBP
===== Aides-mémoire et supports =====
On trouve des tonnes de tutos et de documents sur Python, ceux qui suivent sont des aide-mémoire très concis.
{{ :prog:mementopython3.pdf |Mémento Python 3}} de Laurent Pointal, voir aussi son [[https://perso.limsi.fr/pointal/python:accueil|site]]\\
{{ :prog:memento_python_2c.pdf |Aide mémoire Python}} de Marc-Antoine Weisser\\
[[https://deptinfo-ensip.univ-poitiers.fr/ENS/doku/doku.php/stu:python:python_notes|Aide mémoire]] de l'Université de Poitiers, ou bien document {{ :prog:aide_memoire_notes_sur_python_3.pdf |pdf}}\\
[[http://joly415.perso.math.cnrs.fr/memento_python.pdf|Aide mémoire]] de Émilien Joly et autres documents utiles sur son site (shell, matlab...)\\
[[https://learnxinyminutes.com/docs/python3/|Learn X in Y minutes]], where X=Python3
{{ :prog:manuel_edupython.pdf |Manuel Edu Python}}
===== Quelques bibliothèques utiles =====
**NumPy** pour manipuler des tableaux (mini [[prog:python:numpy|tuto]])
**SciPy**, basée sur NumPy, pour le calcul scientifique
**matplotlib** pour les représentations graphiques de données et résultats
**bokeh** pour des représentations graphiques interactives utilisables en ligne
**pandas** pour l'analyse de données (structures de données et algorithmes) et **geopandas** pour des données géolocalisées
**Pillow** issue de PIL, pour le traitement et la manipulation de fichiers image (mini [[prog:python:python-image|tutoriel]])
**Opencv** pour le traitement d'images et la vision par ordinateur
scikit-image aka **Skimage** également pour le traitement d'images
**Turtle** pour l'initiation à la programmation (tracé de graphiques simples avec la tortue) : {{ :prog:turtleref.pdf |aide mémoire}}
**Cartopy** et **GeoPandas** pour la cartographie ainsi que **ipyleaflet** (extension de Jupyter notebooks)
**Kivy** pour réaliser des interfaces-utilisateur graphiques (GUI multi plateforme)
**Theano** pour le deep learning
**pweave** pour générer des rapports scientifiques
Python + arduino + OSC : [[https://www.acmesystems.it/touchosc|Tuto]]
===== Mises à jour avec Anaconda =====
conda update -n root conda
conda update --all
conda update anaconda-navigator
===== Quelques programmes =====
Initiation au [[prog:python:python-image|Traitement d'images]]
Variations autour du [[prog:python:palindrome|palindrome]]
Travail avec des [[prog:python:fichiers|fichiers]]
Expérimentations avec [[prog:python:osc|OSC]]
Expérimentation avec [[prog:python:python-arduino|Arduino]]
Mini tuto [[prog:python:NumPy|NumPy]]
===== Bons usages =====
Ce n'est pas exigé par le compilateur, mais de bons usages de présentation permettent de faciliter la (re)lecture d'un programme. Un ensemble de règles d'usage est défini dans le [[https://www.python.org/dev/peps/pep-0008/|guide du style]] PEP8. On peut généralement paramétrer son éditeur de texte pour qu'il vérifie et signale les "erreurs" de style.
Quelques éléments pour résumer :
* Les opérateurs doivent être entourés d'espaces
* Exception pour exprimer la priorité des opérateur
* Ex. : ''c = (a+b) * (a-b)''
* Exception pour le passage de paramètres
* Ex. ''def fonction(arg='valeur'):''
* Pas d'espaces à l'intérieur des parenthèses, crochets et accolades
* Espace après '': '' et '', '' mais pas avant
* Longueur des lignes limitée à 79 caractères, si nécessaire passer à la ligne et indenter
* Imports de module : 1 par ligne et sauter 2 lignes avant la suite du code
* Indentation : 4 espaces, pas de tabulation
* Encodage UTF8
* Docstrings entourés de triples quotes
* Noms de variables
* Une seule lettre pour les boucles et les indices
* Minuscules et underscores pour les variables, fonctions et méthodes
* Majuscules et underscores pour les constantes
* CamelCase pour les noms de classes
===== Essais de Jupyter Notebooks =====
Il faut préalablement créer un compte sur github de façon à héberger le code qui va être réalisé. Pour les petits programmes, un gist est préférable.\\
Installer localement la commande nbinteract qui va fabriquer le fichier html dynamique à partir du notebook.\\
''pip install nbinteract''
* Créer un notebook et enregistrer le fichier ipynb
* Charger ce notebook sous forme de gist dans github
* Dans le dossier où est le fichier : ''nbinteract nom_notebook.ipynb -s user_github/id_gist''
* Modifier le fichier html nouvellement créé (remplacer gh par gist en toute fin du fichier)
* Le fichier html est désormais opérationnel
* ATTENTION ! si ce fichier est hébergé sur un serveur en http, il sera impossible de l'afficher dans ce wiki (https). La preuve :
{{url>http://labotim.fr/notebooks/factorielle_recursive.html}}
Références :
[[https://www.codedisciples.in/embedding-jupyter.html]]\\
[[https://elc.github.io/posts/embed-interactive-notebooks/]]\\
[[https://www.nbinteract.com/tutorial/tutorial_intro.html]]\\