g = 2
g
vaut 2
» ou plutôt « la valeur 2
est affectée à la variable g
». En informatique, toutes les variables ne sont pas des nombres (même si au final, elles seront toutes compilées en mots binaires). Il existe plusieurs types de variables et cela dépend du langage de programmation utilisé.
int
4
float
5.2
str
"ceci est une chaîne de caractère"
"bonjour"
bool
True
False
["bonjour", 4, True, 3]
("bonjour", 4, True, 3)
Enfin, une variable peut aussi pointer vers d'autres type d'objet : des fonctions, etc...
Dans la plupart des langages de programmation, il faut annoncer le type d'une variable avant de l'utiliser. Sous
Python en revanche, c'est implicite : le type de la variable est déduit automatiquement de la valeur qu'on lui
affecte.
On parle alors de typage dynamique qui s'oppose au typage statique. Il est possible d'afficher
le type d'une variable sous Python en utilisant la fonction type(variable)
Retenir qu'en python :
4
int
"4"
str
True
False
Selon leur type, les variables vont avoir des propriétés différentes et il sera possible d'appliquer certains opérateurs. Il n'est donc pas possible, dans une majorité des cas, de réaliser des opérations entre des variables de types différents (il existe toutefois des exceptions).
+
Retenir qu'en python : L'opérateur +
>>> 4 + 3.2
7.2
>>> 4 + "a"
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> [1, 2] + (3, 4)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
TypeError: can only concatenate list (not "tuple") to list
str()
int()
float()
bool()
list()
tuple()
Outre l'addition (ou la concaténation), Python connaît la plupart des opérations mathématiques habituelles.
sqrt()
math
import math
math.sqrt()
from math import *
sqrt()
math.
sqrt
%
n%2
n%2
a%b == 0
Python est également capable, comme la plupart des langages informatiques, d'utiliser les comparateurs mathématiques.
2 == 2 # comparaison d'égalité, à ne pas confondre avec l'affectation (un seul signe = )
2 != 3 # comparaison «différent de», le ! représente la barre sur le signe égal, comme dans ≠
2 < 3 # comparaison plus petit que
2 > 3 # comparaison plus grand que
2 <= 2 # comparaison plus petit ou égal
2 >= 3 # comparaison plus grand ou égal
True
False
bool
Tous les opérateurs (de calcul, de comparaison, booléen) peuvent être associés dans une même instruction et des règles de priorité s'appliquent.
Voici les opérateurs classés du plus prioritaire au moins prioritaire :
(...) # L'encadrement par des parenthèses
**
*, /, //, %
+, -
> >=
== != < <=
in, not in # Vous verrez ces opérateurs dans le chapitre sur les types construits
not
and
or
La plupart des programmes informatiques nécessitent d'interagir avec l'utilisateur en lui communiquant des informations ou en lui demandant par exemple d'entrer une valeur.
Hello World!
.
print()
input()
input()
x
x
x = input("Quel est votre nom ?")
print("Bonjour, comment allez-vous", x ,"?") # Première solution
print("Bonjour, comment allez-vous " + x + " ?") # Deuxième solution
input()
str
Tâcher de toujours choisir des noms de variable qui aient un sens.
int
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 |
Pour découvrir ce que peut faire une fonction, il faut prendre l'habitude de consulter la documentation en ligne.
La documentation officielle de python est sur python.org mais il
existe aussi une documentation peut-être plus accessible sur w3schools.com.
Il faudra très souvent se débrouiller avec l'anglais.
Une autre façon de se documenter est d'utiliser la fonction help
print(object(s), sep=separator, end=end, file=file, flush=flush)
object(s)
Any object, and as many as you like. Will be converted to string before printedsep='separator'
Optional. Specify how to separate the objects, if there is more than one. Default is ' 'end='end'
Optional. Specify what to print at the end. Default is '\n' (line feed)En python tout ce qui suit un dièse #
Commentez suffisamment votre code mais veillez à ce que vos commentaires soient à jour, n'alourdissent pas le code et ne soit pas redondants ; ne commentez pas des évidences. Exemple :
x = x + 1 # Incrémente x de 1 (Inutile)
x = x + 1 # Compensation de bordure (Utile)
x = 'valeur'
ceci == cela
1 + 2
x='valeur'
ceci==cela
1+2
a = x*2 – 1
b = x*x + y*y
c = (a+b) * (a-b)
def fonction(arg='valeur'):
2 * (3 + 4)
def fonction(arg='valeur'):
{str(x): x for x in range(10)}
val = dico['key']
2 * ( 3 + 4 )
def fonction( arg='valeur' ):
{ "nom": "Elvis" }
val = dico[ 'clé' ]
def fct(arg1, arg2):
dico = {'a': 1}
def fct(arg , arg2) :
dico = {'a' : 1}
A = une_fonction_au_nom_long(ne, tient, pas,
sur, une, ligne)
\
if (a<=10 or a>20) and \
(b<=10 or 20100):
import math
import random
import math, random
s = ["Do", "Ré", "Mi", "Fa",
"Sol", "La", "Si"]
s = ["Do", "Ré", "Mi", "Fa",
"Sol", "La", "Si"]
# -*- coding:Utf-8 -*-
for x in range(10):
print(x)
i = get_index() + 12
print(ma_liste[i])
def une_fonction():
une_variable = 10
class Classeur:
Il existe un grand nombre de modules/bibliothèques ajoutant de nouvelles fonctionnalités
à Python. Vous pouvez retrouver tous les modules
natifs dans la documentation de python disponible ici : https://docs.python.org/3/ en cliquant sur
« Index général des modules ».
Il existe aussi de nombreux modules/bibliothèques qui ne sont pas répertoriés ici et
qui sont développés par la grande communauté de programmeur python.
Exemple de biblitohèques externes :
pygame
pillow
matplotlib
turtle
Le module turtle
from turtle import *
turtle
:
reset()
: permet d'effacer les tracésgoto(x, y)
: permet de se rendre au point de coordonnées (x,y)forward(x)
: permet d'avancer d'une distance de x pixelsbackward(x)
: permet de reculer d'une distance de x pixelsup()
et down()
: permet de lever le crayon de la feuille et de le poser sur la feuille.color("couleur")
: définit la couleur en anglais : red, blue, green, yellow, purple, black, …left(x)
et right(x)
: permet de tourner d'un angle x (en degré) vers la gauche ou vers la droitewidth(x)
: permet d'obtenir une épaisseur de trait de x pixelsbegin_fill()
: permet de remplir un contour fermé avec la couleur sélectionnée.
On ferme ensuite avec end_fill()
.write("texte")
: permet d'écrire la chaîne de caractères "texte"speed(x)
: définit la vitesse de tracé de la tortue (maximale à 0)ht()
: masque la flèche/le curseur st() : montre la flèche/le curseurexitonclick()
: permet de refermer une fenêtre graphique turtle en cliquant simplement dessusUne structure de gestion du flux d'exécution permet de définir les instructions qui seront exécutées selon le contexte.
if
, elif
, else.
for
, while
.def
.if
# algorithme :
Quelle est votre couleur préférée ?
Si couleur est vert :
Répondre : J'adore le vert !
Sinon si couleur est jaune :
Répondre : Je déteste le jaune !
Sinon :
Répondre : Tous les goût sont dans la nature !
if
; elif
(facultatif, contraction de «else+if») ; else
(facultatif mais conseillé pour rendre le code plus lisible et couvrir toutes les possibilités).# traduction (implémentation) en Python :
coul = input("Quelle est votre couleur préférée ?")
if coul == "vert":
print("J'adore le vert !")
elif coul == "jaune":
print("Je déteste le jaune !")
else:
print("Tous les goût sont dans la nature !")
En Python, on retiendra que chaque ligne de test doit nécessairement se
terminer par deux points et que chaque bloc d'instruction doit être indenté de quatre espaces.
Remarque : Il existe d'autres structures de test sous Python (par exemple
le test d'erreur « try
… except
»).
Il est également possible de créer une structure conditionnelle dans une autre. On parle de tests imbriqués.
Dans ce cas, les indentations sont particulièrement importantes car elles délimitent les différents blocs.
in
)if condition:
, cela signifie en réalité que :
or
, and
et not
. in
pour savoir si une chaîne de caractères contient un caractère particulier. demande = input("Quel est votre demande ?")
if "s'il vous plaît" in demande :
print("Utilisateur bien éduqué.")
$
. bool(...)
; par exemple : bool(0)
renvoie False
alors que bool(10)
renvoie True
.
Ainsi :
int
, float
) :
0
est interprété comme False
, tous les autres nombres comme True
;""
, un tuple vide ()
et une liste vide []
sont interprétés comme False
;
non vides, ils renvoient True
.
for
(pour)On dit que c'est une boucle bornée car dès le départ, on sait combien de fois elle sera répétée.
for i in range(3):
print(i)
for
crée une variable i
qui va prendre une valeur différente à chaque itération de la boucle. range()
. range()
permet d'obtenir des intervalles de nombres entiers ; elle peut être écrite avec 1, 2 ou bien 3 paramètres ; par :
range(10)
renvoie successivement les entiers de 0 à 9 (10 est exclu), soit 10 entiers en tout ; range(2, 10)
renvoie successivement les entiers de 2 (inclus) à 9 (10 est exclu) ; range(2, 10, 4)
renvoie successivement les entiers, à partir de 2 inclus et strictement inférieurs à 10, avec un pas de 4, ce qui revient à renvoyer 2 et 6 ; in
dans une boucle for
ou un test (if
)in
fournit une méthode très pratique pour parcourir les éléments d'une liste, d'un n-uplet (tuple) ou encore les caractères d'une chaîne de caractère, à l'aide d'une boucle for
:
for k in "azerty" : # k va prendre successivement les valeurs "a", puis "z", ... jusqu'à "y"
pass # le mot clé pass ne fait rien (peut être utilisé pour rechercher des erreurs)
in
est aussi utilisable pour écrire une condition :
k = "a"
if k in "azerty" : # «k in "azerty"» renvoie True
pass
while
(tant que)while
(tant que) répète une tâche tant qu'une condition donnée est vérifiée. On dit que c'est une boucle non bornée
car au départ, on ne sait pas combien de fois elle sera répétée. i = 1 # Valeur définie pour entrer dans la boucle
while i < 3:
print(i)
i += 1 # Valeur modifiée à chaque itération pour éviter une boucle infinie
while
) vérifie une condition à chaque itérations.
True
) pour pouvoir entrer dans la boucle. False
)
à un moment donné et que la boucle while
s'arrête.for
ou while
avec le mot-clé break
. Certains vous diront que
si vous êtes amené à utiliser un break
c'est que votre code est mal pensé. Le but initial de la programmation est « d'apprendre » à un ordinateur comment réaliser des tâches,
on parle aussi de procédures. Bien souvent, pour réaliser une tâche complexe, il est préférable
de la découper en plusieurs tâches plus simples et d'enseigner à l'ordinateur comment réaliser ces tâches simples.
Par exemple, pour apprendre à un ordinateur comment dessiner une maison, il est préférable de lui apprendre
comment tracer un trait puis d'avoir recours à cette tâche simple pour tracer la maison entière. Sous Python,
et bien d'autres langages de programmation qui utilise le paradigme procédural, on peut facilement « enseigner »
une tâche à un ordinateur au moyen d'une structure qu'on appelle fonction (ou parfois : sous-programme).
surface_disque(r)
qui a besoin d'un paramètre r
pour renvoyer son résultat :
def surface_disque(r):
"""Donne la surface d'un disque de rayon r (float) au centième près."""
return round(3.14*r**2, 2)
Retenir qu'en python :
def
permet de définir une nouvelle fonction."""..."""
et précisent généralement le type des
paramètres de la fonction. help(surface_disque)
, on peut accéder à ces commentaires.
Si le but de la fonction est trop évident, on peut omettre ces commentaires pour plus de légèreté.return
(renvoyer) indique ce que la fonction répond. L'exécution du code d'une fonction s'arrête
lors d'une instruction return,
le reste du code n'est pas exécuté.surface_disque(2)
Voici des exemples de fonctions qui ne demandent pas de paramètre :
Script 1 :def fonction1():
a = 0
for i in range(1, 4):
a += i
return a
fonction1() # Appel de la fonction : les parenthèses sont vides
Lors de l'exécution du script 1 :
fonction1
. ()
) de la fonction fonction1
, ainsi écrit : fonction1()
. def fonction2():
for i in range(1, 4):
return i
6
.
Si l'on veut que le résultat s'affiche dans la console, il faudra écrire print(fonction1())
.fonction2()
renvoie 1
: en effet après return
, l'exécution du script de la fonction s'arrête.
Il est toujours préférable d'utiliser les fonctions input
et print
à l'extérieur d'une fonction.
Ceci permet de bien séparer le coeur du code de la partie réservée à l'interaction avec l'utilisateur. Ce conseil vous permettra
de créer des fonctions réutilisables dans d'autres contexte et notamment avec des interface plus évoluée avec l'utilisateur.
Il est possible de préciser en argument de la fonction un ou plusieurs paramètres qui seront utilisable à l'intérieur de cette fonction.
Dans le cas où une fonction prendrait plusieurs paramètres, on les sépare par des virgules :
def fonction(param1, param2, ...):
Il est également possible de prévoir des valeurs de paramètres par défaut dans une fonction dans le cas où l'utilisateur
ne les donnerait pas. Cela se fait en affectant la valeur au paramètre en argument de la fonction :def fonction(param1=valdef1, param2=valdef2, ...):
Le paramètre n n'a pas de valeur par défaut :
|
Le paramètre n a 2 pour valeur par défaut :
|
L'importation des modules se fait toujours en dehors des fonctions, et généralement en début de script.
from … import ….
. Exemple : Une fonction appelée fonction
est écrite dans un fichier appelé fichier.py
. Pour rendre cette
fonction disponible dans un script, on rentrera au début du script l'instruction : from fichier import fonction
.
Alternativement, en entrant from fichier import *
, on exécute l'ensemble du code présent dans le fichier ce qui rend disponible
toutes les fonctions qui y sont définies.
# -*- coding: utf-8 -*-
global
. Elle peut alors être appelée et modifiée dans la fonction. Même si cette technique peut être pratique, elle peut être source d'erreur en modifiant des valeurs de variables qui n'aurait pas dû l'être.
Il sera préférable de passer les valeurs dont la fonction à besoin, en arguments, quitte à modifier ensuite la variable d'origine par un retour de
la fonction (avec return
).
locals()
et globals
. De la même façon qu'une fonction peut appeler une autre fonction, il est également possible
de faire en sorte qu'une fonction s'appelle elle-même.
C'est ce qu'on appelle une fonction récursive : elle contient un appel récursif.
En mathématique, la récursivité est
une démarche faisant référence à l'objet même de cette démarche, ce qui se résume souvent en informatique par l'aphorisme humoristique :
« Pour comprendre la récursivité il faut d'abord comprendre la récursivité ».
La récursivité intervient dans de nombreux domaines. Elle permet notamment de dessiner des fractales. La nature également utilise des algorithmes récursifs comme on peut le voir dans le chou romanesco.
Étudions la structure générale d'une fonction récursive simple :
def fct(n):
if n == 0:
return 2 # valeur de fct(0)
else:
return 2 + fct(n-1)
Les lignes 2 et 3 définissent le cas trivial qui permet d'arrêter la récursivité, c'est à dire la condition d'arrêt, tandis que les lignes 4 et 5 concernent le cas récursif, qui appelle la fonction en modifiant la valeur de l'argument afin, qu'à un moment donné, on tombe sur le cas trivial.
En suivant l'algorithme ci-dessus, on constate que l'appel fct(3)
renvoie 2 + fct(2)
qui a besoin du retour de fct(2)
pour continuer
et ainsi de suite. Cela crée une pile d'appels récursifs telle que :
fct(3) = 2 + fct(2)
= 2 + (2 + fct(1)) # on empile les appels récursifs
= 2 + (2 + (2 + fct(0))) # fct(0) renvoie une valeur ...
= 2 + (2 + (2 + 2)) # ... donc Python peut remonter la pile ...
= 8 # ... et arriver au résultat à renvoyer
Le moteur python ne permet pas d'empiler les appels récursifs en trop grand nombre lorsque cela demande beaucoup de ressources mémoire. Si la pile est trop grande et que la
capacité en mémoire de l'ordinateur est dépassée, celle-ci déborde et le message d'erreur StackOverflow
(ou dépassement de pile) s'affiche.