L1 maths et miashs
Introduction à la programmation TP 7
Ob jectif : La boucle while
Exercice 1 Saisie "tant que"
Écrire la fonction saisieON qui demande à l'utilisateur de répondre par oui ou non et qui recommence jusqu'à
ce que l'utilisateur donne une réponse acceptable (dans un premier temps on acceptera uniquement les réponses
OUI et NON on pourra en ajouter ensuite). Quand la réponse est compréhensible on renverra 1 pour tout
ce qui représente OUI et 0 pour tout ce qui représente NON.
Exercice 2 Saisie et moyenne
On veut refaire l'exercice de saisie de valeurs mais sans demander au préalable le nombre de valeurs à saisir. Le
programme demande des valeurs à l'utilisateur jusqu'à ce que l'utilisateur tape la valeur "-1". Le programme
ache alors le nombre de valeurs saisies et leur moyenne.
Attention, vériez bien que votre résultat est "juste" !
premiere valeur ? 5
valeur suivante? -1 pour stopper 10
valeur suivante? -1 pour stopper 15
valeur suivante? -1 pour stopper 8
valeur suivante? -1 pour stopper 12
valeur suivante? -1 pour stopper -1
la moyenne des 5 valeurs saisies est 10
Exercice 3 Test de lancers de pièces version 2
On veut écrire des programmes pour tester le lancer de pièces aléatoire : On n'oubliera pas le from random
import randint en début de chier
1. Ré-écrire la fonction alea(n) qui renvoie un entier entre 1 et n (inclus).
2. Écrire la fonction aumoins(n) qui lance une pièce autant de fois que nécessaire pour qu'on ait obtenu au
moins n fois face et n fois pile. Cette fonction renverra le nombre d'essais nécessaires.
3. Écrire la fonction main() qui demander la valeur du paramètre n, lance l'expérience et ache les résultats.
Exemple :
nombre voulu? 100
nombre de lancers necessaires: 210
4. On reprend maintenant l'exercice du TP5 et 6 avec la version for.
Vous trouverez cette fonction dans le chier [Link]
La fonction main lance le programme en demandant le nombre d'essais par série et ensuite fait une
première série, ache les résultats et propose de continuer avec d'autres séries tant que l'utilisateur le
souhaite en accumulant les réponses.
Le programme doit se dérouler comme l'exemple ci-dessous.
nombre de lancers par series? 100
resultats pour ces 100 lancers: 55 piles
voulez-vous continuer? (oui=1) 1
resultat pour 100 lancers 47
resultat global 200 lancers 102 piles
voulez-vous continuer? (oui=1) 1
resultat pour 100 lancers 41
resultat global 300 lancers 143 piles
resultat global 200 lancers 102 piles
voulez-vous continuer? (oui=1) 0
Exercice 4 retour sur les exercices de calcul mental
Au TP5 vous deviez écrire la fonction calcul(n) qui prend en argument une variable de type entier n. Cette
fonction détermine deux entiers aléatoirement choisis entre 1 et n (on utilisera la fonction alea écrite précé-
demment ) et demande à l'utilisateur de calculer la somme de ces deux nombres. Si la réponse est bonne le
programme ache bravo et renvoie 1, si la réponse est fausse le programme ache la bonne réponse et renvoie
0. Vous trouverez cette fonction dans le chier [Link]
Écrire la fonction AuMoinsCalcul(n, nb) qui prend en argument deux variables de type entier (n et nb). Le
programme va poser des questions comme celles de la fonction calcul, n étant la valeur maximum des nombres
utilisés, jusqu'à ce que l'utilisateur ait réussi nb questions justes successives.
A la n le programme doit acher le nombre total de tentatives . Le programme doit fonctionner comme dans
l'exemple.
Écrire la fonction main() pour lancer le programme précédent : le programme demande à l'utilisateur les valeurs
de n et de nb.
Exemple :
valeur maximale des nombres : 20
nombre de calculs : 3
calculez 12 +3 : 15
bravo !
nombre de points 1
calculez 8 +2 : 10
bravo !
calculez 19 +1 : 21
faux, il fallait trouver 20
On repart
calculez 12 +10 : 22
bravo !
nombre de points 1
calculez 8 +7 : 15
bravo !
nombre de points 2
calculez 7 +20 : 27
bravo !
nombre de points 3
You win!!!
6 calculs en tout
Vous pouvez ensuite proposer d'enchaîner plusieurs parties avec également d'autres modes de jeu..... par exemple
un mode "record" (tentatives jusqu'à erreur avec un max sur l'ensemble des parties...)
Exercice 5 saisie de phrases
1. Ecrire une fonction test(ch, carac) qui teste si la chaîne ch contient au moins un caractère carac. Cette
fonction doit renvoyer au choix False/ True ou 0 / 1.
>>> test("bonjour ","e")
False
>>> test("bonjour vous "," ")
True
>>>
2. Ecrire la fonction saisiePhrase () qui demande à un utilisateur de saisir des mots jusqu'à taper le mot
clé stopFin. A ce moment là le programme renvoie la chaine constituée des mots saisis séparés par des
espaces.
>>> saisiePhrase():
mot ou StopFin pour nir: Python
mot ou StopFin pour nir: est
mot ou StopFin pour nir: un
mot ou StopFin pour nir: langage
mot ou StopFin pour nir: formidable
mot ou StopFin pour nir: StopFin
' Python est un langage formidable'
>>>
3. On veut interdire de saisir plusieurs mots à la fois. Ecrire la fonction saisieMot() qui demande un mot à
l'utilisateur et recommence tant que le mot contient un espace. Si le mot ne contient pas d'espace, il est
renvoyé. On utilisera la fonction de la question 1 pour le test.
>>> saisieMot()
mot ou StopFin pour nir: un langage
un seul mot, recommencez
mot ou StopFin pour nir: python est
un seul mot, recommencez
mot ou StopFin pour nir: python
'python'
4. Utiliser cette fonction pour que la saisie de la question2 se fasse mot par mot sans accepter les espaces.
>>> saisiePhrase2()
mot ou StopFin pour nir: python
mot ou StopFin pour nir est
mot ou StopFin pour nir: un langage
un seul mot, recommencez
mot ou StopFin pour nir: un
mot ou StopFin pour nir: langage
mot ou StopFin pour nir: vraiment formidable
un seul mot, recommencez
mot ou StopFin pour nir: vraiment
mot ou StopFin pour nir: formidable
mot ou StopFin pour nir: StopFin
' python est un langage vraiment formidable'
>>>
5. Faire une autre version de cette saisie : l'utilisateur doit entrer uniquement des mots sans lettre e et
toujours sans espaces. S'il saisit un mot avec un espace il doit recommencer , s'il tape un mot avec un
e on lui indique qu'il a perdu. Comme dans les questions précédentes, s'il tape le mot clé stopFin la
phrase ainsi constituée sera renvoyée. On utilisera la fonction de la question 1. Bien sûr s'il tape Stopn
la phrase crée est renvoyée. Ecrire la fonction SaisiePhraseSansE()
>>> saisiePhraseSansE()
mot sans e ou StopFin pour nir Python
mot sans e ou StopFin pour nir is
mot sans e ou StopFin pour nir fantastic
mot sans e ou StopFin pour nir really
Perdu
>>>
6. Modier cette dernière version de cette saisie pour ajouter un comptage du nombre de mots sans e saisis
avant de perdre dans le cas où il perd. Ecrire la fonction SaisiePhraseSansE()
>>> saisiePhraseSansE()
mot sans e ou StopFin pour nir Python
mot sans e ou StopFin pour nir is
mot sans e ou StopFin pour nir fantastic
mot sans e ou StopFin pour nir really
Perdu au bout de 3 mots
>>>
Exercice 6 divisibilité par 3
a. Ecrire une fonction qui étant donnée une chaîne de caractères uniquement composée de chires, renvoie la
somme de ces chires. exemple : som (123123) renverra 12 .
b. On va écrire un critère de divisibilité par 3 en utilisant le fait qu'un nombre est divisible par 3 si et seulement
si la somme des chires le composant est divisible par 3 . Si la somme des chires est supérieure à 10 alors on
recommence à faire la somme de chires etc.... Pour cela on utilisera l'algorithme suivant :
soit ch la chaîne à étudier soit s= som(ch) si s< =9 faire le test (dans ce cas on pourra utiliser que seuls 3, 6 et
9 sont divisibles par 3 ) sinon recommencer
Ecrire cette fonction de test.