Boucles non bornées

Boucles non bornées

Boucles non bornées : while #

while, qui signifie tant que, permet de répéter un bloc tant qu’une condition est respectée :

while condition:
    bloc_repete_tant_que_condition_est_vrai

bloc_execute_apres

On emploie while lorsqu’on ne sait pas à l’avance combien de fois il sera nécessaire de répéter un bloc d’instruction.

Par exemple : “tant que je n’ai pas bon à l’exercice, je recommence”.

Ou, tant qu’il reste du pain je mange :

petit déjeuner #

Run Reset Download Stop

Autre exemple, le casino :

Jean-Martin a 10€, il joue aux machines à sous (un vrai pigeon). Chaque mise lui coûte 1€ et il a une chance sur 100 de gagner 10€ (quand je vous disais)…

Le programme suivant simule cette situation dramatique :

import random                     # fonctions simulant le hasard

capital = 10
while capital > 0:
    capital = capital - 1         # il mise 1 €
    if random.random() < 0.01:    # une chance sur cent
        capital = capital + 10    # il récupère 10 €
        print("waouh...")
    else:
        print("encore perdu...")

print("Jean-Martin a perdu tout son argent.")

Le prof de maths qui sommeille en moi vous signale que :

  1. Ce programme termine toujours.
  2. Les étapes intermédiaires varient mais l’issue est toujours la même : Jean-Martin perd tout son argent.
  3. Le seul moyen de gagner régulièrement aux jeux d’argent est de les organiser. Ce privilège est reservé à l’État.

Casino #

Run Reset Download Stop

Exercice 12 #

Modifier le programme précédent :

  1. Créer une variable compteur valant 0 avant la boucle,
  2. Augmenter compteur de 1 à chaque tour de la boucle,
  3. Affichez la valeur de compteur une fois la boucle terminée.
  4. Bonus difficile Affichez à la fin du programme le maximum atteint par Jean-Martin avec un phrase un peu rageante…

Boucle infinie #

On emploie régulièrement des boucles infinies. Il suffit d’écrire la condition while True pour qu’une boucle soit répétée indéfiniment.

Afin de ne pas saturer complètement votre processeur on va introduire un délai d’une seconde entre deux affichages :

DANS THONNY

from time import sleep

while True:
  print("NSI")
  sleep(1)
  • On importe la fonction sleep qui va mettre l’exécution en pause une seconde avec sleep(1)
  • On répète indéfiniment l’affichage “NSI” toutes les secondes.

Attention : Impossible d’exécuter ces exemples sur mon site, il faut utiliser un programme externe.

La fonction sleep n’est pas traitée correctement ici pour des questions techniques.

Pour arrêter le programme vous pouvez utiliser le raccourci clavier “Ctrl + C”

À quoi cela peut-il bien servir ?

Et bien c’est ce qu’on fait dans TOUS les logiciels… Pensez un instant à un jeu vidéo.

Lorsque vous arrêtez de jouer, ne serait-ce qu’une seconde, le programme ne s’arrête pas de tourner.

On peut résumer un jeu vidéo à ce schéma :

while True:
  lire_les_actions_du_joueur()
  mettre_le_jeu_a_jour()
  afficher_le_jeu_a_l_ecran()

L’instruction break #

L’instruction break provoque une sortie immédiate d’une boucle while ou d’une boucle for.

Dans l’exemple suivant, l’expression True est toujours … vraie : on a une boucle sans fin.

L’instruction break est donc le seul moyen de sortir de la boucle.

break #

Run Reset Download Stop

Affichage de l’heure courante #

Doit être traité à exécuter à l’extérieur, dans Thonny par exemple
import time     # importation du module time

while True:
    # strftime() est une fonction du module time
    print('Heure courante ', time.strftime('%H:%M:%S'))
    quitter = input('Voulez-vous quitter le programme (o/n) ? ')
    if quitter == 'o':
        break
print("A bientôt")
>>>
Heure courante  14:25:12
Voulez-vous quitter le programme (o/n) ? n
Heure courante  14:25:20
Voulez-vous quitter le programme (o/n) ? o
A bientôt

Exercice 13 - Le plus ou moins #

Doit être traité à exécuter à l’extérieur, dans Thonny par exemple
  1. Se documenter sur la fonction randint du module random

    import random
    help(random.randint)
    
  2. Écrire une boucle qui affiche 10 nombres aléatoires entre 1 et 100

La fonction input(message) affiche un message à l’écran pour l’utilisateur, celui-ci saisit au clavier une valeur et cette valeur est renvoyée par input.

input renvoie toujours une chaîne de caractère.

Pour convertir une chaîne de caractère en un entier on peut utiliser :

nombre = int(input("votre nombre : "))

Si l’utilisateur tape une valeur pouvant être transformée en entier comme “123”, nombre vaudra 123.

Si l’utilsateur tape une valeur ne pouvant pas être transformée en entier comme “Marcel”, Python va générer une erreur.

  1. Écrire le script du jeu du plus ou moins suivant :

    >>>
    Le jeu consiste à deviner un nombre entre 1 et 100 :
    
    --->   50
    trop petit !
    --->   75
    trop petit !
    --->   87
    trop grand !
    --->   81
    trop petit !
    --->   84
    trop petit !
    --->   85
    Gagné !
    
  2. Améliorer le jeu pour indiquer combien de coups ont été necessaires pour gagner.

Exercice 13 - Intérêts #

Lorsqu’on place un capital avec intérêt, on perçoit à intervalle régulier un montant qui vient s’ajouter à ce capital.

Il existe deux manières de calculer les intérêts :

  • intérêts simples : le montant des intérêts est fixe dans le temps, généralement proportionnel au montant du capital initial
  • intérêts composés : les intérêts sont recalculés après chaque période et sont généralement proportionnels au capital courant, après versement des intérêts de la précédente période.

Considérons 100€ de capital initial, placés avec 10% d’intérêts :

  • Intérêts simples

    Les intérêts sont constants et valent 10€

    Capital initial Fin 1ère période Fin 2nde période Fin 3eme période
    100 110 120 130

    Par exemple : $120 + 10 = 130$

  • Intérêts composés

    Les intérêts sont variables et valent 10% du dernier capital

    Capital initial Fin 1ere période Fin 2nde période Fin 3eme période
    100 110 121 133.1

    Par exemple :

    On utilise un coefficient multiplicateur de $1.1$ :

    $120 \times 1.1 = 133.1$

Questions

  1. On place 50000 avec intérêts simples de 5% par période. À l’aide d’une boucle, calculez le montant du capital après 10 périodes.
  2. Proposez une formule explicite donnant ce montant, retrouvez votre résultat en posant un calcul à la main.
  3. Posez une équation vous donnant le nombre de période avant de doubler le capital en fonction du taux d’intérêt.
  4. Même montant initial et même taux d’intérêt mais cette fois composé. Calculez le montant du capital après 10 périodes.
  5. À l’aide d’une boucle, déterminez le nombre de période pour doubler le capital.

Corsons un peu le contexte. Cette fois on ajoute aussi un dépôt régulier de 2000€. À chaque période l’épargnant ajoute 2000€ à son capital. Selon le système d’intérêt, ils seront pris en compte ou non dans les intérêts suivants.

  1. Calculez à l’aide d’une boucle le montant après 10 périodes pour les deux systèmes d’intérêts
  2. Calculez à l’aide d’une boucle le nombre de périodes pour doubler le capital dans les deux systèmes d’intérêts.

Intérêts #

Run Reset Download Stop