Cours 2 Fonctions et séquences

Qu’est-ce qu’un ordinateur ?

Un ordinateur est un système composé de plusieurs éléments

Processeur

CPU

Processeur

Mémoire

RAM Program Data CPU

Mémoire

Stockage

RAM Program Data CPU bin python.exe word.exe vscode.exe C: or / Users jarvis lur Desktop Documents lettre.docx hello.py logo.jpg Windows Storage

Stockage

Interpréteur

Le CPU exécute mes programmes Python ?

Installation

Interpréteur:

Éditeur:

Terminal

> pwd
C:\Users\lur

> ls
Desktop Documents

> cd Documents

> pwd
C:\Users\lur\Documents

> python --version
Python 3.X.X

Python dans le terminal

> python
Python 3.X.X ...
Type "help", "copyright", "credits" or "license" for more
information.

>>> 1 + 1
2

>>> exit()

Python dans le terminal

hello.py

print('Hello World')
> python hello.py
Hello World

Fonctions

Fonctions sans argument ni valeur de retour

def table7():
    n = 1
    while n <= 10:
        print(n, "x 7 =", n * 7)
        n += 1
# affichons 2 fois la table de 7
table7()
table7()

Une fonction n’est exécutée que lorsqu’on l’appelle

Fonctions sans argument ni valeur de retour

x = table7() # affiche la table de 7
print(x)     # affiche None

Fonctions avec arguments

# définition de la fonction table().
def table(base):
    n=1
    while n <= 10:
        print(n, "x", base, "=", n * base)
        n += 1

# appels à la fonction table()
table(3)       # affiche la table de 3
table(base=8)  # affiche la table de 8
a = 42
table(a)       # affiche la table de 42

Fonctions avec arguments

# définition de la fonction table().
def table(base, start, length):
    n = start
    while n < start + length:
        print(n, "x", base, "=", n * base)
        n += 1

# appels à la fonction table()
table(3, 1, 10)
table(base=8, start=5, length=2)

Fonctions avec arguments

# définition de la fonction table().
def table(base, start=1, length=10):
    n = start
    while n < start + length:
        print(n, "x", base, "=", n * base)
        n += 1

# appels à la fonction table()
table(8, 5, 2)
table(8)
table(8, 5)
table(8, length=2)

Fonctions avec valeur de retour

# définition de la fonction multiply()
def multiply(a, b):
    return a * b

res = multiply(7, 9)   # appel à la fonction. N'affiche rien.
print(res)             # affiche 63
print(multiply(6, 7))  # affiche 42

Fonctions avec valeur de retour

# définition de multiply()
def multiply(a, b):
    return a * b

# définition de table()
def table(base, start=1, length=10):
    n = start
    while n < start + length:
        # utilisation de multiply()
        print(n, "x", base, "=", multiply(n, base))
        n += 1

# appel à la fonction table()
table(5, length=3)

Fonctions avec valeur de retour

def abs(x):
    if x < 0:
        return -x
    else:
        return x
# version simplifiée
def abs(x):
    if x < 0:
        return -x
    return x

Variables locales et globales

def tvac(amount):
    n = 1 + interest / 100
    return amount * n

interest = 21
n = 25
r = tvac(n)
print(r)

Variables locales et globales

def tvac(amount):
    n = 1 + interest / 100
    return amount * n

interest = 21
n = 25
r = tvac(n)
print(r)
RAM

Variables locales et globales

def tvac(amount):
    n = 1 + interest / 100
    return amount * n

interest = 21
n = 25
r = tvac(n)
print(r)
RAM
tvac
<function>

Variables locales et globales

def tvac(amount):
    n = 1 + interest / 100
    return amount * n

interest = 21
n = 25
r = tvac(n)
print(r)
RAM
tvac
<function>
interest
21

Variables locales et globales

def tvac(amount):
    n = 1 + interest / 100
    return amount * n

interest = 21
n = 25
r = tvac(n)
print(r)
RAM
tvac
<function>
interest
21
n
25

Variables locales et globales

def tvac(amount):
    n = 1 + interest / 100
    return amount * n

interest = 21
n = 25
r = tvac(n)
print(r)
RAM
tvac
<function>
interest
21
n
25
function tvac
amount
25

Variables locales et globales

def tvac(amount):
    n = 1 + interest / 100
    return amount * n

