PYTHON
A SAVOIR

Particularités du langage

Le Néerlandais Guido van Rossum proposait en 1991 la première version du Python, un langage de programmation :

Avantages et inconvénients :

Comme la plupart des langages de haut niveau, le Python comporte 5 sortes d'instructions :

Syntaxe générale

Instruction
...
Bloc 1 :
    instruction
    …
    Bloc 2 :
        instruction
        ...
    Instruction
    ...
Instruction
...

:: à la fin d'une ligne définit le début d'un bloc d’instructions
Indentation Deux espaces ou une tabulation matérialisent un bloc d’instructions :
  • Sous-programme
  • Instruction conditionnelle
  • Instruction répétitive
# CommentaireCommentaire sur une ligne
"""
Commentaire
Suite du commentaire
"""
Commentaire multiligne

La fin d'une instruction se définit :

Variables

Affectation

L'affectation consiste à attribuer une valeur à une variable.

a = 83
b = 9.23
c1 = "Un deux trois"
c2 = "Un \"deux\" trois"
c3 = "Un deux\ntrois"

Type d'une variable

Le type de la valeur que contient une variable se retrouve avec la fonction type().

int83    0    -23    2Entier
float9.23    0.0    -1.7e-6Nombre à virgule
str"Un deux"    'Un deux'    "L'avion"Chaîne de caractères
list["3", 3, 3.0]Liste
rangerange(20)    range(3,20)    range(3,20,5)Suite arithmétique d'entiers
boolTrue    FalseBooléen

Conversion de type

Diverses fonctions permettent de changer le type d'une variable.

int("15")      # 15
int(-15.56)    # -15 (troncature)
float(-15)     # -15.0
float("-2e-3") # -0.002
str(15)        # "15"
str(-0.002)    # "-0.002"

Typage dynamique

Souvent, lors des opérations sur deux types différents, un type est modifié automatiquement pour rendre l'opération possible.

var=3/2
print(var,type(var))
var=3.0+2
print(var,type(var))
var=3*True
print(var,type(var))
var=3*(2>1)
print(var,type(var))
var="3"+2
print(var,type(var))

Résultat :

1.5 <class 'float'>
5.0 <class 'float'>
3 <class 'int'>
3 <class 'int'>
TypeError

Variables globale, locale

Même nom mais deux variables différentes :

a = 15       # variable globale
def plusUn() :
  a = 0      # variable locale à la fonction plusUn()
  a = a + 1
  print(a)

plusUn()     # 1
print(a)     # 15

Programme qui ne fonctionne pas :

a = 15       # variable globale
def plusUn() :
  a = a + 1  # erreur car a n’est pas initialisée
  print(a)

plusUn()
print(a)

Variable globale dans une fonction ou procédure :

a = 15       # variable globale
def plusUn() :
  global a
  a = a + 1
  print(a)

plusUn()     # 16
print(a)     # 16

Entrées-sorties

Entrées avec la fonction input()

Saisie d’une chaîne de caractères :

nom = input("Quel est votre nom ?")

Saisie d’un entier :

n = int(input("Nombre de frères et sœurs"))

Saisie d’un nombre à virgule :

x = float(input("Température à 12h00"))

Sorties avec la fonction print()

Cette fonction affiche :

print(15)
print("Bonjour !")
print()

message = "Bonjour !"
print(message)
print()

a = 15
print(3*a)
print()

def saluer(nom) :
  return "Bonjour "+nom+"!"
print(saluer("Julie"))

Résultat :

15
Bonjour !

Bonjour !

45

Bonjour Julie!

Affichage sur une même ligne

a = -3
print("Le carré de ", a," est " , a * a)

Variante :

a = -3
print("Le carré de ", end = " ")   # end = " " évite le retour à la ligne
print(a, end = " ")
print(" est ", end = " ")
print(a*a)

Résultat :

Le carré de  -3  est  9

Nombres

Opérations sur les nombres

