Blocs et code

Les blocs permettent de structurer son code. La façon la plus simple de les utiliser est dans les blocs if/elif/else qui permettent une exécution conditionnelle et les blocs while et for qui permettent de répéter des blocs.

Exécution conditionnelle

Permet d'exécuter un bloc si une condition logique est vraie :

if <condition logique>:
    instruction 1
    instruction 2
    ...
    instruction n
elif <condition logique>:
    instruction 1
    instruction 2
    ...
    instruction n
else:
    instruction 1
    instruction 2
    ...
    instruction n

Notez qu'il peut y avoir autant de bloc elif que l'on veut (même 0) et qu'il n'est pas nécessaire d'avoir de else.

Demandez à l'utilisateur de rentrer un entier au clavier (en utilisant la fonction input) et de répondre "C'est entre 2 et 8" si le nombre rentré est entre 2 et 8 et de répondre "ce n'est pas entre 2 et 8" sinon.

solution


entier = int(input("Un entier entre 2 et 8 : "))
if 2 >= entier and entier <= 8:
    print("C'est entre 2 et 8")
else:
    print("ce n'est pas entre 2 et 8")

Répétition de blocs

Deux types de boucles existent en python : les boucles tant que (while) et les boucles pour chaque (for)

Bloc while : boucle tant que

while <condition logique>:
    instruction 1
    instruction 2
    ...
    instruction n

Par exemple le bloc while suivant :

b = 6
while b > 0:
    print(b)
    b = b - 1

qui va afficher :

6
5
4
3
2
1

Calculez la factorielle de 45.

solution

factorielle = x = 45

while x >= 1:
    factorielle = factorielle * x
    x -= 1

print(factorielle)

Bloc for : boucle pour chaque

for <nom> in <itérable>:
    instruction 1
    instruction 2
    ...
    instruction n

Le bloc sera exécuté pour chaque élément de l'itérable. A chaque exécution, l'élément courant de l'itérateur sera nommé <nom> Beaucoup d'objet peuvent être considérés comme itérable (nous en verrons plusieurs par la suite) et nous en connaissons déjà un : les chaînes de caractères.

L'exécution du code suivant :

for c in "bonjour":
    print(c)

Donnera :

b
o
n
j
o
u
r

La boucle for itère sur chaque caractère de la chaîne "bonjour" et le place dans la variable nommée c. La valeur de c vaut donc successivement les caractères "b", "o", "n", "j", "o", "u" et enfin "r".

Choisissez toujours des noms de variables explicatifs dans vos boucles for !

Il sera plus simple de s'y retrouver avec des noms de variables explicites qu'avec un tas de variables s'appelants i, j, i2, j2, etc.

Écrire un programme qui affiche la table de 9 :

1 x 9 = 9
2 x 9 = 18
...

solution


for nombre in range(1, 11):
    print(nombre, "x 9 = ", nombre * 9)

Écrire un programme qui calcule la somme des chiffres de 1 à 100.

solution


somme = 0
for k in range(1, 101):
    somme += k
print(somme)

Fonction range

Les boucles for sont souvent associée à la fonction range`{.language-}. Cette fonction crée un itérateur (quelque chose qui produit des nombres).

Par exemple :

for x in range(10):
    print(x)

Affichera les 10 premiers entiers (de 0 à 9). Le résultat de range(10) est un objet de type range, qui est fait pour être utilisé avec l'instruction for.

On peut utiliser la fonction range de trois façons différentes qu'elle soit appelée avec un, deux ou trois paramètres :

Afficher à l'écran les 16 premiers entiers, allant de 0 à 15

solution

for i in range(16):
    print(i)

Afficher à l'écran les 13 entiers, allant de 3 à 15

solution

for i in range(3, 16):
    print(i)

Afficher à l'écran les multiples de 3 allant de de 3 à 15

solution

for multiple_trois in range(3, 16, 3):
    print(multiple_trois)

Le troisième paramètre de la fonction range n'est pas obligatoirement positif. Ceci permet de compter à rebours :

Afficher à l'écran les entiers allant de 5 à 0, dans cet ordre.

solution

for x in range(5, -1, -1):
    print(x)

Exercice final

Utilisez ce que vous avez appris pour vérifier la conjecture de Syracuse pour les 100 premiers entiers Exemple :

solution


for x in range(100):
    while x > 1:
        if x % 2  == 0:
            x /= 2
        else:
            x = 3 * x + 1