Outils pour utilisateurs

Outils du site


initiation_a_python

Python: Initiation à python

Toutes les pages sur Python sans les pages sur

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 Télécharger le pdf

Les sources complètes de ces TD

Installation

Quelques commandes

Tester dans un navigateur

Un terminal quelconque

Ouvrir un terminator:

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} çà")

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)

Les dictionnaires sur apprendre-python.com

Tuples

t = ("127.0.0.1", 8888)
print(t)
t = "127.0.0.1", 8888
print(t)

Les tuples sur apprendre-python.com

Set

Liste toutes les valeurs existantes, il n'y a pas de doublons.

my_set = {1, 2, 3, 4, 2, 1}
print(my_set)

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

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 Import

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)

La doc officielle

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

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)

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

Avec python, nous sommes toujours entre adultes responsables.

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

initiation_a_python.txt · Dernière modification: 2021/08/21 15:41 de serge