+Addition
-Soustraction
*Multiplication
/Division
//Division entière
%Reste de la division
**Puissance
a = 2
print(a + 3)     # 5
print(a - 3)     # -1
print(3 * a)     # 6
print(15 / 6)    # 2.5
print(15 // 6)   # 2
print(15 % 6)    # 3
print(3 ** a)    # 9
print(a ** 0.5)  # 1.4142135623730951

Fonctions

Fonctions natives

Quelques fonctions mathématiques sont toujours disponibles.

print(round(3.815164, 2))  # 3.82
print(int(3.815164))       # 3
print(abs(2.3))            # 2.3
print(abs(-2.3))           # 2.3
print(max(2,4,6))          # 6

Fonctions mathématiques

La plupart des fonctions mathématiques nécessitent d'importer une bibliothèque, comme math, numpy, scipy ou sympy (calcul formel).

from math import *
print(sqrt(16))   # 4.0
print(sin(pi/4))  # 0.7071067811865475
print(acos(0.5))  # 1.0471975511965979
print(pi/3)       # 1.0471975511965979

Fonctions aléatoires

Les fonctions random(), choice() et randint() appartiennent à la bibliothèque random.

from random import *

a = random()         # nombre aléatoire dans [0; 1[ - exemple : 0.8365827741773375

L = [7, 3, 8, 5, 6]
a = choice(L)        # élément au hasard dans la liste L - exemple : 5

a = randint(5, 10)   # entier aléatoire dans [5; 10] - exemple : 7

Chaînes de caractères

Opérations sur les chaînes

a = "Je dis "  # guillemets simples ou doubles, au choix
b = 'bla '
print(a + b)   # concaténation
print(5 * b)   # répétition
print(len(a))  # nombre de caractères de la chaîne

Affichage :

Je dis bla 
bla bla bla bla bla 
7

Caractère d'échappement \

txt='"Bonjour !", dit−elle.\n"Bonjour", répondit−il.'
print(txt)

Affichage :

"Bonjour !", dit-elle.
"Bonjour", répondit-il.

Remarques :

Accès aux sous-chaines

nb = "123456789"
print(nb[1:3])
print(nb[0:len(nb)-2])
print(nb[:-2])
print(nb[2:len(nb)])
print(nb[2:])

Affichage :

23
1234567
1234567
3456789
3456789

Accès aux caractères individuels

ch = "Constance"
print(ch[0], ch[4], ch[8])

Affichage :

Cte

Listes

Opérations sur les listes

Une liste est une suite ordonnée d'éléments (valeurs ou variables) séparées par des virgules, l'ensemble étant encadré entre crochets. A chaque élément de la liste correspond un indice (ou index). L'indice du premier élément est 0.

a = ["ab", "cd"]
b = [0]
print(a + b)   # ajout
print(5 * b)   # répétition
print(len(a))  # nombre d'éléments de la liste

Affichage :

['ab', 'cd', 0]
[0, 0, 0, 0, 0]
2

Autres opérations :

liste = ["a", "b", 20, 30, "cd"]
print(liste[0], liste[2], liste[4]) # a 20 cd
print(liste.index("b"))             # 1
liste[0] = "e"                      # ["e", "b", 20, 30, "cd"]
del(liste[3])                       # ["e", "b", 20, "cd"]
liste.append("a")                   # ["e", "b", 20, "cd", "a"]  équivaut à liste+=["a"]
liste.remove("b")                   # ["e", 20, "cd", "a"]

liste = [1, 3, 2, 4]
min(liste)                          # 1
max(liste)                          # 4
liste.reverse()                     # [4, 2, 3, 1]
liste.sort()                        # [1, 2, 3, 4]
liste.sort(reverse=True)            # [4, 3, 2, 1]

A partir d'une suite arithmétique

La fonction range() définit une suite arithmétique de nombres entiers, positifs ou négatifs. Elle prend 1 à 3 paramètres. La fonction list() convertit le type range en type list.

list(range(5))       # [0, 1, 2, 3, 4]
list(range(2,5))     # [2, 3, 4]
list(range(0,5,2))   # [0, 2, 4]
list(range(2,-3,-2)) # [2, 0, -2]

Remarque : range(5) définit 5 valeurs mais la première valeur est 0 donc la dernière est 4.

A partir d'une chaîne de caractères

La méthode split() sectionne une chaîne de caractères pour former une liste. Chaque élément de la liste est une chaîne de caractères. Cette méthode prend pour paramètre le séparateur, par défaut un espace.

texte='Salut à tous!'
texte.split()         # ['Salut', 'à', 'tous!']
IPv4="192.168.45.67"
IPv4.split(".")       # ['192', '168', '45', '67']

Bloc d’instructions

Structure de choix (ou conditionnelle)

Avec un if

nombre = -10
if nombre>0 :
  print("Le nombre choisi est positif")
print("Fin du programme")

Affichage :

Fin du programme

Avec un if ... else

nombre = 10
if nombre>0 :
  print("Le nombre choisi est positif")
else :
  print("Le nombre choisi est négatif ou nul")
print("Fin du programme")

Affichage :

Le nombre choisi est positif
Fin du programme

Test de plusieurs valeurs

n = 10
if n<0 :
  print("Le nombre est négatif")
elif n==0 :
  print("Le nombre est égal à zéro")
else :
  print("Le nombre est positif")

Affichage :

Le nombre est positif

Opérateurs de test

if n==0 :n est égal à zéro
if n>=0 :n est supérieur ou égal à 0
if n!=34 :n est différent de 34
if (0<10) and (n<10) :n est compris strictement entre 0 et 10
if 0<n<10 :
if (n<0) or (n>10) :n est négatif ou strictement supérieur à 10
if n%5==0 :n est divisible par 5

Différences entre =, == et != :

n = 10          # affectation
n == 0 # False  # test d'égalité
n = 0           # affectation
n == 0 # True   # test d'égalité
n != 0 # True   # test d'inégalité

Structure de répétition (ou répétitive)

Boucle bornée for ... in

Avec une suite arithmétique d'entiers :

for n in range(3) :
  print("Entier", n)

Affichage :

Entier 0
Entier 1
Entier 2

Avec une liste :

for n in ["Paul", "Alice", "Julie"] :
  print("Bonjour", n)

Affichage :

Bonjour Paul
Bonjour Alice
Bonjour Julie

Boucle non bornée while

Le nombre d’itérations n'est pas toujours connu à l’avance.

gagne = 0
while gagne == 0 :
  n=int(input("Entrer un nombre"))
  if n == 10 :
    gagne = 1
    print("Gagné")

Fonctions

Avec l'instruction return

Une fonction prend éventuellement un ou plusieurs paramètres et retourne une ou plusieurs valeurs :

def puissance(x,n) :
  y = x**n
  return y

print(puissance(3,2))  # 9

Exemple avec plusieurs valeurs :

def test():
  return 3,"5"

a,b = test()
print(a*b)   # 555

Sans l'instruction return

La fonction exécute la suite d'instructions, en retournant la valeur None supprimée par l'interpréteur, sauf en utilisant la fonction print() :

def table7() :
  for i in range(1,11) :
    print(7*i)

table7()         # 7 14 21 28 35 42 49 56 63 70
print(table7())  # None

Exemple avec un paramètre :

def table(base) :
  for i in range(1,11) :
    print(base*i)

table(8)  # 8 16 24 32 40 48 56 64 72 80

Bibliothèques

Une bibliothèque (library en anglais) s'importe de trois manières différentes.

Sans rappel du nom de la bibliothèque

A réserver aux programmes simples.

from numpy import *
print(sqrt(9))
print(sin(2))

Il est possible d'importer seulement les fonctions désirées.

from numpy import sqrt, sin
print(sqrt(9))
print(sin(2))

Avec rappel du nom de la bibliothèque

Evite les conflits de variable ou de fonction.

import numpy
print(numpy.sqrt(9))
print(numpy.sin(2))

Avec un alias

Donne un nom plus court à la bibliothèque.

import numpy as np
print(np.sqrt(9))
print(np.sin(2))

Autres types natifs

En Python, on évite les mots tableau ou vecteur qui prêtent à confusion, ou alors on précise de quoi il s'agit.

N-uplet

Un n-uplet (tuple en anglais) est une suite non modifiable d'éléments.

t = (1, "a", 2.3)

print(len(t))
print(t[1])
t[1] = "b" # Erreur, les éléments d'un n-uplet ne peuvent se modifier

Résultat :

3
a
TypeError: 'tuple' object does not support item assignment

Ensemble

e1 = {"moineau", "couleuvre", "renard", "renard"}
e2 = {"moineau", "gardon", "lion"}
e3 = {"moineau"}

print(e1)      # "renard" ne compte qu'une fois
print(len(e1))
for p in e1:
  print(p)
print(e1 | e2) # Union
print(e1 & e2) # Intersection
print(e1 - e3) # Différence

Résultat :

{'renard', 'moineau', 'couleuvre'}
3
renard
moineau
couleuvre
{'lion', 'renard', 'couleuvre', 'moineau', 'gardon'}
{'moineau'}
{'couleuvre', 'renard'}

Dictionnaire

d = {"oiseau":"moineau", "reptile":"couleuvre", "mammifere":"renard"}

print(d["reptile"])
for p in d:
  print(d[p])
d["poisson"] = "gardon" # Ajout d'un élément
del d["reptile"]        # Retrait d'un élément
d["oiseau"] = "pinson"  # Modification d'un élément
print(d)

Résultat :

couleuvre
moineau
couleuvre
renard
{'oiseau': 'pinson', 'mammifere': 'renard', 'poisson': 'gardon'}