interest = 21
n = 25
r = tvac(n)
print(r)
RAM
tvac
<function>
interest
21
n
25
function tvac
amount
25
n
1.21

Variables locales et globales

def tvac(amount):
    n = 1 + interest / 100
    return amount * n

interest = 21
n = 25
r = tvac(n)
print(r)
RAM
tvac
<function>
interest
21
n
25
function tvac
amount
25
n
1.21
<return>
30.25

Variables locales et globales

def tvac(amount):
    n = 1 + interest / 100
    return amount * n

interest = 21
n = 25
r = tvac(n)
print(r)
RAM
tvac
<function>
interest
21
n
25
function tvac
amount
25
n
1.21
<return>
30.25
r
30.25

Variables locales et globales

def tvac(amount):
    n = 1 + interest / 100
    return amount * n

interest = 21
n = 25
r = tvac(n)
print(r)
RAM
tvac
<function>
interest
21
n
25
r
30.25
30.25

Que va-t-il s’afficher ?

def fun():
    a = 12

fun()

print(a)

Que va-t-il s'afficher ?

def fun():
    a = 12

fun()

print(a)
RAM

Que va-t-il s'afficher ?

def fun():
    a = 12

fun()

print(a)
RAM
fun
<function>

Que va-t-il s'afficher ?

def fun():
    a = 12

fun()

print(a)
RAM
fun
<function>
function fun

Que va-t-il s'afficher ?

def fun():
    a = 12

fun()

print(a)
RAM
fun
<function>
function fun
a
12

Que va-t-il s'afficher ?

def fun():
    a = 12

fun()

print(a)
RAM
fun
<function>

Que va-t-il s'afficher ?

def fun():
    a = 12

fun()

print(a)
RAM
fun
<function>
Traceback (most recent call last): File "example.py", line 6, in print(a) ^ NameError: name 'a' is not defined

Variables locales et globales

def fun():
    a = 12 # variable locale à fun

fun()

print(a) # inaccessible ici

Que va-t-il s’afficher ?

def fun():
    print(a)

a = 12
fun()

Que va-t-il s'afficher ?

def fun():
    print(a)

a = 12
fun()
RAM

Que va-t-il s'afficher ?

def fun():
    print(a)

a = 12
fun()
RAM
fun
<function>

Que va-t-il s'afficher ?

def fun():
    print(a)

a = 12
fun()
RAM
fun
<function>
a
12

Que va-t-il s'afficher ?

def fun():
    print(a)

a = 12
fun()
RAM
fun
<function>
a
12
function fun

Que va-t-il s'afficher ?

def fun():
    print(a)

a = 12
fun()
RAM
fun
<function>
a
12
function fun
12

Que va-t-il s'afficher ?

def fun():
    print(a)

a = 12
fun()
RAM
fun
<function>
a
12
12

Variables locales et globales

def fun():
    print(a) # accès à la variable 'a' globale

a = 12
fun()

Que va-t-il s’afficher ?

def fun():
    a = 42
    print("dans fun :", a)

a = 12
fun()

print("en dehors de fun :", a)

Que va-t-il s'afficher ?

def fun():
    a = 42
    print("dans fun :", a)

a = 12
fun()

print("en dehors de fun :", a)
RAM

Que va-t-il s'afficher ?

def fun():
    a = 42
    print("dans fun :", a)

a = 12
fun()

print("en dehors de fun :", a)
RAM
fun
<function>

Que va-t-il s'afficher ?

def fun():
    a = 42
    print("dans fun :", a)

a = 12
fun()

print("en dehors de fun :", a)
RAM
fun
<function>
a
12

Que va-t-il s'afficher ?

def fun():
    a = 42
    print("dans fun :", a)

a = 12
fun()

print("en dehors de fun :", a)
RAM
fun
<function>
a
12
function fun

Que va-t-il s'afficher ?

def fun():
    a = 42
    print("dans fun :", a)

a = 12
fun()

print("en dehors de fun :", a)
RAM
fun
<function>
a
12
function fun
a
42

Que va-t-il s'afficher ?

def fun():
    a = 42
    print("dans fun :", a)

a = 12
fun()

print("en dehors de fun :", a)
RAM
fun
<function>
a
12
function fun
a
42
dans fun : 42

