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/04 12:31] sergeinitiation_a_python [2021/08/21 13:41] (Version actuelle) – [PEP8] serge
Ligne 1: Ligne 1:
-======Initiation à python======+======Python: Initiation à python======
  
-=====Python===== +<WRAP center round box 80% centeralign> 
-====Installation==== +**[[toutes_les_pages_sur_python|Toutes les pages sur Python]] sans les pages sur {{tagpage>kivy|Kivy}}**\\ 
-Linux: c'est déjà installé +</WRAP>
-Win$ et Mac: débrouillez-vous ?+
  
-====Interpréteur==== 
-Je décide de [[atelier_python_niveau_1#bpython|bpython3]] 
  
 +<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 27: Ligne 53:
 >>>  >>> 
 </code> </code>
 +
 +===int float string opération===
 +<code python>
 +1
 +3.14
 +"Moi"
 +1+3.14
 +1+"toto"
 +1/2
 +</code>
 +
 +===Variable===
 +<code python>
 +>>> a=1
 +>>> b=2
 +>>> a+b
 +3
 +</code>
 +
 +===Mots clé===
 +  * https://docs.python.org/fr/3/reference/lexical_analysis.html#keywords
 +<code python>
 +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
 +</code>
 +
 +=====Type de données=====
 +<code python>
 +1  # int 
 +3.14  # float 
 +"Labomedia"  # str 
 +[1, 2, 3]  # list
 +{"1": "tot", "2": 1}  # dict
 +</code>
 +
 +=====Fonction=====
 +<code python>
 +>>> type(1)
 +<class 'int'>
 +>>> print("Hello, World", end="!")
 +Hello, World!
 +</code>
 +
 +=====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
 +
 +La suite se fait en collant le code dans ce génie.
 +
 +<code python>
 +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} çà")
 +</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=====
 +====si oui si non====
 +<code python>
 +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")
 +
 +</code>
 +
 +**Indentation: Toujours utiliser la tabulations avec 4 espaces: quand lama fâché, lui toujours faire ainsi !**
 +====Opérateur de comparaison====
 +  * https://docs.python.org/fr/3/reference/lexical_analysis.html#operators
 +<code python>
 +==    !=    <    >    <=    >=
 +</code>
 +
 +
 +=====Boucle=====
 +**Table du 4**
 +<code python>
 +print("1 x 4 =", 1*4)
 +print("1 x 4 =", 1*4)
 +...
 +...
 +print("10 x 4 =", 10 * 4)
 +</code>
 +**Les répétitions sont très sales !**
 +<code python>
 +i = 0
 +while i >= 10:
 +    print(str(i) + " x 4 =", i * 4)
 +    i += 1
 +</code>
 +**ou encore**
 +<code python>
 +for i in range(10):
 +    print(str(i) + " x 4 =", i * 4)
 +</code>
 +<code python>
 +for i in [0, 1, 2, 3]:  # seulement jusque 3
 +    print(str(i) + " x 4 =", i * 4)
 +</code>
 +**Itération**
 +<code python>
 +chaine = "Labomedia"
 +for lettre in chaine:
 +    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")
 +    
 +def test2():
 +    """Retourne """
 +    print("toto")
 +    return "Python c'est fun"
 +    
 +a = test1()
 +print(a)
 +
 +b = test2()
 +print(b)
 +</code>
 +
 +La fonction s'arrête  sur le return, le code après return n'est pas excécuté.
 +
 +<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>
 +
 +====Fonctions prédéfinies====
 +<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=====
 +<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]]**
  
  
-{{tag>atelier}} +{{tag> atelier_python python sb }}
-{{tag>python}}+
initiation_a_python.1530707486.txt.gz · Dernière modification : 2018/07/04 12:31 de serge