Structure de contrôle

  • if (test) elif else

    • conversion implicite en booléen

  • while (test) [break/continue] else

  • for (iter) [break/continue] else

susucre : a = x if cond else y

IF - ELIF - ELSE

7bed51768398492caa443ed8520818ef

Structure de if - elif -else

# instruction avant le if

if test_1:
    # instruction A
elif test_2:
    # instruction B
elif test_3:
    # instruction C
else:
    # instruction D

# instruction après le if
[1]:
print('start')

a = 1

if a == 1:
    print('travail')

print('end')
start
travail
end
[2]:
print('start')

a = 2

if a == 1:
    print('travail')

print('end')
start
end

267620d6cff149db86e065e1f4606f31

[3]:
print('start')

a = 1

if a == 1:
    print('travail 1')
else:
    print('travail 2')

print('end')
start
travail 1
end
[4]:
print('start')

a = 1

if a == 2:
    print('travail 1')
else:
    print('travail 2')

print('end')
start
travail 2
end

5c1f701135bf46e6bd1a0a11f606bfb2

[5]:
a = 1

if a == 1:
    print('travail 1')
elif a == 2:
    print('travail 2')
else:
    print('dodo')
travail 1
[6]:
a = 2

if a == 1:
    print('travail 1')
elif a == 2:
    print('travail 2')
else:
    print('dodo')
travail 2
[7]:
a = 3

if a == 1:
    print('travail 1')
elif a == 2:
    print('travail 2')
else:
    print('dodo')
dodo

FOR

En python, for permet d’itérer sur les éléments d’une séquence (ex: list, tuple, dict).

[8]:
ma_liste = ['toto', 42, 3.14]

for elem in ma_liste:
    print(elem)
toto
42
3.14
[9]:
mon_dict = {'un': 42, 2: 'bonjour', 'trois': 3.14}

for elem in mon_dict:
    print(elem)
un
2
trois
[10]:
for elem in 'python':
    print(elem)
p
y
t
h
o
n

Structure de for - continue / break - else

# instruction avant le for

for elem in sequence:
    # debut des instructions
    if test_break:
        # on arrete tout
        break
    if test_continue:
        # on passe à l'itération suivante
        continue
    # suite des instructions
    # pas vue si continue
else:
    # executer si on est sorti de la boucle sans break

# instruction après le for
[11]:
#liste = range(15)
liste = range(10)
result = []

for elem in liste:
    if elem > 10:
        result = 'interdit de dépasser 10'
        break
    if elem % 2:
        # ignorer les impairs
        continue
    result.append(elem)  # un peu comme 'result += [elem]' mais bien mieux
else:
    print("tout s'est bien passé")

print(result)
tout s'est bien passé
[0, 2, 4, 6, 8]

Remarque Ce dernier exemple présente de gros défauts:

  • changer la nature de result selon le contexte

  • else: print(...) est un mode de communication très faible

WHILE

49d09c4ca2144907ae4f25d54a5856c5

Structure de while - continue / break - else

# instruction avant le while

while test_boucle:
    # debut des instructions
    if test_break:
        # on arrete tout
        break
    if test_continue:
        # on passe à l'itération suivante
        continue
    # suite des instructions
    # pas vue si continue
else:
    # executer si on est sorti de la boucle sans break

# instruction après le while
[12]:
# compteur

a = 0

while a < 10:
    a += 1
    print(a, end=' ')
1 2 3 4 5 6 7 8 9 10
[13]:
# compteur pair

a = 0

while a < 10:
    a += 1
    if a % 2:
        continue
    print(a, end=' ')
2 4 6 8 10
[14]:
def indice(liste, valeur):
    "renvoie le premier indice tq liste[indice] == valeur"
    i = 0

    while i < len(liste):
        if liste[i] == valeur:
            result = i
            break
        i += 1
    else:
        result = None

    return result


ma_liste = ['zero', 'un', 'deux', 'trois']
[15]:
indice(ma_liste, 'deux')
[15]:
2
[16]:
indice(ma_liste, 'quatre')

En pratique, on préférera l’utilisation du for (éventuellement couplé à un if) qui ne risque pas de partir dans des boucles infinies.

Par exemple, le code suivant tournera à l’infini (et on n’aime pas ça) :

a = 0

while a < 10:
    if a % 2:
        continue
    print(a, end=' ')
    a += 1
[17]:
# compteur pair

for a in range(25):
    if a > 10:
        break
    if a % 2:
        continue
    print(a, end=' ')
0 2 4 6 8 10

Exercice