Que va-t-il s'afficher ?

def fun():
    a = 42
    print("dans fun :", a)

a = 12
fun()

print("en dehors de fun :", a)
RAM
fun
<function>
a
12
dans fun : 42

Que va-t-il s'afficher ?

def fun():
    a = 42
    print("dans fun :", a)

a = 12
fun()

print("en dehors de fun :", a)
RAM
fun
<function>
a
12
dans fun : 42 en dehors de fun : 12

Variables locales et globales

def fun():
    a = 42
    print("dans fun :", a)     # 'a' locale masque 'a' globale

a = 12
fun()
print("en dehors de fun :", a) # seule 'a' globale accessible ici

Que va-t-il s’afficher ?

def fun():
    print("globale? :", a)
    a = 42

a = 12
fun()

Que va-t-il s'afficher ?

def fun():
    print("globale? :", a)
    a = 42

a = 12
fun()
RAM

Que va-t-il s'afficher ?

def fun():
    print("globale? :", a)
    a = 42

a = 12
fun()
RAM
fun
<function>

Que va-t-il s'afficher ?

def fun():
    print("globale? :", a)
    a = 42

a = 12
fun()
RAM
fun
<function>
a
12

Que va-t-il s'afficher ?

def fun():
    print("globale? :", a)
    a = 42

a = 12
fun()
RAM
fun
<function>
a
12
function fun
a
<unbound>

Que va-t-il s'afficher ?

def fun():
    print("globale? :", a)
    a = 42

a = 12
fun()
RAM
fun
<function>
a
12
function fun
a
<unbound>
Traceback (most recent call last): File "example.py", line 6, in fun() ~~~^^ File "/Users/lur/Desktop/expr.py", line 2, in fun print("globale? :", a) ^ UnboundLocalError: cannot access local variable 'a' where it is not associated with a value

Variables locales et globales

def fun():
    # ici 'a' local existe déjà mais n'a pas encore de valeur

    print("globale? :", a)  # erreur: accès à 'a' local sans valeur
    a = 42

a = 12
fun()

Les séquences

Les séquences

l = [2, 42, 3.1416, 34]       # 'l' est une séquence de valeurs
s = "Le Python, c'est bon !"  # 's' est une séquence de caractères

Opérations sur les séquences

f = [1, 2] + [3, 4]  # [1, 2, 3, 4]
g = 3 * "hello"      # "hellohellohello"

Test d’appartenance

L = [1, 2, 42, 3]
if 42 in L:
    print("OK")

S = 'Python'
if 'hon' not in S:
    print("KO")

Accès aux éléments

Le slicing

s = "Le Python, c'est bon !"
print(s[3:9])   # affiche 'Python'
print(s[17:-2]) # affiche 'bon'
print(s[17:])   # affiche 'bon !'
print(s[:9])    # affiche 'Le Python'

La longueur d’une séquence

s = "Le Python, c'est bon !"
print(len(s)) # affiche 22

Un str est immuable

s = [1, 2, 42, 4, 5]
s[2] = 3
print(s)   # affiche [1, 2, 3, 4, 5]
s = "Le Python, c'est bon !"
s[17] = "c"     # provoque une erreur !

Liste

numbers = [1, 2, 3, 4, 5]
words = ["I", "love", "Python"]
mixed = [1, "duck-billed platypus", True]
nested = [[1, 2], [3, 4]]
numbers = [1, 2, 2, 3, 4, 5]
del(numbers[1])
print(numbers) # affiche [1, 2, 3, 4, 5]

Ajout d’éléments

numbers = [1, 2, 3, 4, 5]
numbers.append(6)
print(numbers)  # affiche [1, 2, 3, 4, 5, 6]
numbers = [1, 2, 4, 5]
numbers.insert(2, 3)  # insère 3 à l'indice 2
print(numbers)        # affiche [1, 2, 3, 4, 5]

Attention aux copies

words = ['I', 'like', 'Python']
mots = words
mots[1] = 'love'
print(words)
print(mots)

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = words
mots[1] = 'love'
print(words)
print(mots)
RAM

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = words
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"like"
1
"Python"
2

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = words
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"like"
1
"Python"
2
mots
<ref1>

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = words
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"love"
1
"Python"
2
mots
<ref1>

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = words
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"love"
1
"Python"
2
mots
<ref1>
['I', 'love', 'Python']

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = words
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"love"
1
"Python"
2
mots
<ref1>
['I', 'love', 'Python'] ['I', 'love', 'Python']

