Ceci est une ancienne révision du document !
Table des matières
Python: Initiation à python
Toutes les pages sur Python sans les pages sur Kivy
Cet atelier est animé comme un TD. Aucun cours théorique, que de la pratique avec des exemples fun
Et surtout je ne commence pas par Chapitre 1 POO Programmation Orienté Objet.
Ce tuto est très inspiré de Apprenez à programmer en Python de Vincent Le Goff Télécharger le pdf
- Documentation officielle docs.python.org/fr
Installation
Quelques commandes
Tester en console
Un terminal quelconque
Premiers pas
Ouvrir un terminator
bpython3
bpython version 0.16 on top of Python 3.5.3 /usr/bin/python3 >>> 1 1 >>> 3.14 3.14 >>> 1+2 3 >>> labomedia Traceback (most recent call last): File "<input>", line 1, in <module> labomedia NameError: name 'labomedia' is not defined >>> "Labomedia" 'Labomedia' >>>
int float string opération
1 3.14 "Moi" 1+3.14 1+"toto" 1/2
Variable
>>> a=1 >>> b=2 >>> a+b 3
Mots clé
False await else import pass None break except in raise True class finally is return and continue for lambda try as def from nonlocal while assert del global not with async elif if or yield
Type de données
1 # int 3.14 # float "Labomedia" # str [1, 2, 3] # list {"1": "tot", "2": 1} # dict
Fonction
>>> type(1) <class 'int'> >>> print("Hello, World", end="!") Hello, World!
Ouvrir Geany
Geany: un éditeur sympa multiplateforme
Premier pas avec geany
Créer un nouveau fichier et l'enregistrer avec une extension.py
La suite se fait en collant le code dans ce génie.
a = 1 b = 2 c = 3.14 d = "labo" e = "toto" r = a + b print(r) s = a - b print(s) t = a / b print(t) print(d + e) print(a + e) print(a+e) print(f"Je suis un f-string {t} ou encore {a+e} çà")
Condition
si oui si non
a = -6 if a < 0: print("bingo") print("") print("tu") print("as") print("gagné") print("") if a < -5: print("2 ème niveau d'indentation") else: print("tu as perdu") print(type("tu as perdu")) print("je fais autre chose")
Indentation: Toujours utiliser la tabulations avec 4 espaces: quand lama fâché, lui toujours faire ainsi !
Opérateur de comparaison
Exercice Bissextile
Trouver si une année est bissextile:
Si une année n'est pas multiple de 4, elle n'est pas bissextile Si elle est multiple de 4, on regarde si multiple de 100 Si oui, on regarde si multiple de 400 Si oui, elle est bissextile Si non, elle n'est pas bissextile Si non, elle est bissextile
- bissextile.py
# Programme testant si une année est bissextile # Demande de l'année au clavier annee = input("Saisissez votre année ...") # attente de la saisie etc ......
Deux réponses: bissextile.py
Boucle
Table du 4:
print("1 x 4 =", 1*4) print("1 x 4 =", 1*4) ... ... print("10 x 4 =", 10 * 4)
Les répétitions sont très sales !
i = 0 while i >= 10: print(str(i) + " x 4 =", i * 4) i += 1
ou encore
for i in range(10): print(str(i) + " x 4 =", i * 4)
for i in [0, 1, 2, 3]: # seulement jusque 3 print(str(i) + " x 4 =", i * 4)
Itération
chaine = "Labomedia" for lettre in chaine: print(lettre)
Fonctions
Pourquoi faire des fonctions ou des classes ?
- Pour éviter les répétitions, sources d'erreurs, surtout si une modifications de ces répétitions est nécessaire.
- Pour structurer le projet.
- Pour tester des bouts de code individuellement.
- Pour éviter les problèmes avec les variables globales.
- Pour pouvoir réutiliser des bouts de codes.
- Permettre un travail en équipe en découpant un projet en bout de projet indépendant.
Une fonction fait une chose. Une class fait une chose
Simple
def ma_fonction(): print("Demain") def ta_fonction(a): print(a) def sa_fonction(a, n): while i < n: print(a, i) ma_fonction() ta_fonction("1") ta_fonction("Guido") sa_fonction(5, 3)
Arguments par défaut
def fonct(a=1, b=2, c=3): print(a, b, c) fonct() fonct(10) fonct(b=10)
Return
Une fonction sans return retourne None
def test1(): """Retourne None""" print("toto") def test2(): """Retourne """ print("toto") return "Python c'est fun" a = test1() print(a) b = test2() print(b)
La fonction s'arrête sur le return, le code après return n'est pas excécuté.
def test(a): if a < 0: print("a<0") return 1 else: print("a>0") return 0 print("fin") test(1) test(-1)
Fonctions prédéfinies
print( abs(-20), max(2, 50), int(str(1)), type(int(str(1)), dir(1))
Module Package
def
Une ou des fonctions dans un fichier est un module. Plusieurs modules font un package.
Module simple
- called.py
def je_suis_appeler(phrase): print("phrase =", phrase)
- I_call.py
from called import je_suis_appeler p = "Une phrase exemple à la noix" je_suis_appeler(p)
Exécuter:
python3 I_call.py
Bibliothèque standard
time
import time print(dir(time)) print("Il est", time.time())
import datetime print(dir(datetime)) print("Nous sommes le", datetime.date.today())
Exception
try: resp = 1 / 0 except: print("Division par zéro impossible") try: resp = 1 / 0 except ZeroDivisionError as e: print(e)
Pass
Du sale
try: resp = 1 / 0 return resp except: pass
Du propre
Ne jamais passer les erreurs sous silence, ou les faire taire explicitement.
def exemple_propre(a): try: return 1 / a except ZeroDivisionError as e: print(e) return None except: return None
Pass pour du code en construction
def je_multiplie(): pass def j_imprime(): pass
Les différents types de variable
Liste
l = [1, 2, 3, 4, 5] # On compte à partir de zéro l[1] = 2
Dictionnaire
d = {1: "blender", 2: "gimp"} # Les clés doivent être immuables d[3] = "inkskape" print(d)
Tuples
t = ("127.0.0.1", 8888) print(t) t = "127.0.0.1", 8888 print(t)
Set
Liste toutes les valeurs existantes, il n'y a pas de doublons.
my_set = {1, 2, 3, 4, 2, 1} print(my_set)
Type
Python est fortement typé: il utilise le typage canard (duck typing) !
t = type({1, 2, 3, 4, 2, 1}) print(t)
Variables globales et locales, espaces de noms
Le fichier pi.py n'a rien à voir avec pi ou PI ou pi()
- pi.py
def pi(): return "Mauvaise blague"
- jeu.py
from pi import pi as pipi # Toutes les variables globales en majuscule PI = 3.14 # Ce pi est une variable globale pi = pipi() def print_pi(pi): """pi est une variable locale""" print(pi) def print_a(a): print(a) print_pi(3) print_a(3) print_pi(PI) print_pi(pi) print_pi()
POO
Programmation Orientée Objet
Pourquoi des class ?
Les class permettent de créer des objets
class Subliminale: pass class Minimale: print("Un objet Minimale créé !") class MyTest: def my_test(self): print("Premier test") class Bicycle: """Un vélo""" def __init__(self, color, kind): """C'est le constructeur""" self.color = color self.kind = kind s = Subliminale() print(type(s)) m = Minimale() b = Bicycle("rouge", "vtt") print(b.color) print(b.kind) class Contact: def __init__(self, name): self.name = name self.phone = None def set_phone(phone): self.phone = phone def get_phone(self): return self.phone c = Contact("toto") print(c.get_phone()) copains = ["Emmanuel", "Jean"] mon_carnet = {} for copain in copains: mon_carnet[copain] = Contact(copain) print("Le numéro de Emmanuel", copains["Emmanuel"].get_phone())
http:___sametmax.com est devenu https://sametmax.com, le site est figé, les liens internes ne sont plus à jour ! le bon lien pour la partie 1 et ensuite débrouillez-vous!
Excercices
Numéro 1
Nettoyer, créer une class avec method training, testing
Numéro 2
Faire des commentaires sur ce fichier des sources de python: chebyshev.py de numpy documenté ici Chebyshev Series
Un long commentaire pour un tout petit retour
La philosophie Python
Zen of python
Dans l'interpréteur
import this
Préfère : la beauté à la laideur, l'explicite à l'implicite, le simple au complexe et le complexe au compliqué, le déroulé à l'imbriqué, l'aéré au compact. Prends en compte la lisibilité. Les cas particuliers ne le sont jamais assez pour violer les règles. Mais, à la pureté, privilégie l'aspect pratique. Ne passe pas les erreurs sous silence, ... ou bâillonne-les explicitement. Face à l'ambiguïté, à deviner ne te laisse pas aller. Sache qu'il ne devrait y avoir qu'une et une seule façon de procéder, même si, de prime abord, elle n'est pas évidente, à moins d'être Néerlandais. Mieux vaut maintenant que jamais. Cependant jamais est souvent mieux qu'immédiatement. Si l'implémentation s'explique difficilement, c'est une mauvaise idée. Si l'implémentation s'explique aisément, c'est peut-être une bonne idée. Les espaces de nommage ! Sacrée bonne idée ! Faisons plus de trucs comme ça.
PEP8
- un tuto parmi des tas sur @ chez sametmax.com
Avec python, nous sommes toujours entre adultes responsables.
- C'est toujours possible d’enfreindre une règle.
- Par contre, certaines règles sont obligatoires: endentation, espaces …
Recherche web
Dans un moteur de recherche, toujours en anglais, par exemple:
python3 download web page
Une grande majorité des réponses sera sur stackoverflow.com