Outils pour utilisateurs

Outils du site


initiation_a_python

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
initiation_a_python [2018/07/05 15:38] – [Itération] sergeinitiation_a_python [2021/08/21 13:41] (Version actuelle) – [PEP8] serge
Ligne 1: Ligne 1:
-======Initiation à python====== +======Python: Initiation à python======
-Ce tuto est très inspiré de: [[https://openclassrooms.com/courses/235344-apprenez-a-programmer-en-python|Apprenez à programmer en Python de Vincent Le Goff]] Licence Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 2.0 Générique (CC BY-NC-SA 2.0) [[http://user.oc-static.com/pdf/223267-apprenez-a-programmer-en-python.pdf|Télécharger le pdf]] +
-=====Python===== +
-====Installation==== +
-Linux: c'est déjà installé. Win$ et Mac: débrouillez-vous ?+
  
-====Interpréteur==== +<WRAP center round box 80% centeralign> 
-Je décide de [[atelier_python_niveau_1#bpython|bpython3]]+**[[toutes_les_pages_sur_python|Toutes les pages sur Python]] sans les pages sur {{tagpage>kivy|Kivy}}**\\ 
 +</WRAP>
  
 +
 +<WRAP center round box 80% centeralign>
 +**{{tagpage>atelier_python|Cours de python}}**
 +</WRAP>
 +
 +Cet atelier est animé comme un TD. Aucun cours théorique, que de la pratique avec des exemples fun 8-)\\
 +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 [[http://user.oc-static.com/pdf/223267-apprenez-a-programmer-en-python.pdf|Télécharger le pdf]]
 +
 +  * **[[https://sametmax.com/ce-quil-faut-savoir-en-python/|Lis tout ça, tu seras expert python dans 10 ans]]**
 +  * **[[https://docs.python.org/fr/3/|Documentation officielle]]** docs.python.org/fr
 +
 +=====Les sources complètes de ces TD=====
 +  * https://replit.com/join/xzqjcqvvrp-sergelabo
 +  * **[[https://github.com/sergeLabo/formation_python|Formation Python Support pour atelier d'initiation python]]** sur GitHub.
 +
 +=====Installation=====
 +  * **[[python_installation]]**
 =====Quelques commandes===== =====Quelques commandes=====
 +====Tester dans un navigateur====
 +  * **[[https://www.python.org/shell/|L'interpréteur de python.org]] **
 +{{ :media_14:python_org.png?600 |}}
 +
 +===Un terminal quelconque===
 +Ouvrir un terminator:
 +{{ :media_14:terminator_python.png?600 |}}
 +  
 +=====Premiers pas=====
 +Ouvrir un terminator
 +  bpython3
 <code python> <code python>
 bpython version 0.16 on top of Python 3.5.3 /usr/bin/python3 bpython version 0.16 on top of Python 3.5.3 /usr/bin/python3
Ligne 26: Ligne 53:
 >>>  >>> 
 </code> </code>
- 
-<code python></code> 
  
 ===int float string opération=== ===int float string opération===
Ligne 48: Ligne 73:
  
 ===Mots clé=== ===Mots clé===
 +  * https://docs.python.org/fr/3/reference/lexical_analysis.html#keywords
 <code python> <code python>
-and as class def elif else except False for from global if import in +False      await      else       import     pass 
-lambda None not or pass return True try while with+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
 </code> </code>
  
-===Boolean et rien=== 
-<code python> 
-True False None 
-</code> 
 =====Type de données===== =====Type de données=====
 <code python> <code python>
 1  # int  1  # int 
 3.14  # float  3.14  # float 
-"Labbomedia # str +"Labomedia # str 
 [1, 2, 3]  # list [1, 2, 3]  # list
 {"1": "tot", "2": 1}  # dict {"1": "tot", "2": 1}  # dict
 </code> </code>
 +
 =====Fonction===== =====Fonction=====
- 
 <code python> <code python>
 >>> type(1) >>> type(1)
Ligne 73: Ligne 100:
 Hello, World! Hello, World!
 </code> </code>
- 
- 
  
 =====Ouvrir Geany===== =====Ouvrir Geany=====
 +====Geany: un éditeur sympa multiplateforme====
 +  * **[[python_installation#un_edi_multiplateforme]]**
 +====Premier pas avec geany====
 Créer un nouveau fichier et l'enregistrer avec une extension.py Créer un nouveau fichier et l'enregistrer avec une extension.py
  
Ligne 99: Ligne 127:
 print(d + e) print(d + e)
  
-print(str(a+ e)+print(a + e)
  
 print(a+e) print(a+e)
 +
 +print(f"Je suis un f-string {t} ou encore {a+e} çà")
 </code> </code>
 +
 +
 +=====Les différents types de variable=====
 +====Liste====
 +<code python>
 +l = [1, 2, 3, 4, 5]
 +# On compte à partir de zéro
 +l[1] = 2
 +</code>
 +  * [[http://apprendre-python.com/page-apprendre-listes-list-tableaux-tableaux-liste-array-python-cours-debutant|Les listes sur apprendre-python.com]]
 +  * [[https://www.dailymotion.com/video/xbk6sd?playlist=x22t3u|Pythonnerie n°4: les listes]]
 +====Dictionnaire====
 +<code python>
 +d = {1: "blender", 2: "gimp"}
 +# Les clés doivent être immuables
 +d[3] = "inkskape"
 +print(d)
 +</code>
 +
 +[[http://apprendre-python.com/page-apprendre-dictionnaire-python|Les dictionnaires sur apprendre-python.com]]
 +
 +====Tuples====
 +<code python>
 +t = ("127.0.0.1", 8888)
 +print(t)
 +t = "127.0.0.1", 8888
 +print(t)
 +</code>
 +
 +[[http://apprendre-python.com/page-apprendre-tuples-tuple-python|Les tuples sur apprendre-python.com]]
 +
 +====Set====
 +Liste toutes les valeurs existantes, il n'y a pas de doublons.
 +<code python>
 +my_set = {1, 2, 3, 4, 2, 1}
 +print(my_set)
 +</code>
 +
  
 =====Condition===== =====Condition=====
 +====si oui si non====
 <code python> <code python>
 a = -6 a = -6
Ligne 125: Ligne 194:
 </code> </code>
  
 +**Indentation: Toujours utiliser la tabulations avec 4 espaces: quand lama fâché, lui toujours faire ainsi !**
 ====Opérateur de comparaison==== ====Opérateur de comparaison====
 +  * https://docs.python.org/fr/3/reference/lexical_analysis.html#operators
 <code python> <code python>
 ==    !=    <    >    <=    >= ==    !=    <    >    <=    >=
Ligne 132: Ligne 202:
  
  
- 
-=====Exercice Bissextile===== 
-Trouver si une année est bissextile: 
-<code text> 
-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 
-</code> 
- 
-<file python 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 ...... 
-</file> 
- 
-Deux réponses: **[[https://github.com/sergeLabo/formation_python/blob/master/bissextile.py|bissextile.py]]** 
 =====Boucle===== =====Boucle=====
-Table du 4:+**Table du 4**
 <code python> <code python>
 print("1 x 4 =", 1*4) print("1 x 4 =", 1*4)
Ligne 162: Ligne 211:
 print("10 x 4 =", 10 * 4) print("10 x 4 =", 10 * 4)
 </code> </code>
-Les répétitions sont très sales !+**Les répétitions sont très sales !**
 <code python> <code python>
 i = 0 i = 0
Ligne 169: Ligne 218:
     i += 1     i += 1
 </code> </code>
-ou encore+**ou encore**
 <code python> <code python>
 for i in range(10): for i in range(10):
Ligne 178: Ligne 227:
     print(str(i) + " x 4 =", i * 4)     print(str(i) + " x 4 =", i * 4)
 </code> </code>
-=====Itération=====+**Itération** 
 +<code python>
 chaine = "Labomedia" chaine = "Labomedia"
 for lettre in chaine: for lettre in chaine:
     print(lettre)     print(lettre)
 +</code>
 +
 +=====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**
 +  * [[http://apprendre-python.com/page-apprendre-creer-fonction-en-python|Apprendre à créer des fonctions en python]]
 +
 +====Simple====
 +<code python>
 +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)
 +</code>
 +
 +====Arguments par défaut====
 +<code python>
 +def fonct(a=1, b=2, c=3):
 +    print(a, b, c)
          
 +fonct()
 +fonct(10)
 +fonct(b=10)
 +</code>
 +
 +====Return====
 +Une fonction sans return retourne None
 +<code python>
 +def test1():
 +    """Retourne None"""
 +    print("toto")
          
-=====Fonctions=====+def test2(): 
 +    """Retourne """ 
 +    print("toto"
 +    return "Python c'est fun" 
 +     
 +test1() 
 +print(a)
  
-===Return===+test2() 
 +print(b) 
 +</code>
  
-=====Module=====+La fonction s'arrête  sur le return, le code après return n'est pas excécuté.
  
-=====Module get object=====+<code python> 
 +def test(a): 
 +    if a < 0: 
 +        print("a<0"
 +        return 1 
 +    else: 
 +        print("a>0"
 +        return 0 
 +    print("fin"
 +         
 +test(1) 
 +test(-1) 
 +</code>
  
-[[https://github.com/sergeLabo/mylabotools/blob/master/mylabotools/labgetobject.py|labgetobject.py]] à utiliser dans blender +====Fonctions prédéfinies==== 
-=====Package=====+<code python> 
 +print( abs(-20), 
 +       max(2, 50), 
 +       int(str(1)), 
 +       type(int(str(1)), 
 +       dir(1)) 
 +</code> 
 +=====Module Package Import===== 
 +===def=== 
 +Une ou des fonctions dans un fichier est un module. Plusieurs modules font un package. 
 + 
 +===Module simple=== 
 + 
 +<file python called.py> 
 +def je_suis_appeler(phrase): 
 +    print("phrase =", phrase) 
 +</file> 
 + 
 +<file python I_call.py> 
 +from called import je_suis_appeler 
 + 
 +p = "Une phrase exemple à la noix" 
 +je_suis_appeler(p) 
 +</file> 
 + 
 +Exécuter: 
 +  python3 I_call.py 
 + 
 +===Bibliothèque standard=== 
 +  * **[[https://docs.python.org/fr/3/py-modindex.html#cap-t|Index des modules Python]]** 
 + 
 +===time=== 
 +<code python> 
 +import time 
 + 
 +print(dir(time)) 
 +print("Il est", time.time()) 
 +</code> 
 + 
 +<code python> 
 +import datetime 
 + 
 +print(dir(datetime)) 
 +print("Nous sommes le", datetime.date.today()) 
 +</code>
  
 =====Exception===== =====Exception=====
 +<code python>
 +try:
 +    resp = 1 / 0
 +except:
 +    print("Division par zéro impossible")
 +
 +try:
 +    resp = 1 / 0
 +except ZeroDivisionError as e:
 +    print(e)
 +</code>
 +
 +**[[https://docs.python.org/3.5/library/exceptions.html|La doc officielle]]**
 +===Pass===
 +**Du sale**
 +<code python>
 +try:
 +    resp = 1 / 0
 +    return resp
 +except:
 +    pass
 +</code>
 +**Du propre**
 +Ne jamais passer les erreurs sous silence, ou les faire taire explicitement.
 +<code python>
 +def exemple_propre(a):
 +    try:
 +        return 1 / a
 +    except ZeroDivisionError as e:
 +        print(e)
 +        return None
 +    except:
 +        return None
 +</code>
 +
 +**Pass pour du code en construction**
 +<code python>
 +def je_multiplie():
 +    pass
 +    
 +def j_imprime():
 +    pass
 +</code>
 +
 +=====Type=====
 +Python est fortement typé: il utilise le **[[https://fr.wikipedia.org/wiki/Duck_typing|typage canard (duck typing)]]** !
 +
 +<code python>
 +t = type({1, 2, 3, 4, 2, 1})
 +print(t)
 +</code>
 +=====Variables globales et locales, espaces de noms=====
 +Le fichier pi.py n'a rien à voir avec pi ou PI ou pi()
 +
 +<code python pi.py>
 +def pi():
 +    return "Mauvaise blague"
 +</code>
 +
 +<code python 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()
 +</code>
 +
 +
 +=====POO=====
 +
 +====Programmation Orientée Objet====
 +**[[https://fr.wikipedia.org/wiki/Programmation_orient%C3%A9e_objet|Pour votre culture personnelle !]]**
 +
 +====Pourquoi des class ?====
 +**[[initiation_a_python#pourquoi_faire_des_fonctions_ou_des_classes|Python: Initiation à python Pourquoi des fonctions ou des class]]**
 +
 +====Les class permettent de créer des objets====
 +<code python>
 +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)
 +
 +</code>
 +
 +
 +=====La philosophie Python=====
 +====Zen of python====
 +Dans l'interpréteur
 +<code python>
 +import this
 +</code>
 +<code text>
 +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. </code>
 +====PEP8=====
 +
 +  * **[[https://realpython.com/python-pep8/|realpython.com pep8]]** les choses importantes, après avoir bien mémorisé **[[https://www.python.org/dev/peps/pep-0008/#whitespace-in-expressions-and-statements|les règles sur les espaces]]**.
 +
 +
 +**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 ...
 +  * [[https://fr.wikipedia.org/wiki/John_Emerich_Edward_Dalberg-Acton|Lord Acton aurait pu dire: "Les choses cachées ne le sont jamais absolument."]]
 +
 +
 +=====Recherche web=====
 +Dans un moteur de recherche, toujours en anglais, par exemple:
 +  python3 download web page
 +
 +Une grande majorité des réponses sera sur **[[https://stackoverflow.com/questions/7243750/download-file-from-web-in-python-3|stackoverflow.com]]**
  
-=====Pass===== 
  
-{{tag>python}} +{{tag> atelier_python python sb }}
-{{tag>abp}}+
initiation_a_python.1530805089.txt.gz · Dernière modification : 2018/07/05 15:38 de serge