Attention aux copies

words = ['I', 'like', 'Python']
mots = words     # ici on ne copie que la référence
mots[1] = 'love'
print(words)
print(mots)

Attention aux copies

words = ['I', 'like', 'Python']
mots = list(words)
mots[1] = 'love'
print(words)
print(mots)

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = list(words)
mots[1] = 'love'
print(words)
print(mots)
RAM

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = list(words)
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"like"
1
"Python"
2

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = list(words)
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"like"
1
"Python"
2
<ref2>
"I"
0
"like"
1
"Python"
2

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = list(words)
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"like"
1
"Python"
2
<ref2>
"I"
0
"like"
1
"Python"
2
mots
<ref2>

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = list(words)
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"like"
1
"Python"
2
<ref2>
"I"
0
"love"
1
"Python"
2
mots
<ref2>

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = list(words)
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"like"
1
"Python"
2
<ref2>
"I"
0
"love"
1
"Python"
2
mots
<ref2>
['I', 'like', 'Python']

Que va-t-il s'afficher ?

words = ['I', 'like', 'Python']
mots = list(words)
mots[1] = 'love'
print(words)
print(mots)
RAM
words
<ref1>
<ref1>
"I"
0
"like"
1
"Python"
2
<ref2>
"I"
0
"love"
1
"Python"
2
mots
<ref2>
['I', 'like', 'Python'] ['I', 'love', 'Python']

Créer une copie d’une liste

numbers = [1, 2, 3, 4, 5]
copy1 = list(numbers)  # la fonction 'list()' crée une liste
copy2 = numbers * 1    # le '*' crée une liste
copy3 = numbers + []   # le '+' crée une liste
copy4 = numbers[:]     # le slice crée une liste

Passage par référence

def more_love(l):
  l[1] = "love"

words = ['I', 'like', 'Python']
fun(words)

print(words)

Passage par référence

def more_love(l):
  l[1] = "love"

words = ['I', 'like', 'Python']
fun(words)

print(words)
RAM

Passage par référence

def more_love(l):
  l[1] = "love"

words = ['I', 'like', 'Python']
fun(words)

print(words)
RAM
more_love
<function>

Passage par référence

def more_love(l):
  l[1] = "love"

words = ['I', 'like', 'Python']
fun(words)

print(words)
RAM
more_love
<function>
words
<ref1>
<ref1>
"I"
0
"like"
1
"Python"
2

Passage par référence

def more_love(l):
  l[1] = "love"

words = ['I', 'like', 'Python']
fun(words)

print(words)
RAM
more_love
<function>
words
<ref1>
<ref1>
"I"
0
"like"
1
"Python"
2
function more_love
l
<ref1>

Passage par référence

def more_love(l):
  l[1] = "love"

words = ['I', 'like', 'Python']
fun(words)

print(words)
RAM
more_love
<function>
words
<ref1>
<ref1>
"I"
0
"love"
1
"Python"
2
function more_love
l
<ref1>

Passage par référence

def more_love(l):
  l[1] = "love"

words = ['I', 'like', 'Python']
fun(words)

print(words)
RAM
more_love
<function>
words
<ref1>
<ref1>
"I"
0
"love"
1
"Python"
2

Passage par référence

def more_love(l):
  l[1] = "love"

words = ['I', 'like', 'Python']
fun(words)

print(words)
RAM
more_love
<function>
words
<ref1>
<ref1>
"I"
0
"love"
1
"Python"
2
['I', 'love', 'Python']

Boucler dans une séquence

numbers = [2, 5, 7, 2, 1]
i = 0
while i < len(numbers):
    print(numbers[i])
    i += 1     # raccourci pour i = i + 1
numbers = [2, 5, 7, 2, 1]
for n in numbers:
    print(n)

Intervalles

range(5)         # [0, 1, 2, 3, 4]
range(1, 5)      # [1, 2, 3, 4]
range(1, 8, 2)   # [1, 3, 5, 7]
range(5, 0, -1)  # ???
for i in range(5):
    print(i)

Example

def squares(n):
    res = []
    for i in range(n):
        res.append((i+1)**2)
    return res