0% ont trouvé ce document utile (0 vote)
3 vues4 pages

TD04 Python

Ce document présente un cours sur l'algorithmique et la programmation en Python, avec des exercices pratiques sur les fonctions. Les exercices couvrent divers aspects, tels que la compréhension des fonctions, la validation de dates, la simulation de ventes de tickets de tombola, et la manipulation de l'alphabet. Chaque exercice inclut des tâches spécifiques à réaliser, favorisant l'apprentissage des concepts de programmation.

Transféré par

Vault Main
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
3 vues4 pages

TD04 Python

Ce document présente un cours sur l'algorithmique et la programmation en Python, avec des exercices pratiques sur les fonctions. Les exercices couvrent divers aspects, tels que la compréhension des fonctions, la validation de dates, la simulation de ventes de tickets de tombola, et la manipulation de l'alphabet. Chaque exercice inclut des tâches spécifiques à réaliser, favorisant l'apprentissage des concepts de programmation.

Transféré par

Vault Main
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Université Clermont Auvergne Portail Maths Info, LAS Maths-Info, PASS Info

Algorithmique et Programmation en Python - Semestre 1

Algorithmique et Programmation en Python


TD04 : Fonctions

1 Fonctions (bases)

Exercice 1 : Comprendre les fonctions déjà connues


Pour chacun des appels de fonction ci-dessous :
1. Quel est le nom de la fonction ?
2. Combien y a-t-il d’arguments ?
3. Pour chaque argument (s’il y en a), donnez son type et sa valeur.
4. Y a-t-il une valeur de retour, et si oui laquelle (valeur et type) ?
5. Y a-t-il des "effets de bord" (interactions entrées/sorties, dessin turtle...) provoqués par l’appel ?

text=input("Quel est votre nom?")


print("Bonjour",text)

Exercice 2 : Lecture
Prédire le fonctionnement des programmes ci-dessous en indiquant ce qu’ils vont afficher à l’exécution.
Programme 1 Programme 2
def f(x,y): def somme_premiers_entiers(n, modeAffichage):
c=x**2+y**2 i=1
return c somme=0
# programme principal while i<n:
a=3 somme=somme+i
b=4 if modeAffichage:
d=f(a,b) print("0+ ... +", i, "=", somme)
print("d=", d) i=i+1
d=f(4,5) return somme
print("d=", d) # programme principal
print(f(a+b, 10)) s=somme_premiers_entiers(5,False)
print("s=", s)
modeAffichage=True
s=somme_premiers_entiers(5,modeAffichage)
print("s=", s)

Exercice 3 : Dé
1. Écrire une fonction qui prend un argument un entier et qui teste si la valeur donnée est celle d’un dé
(entre 1 et 6). Si oui, la fonction affiche Valeur correcte et renvoie True, sinon la fonction affiche Valeur
incorrecte et renvoie False.
2. Écrire un programme principal qui demande à l’utilisateur une première valeur de dé puis qui teste si
la valeur est correcte grâce à la fonction précédente (avec l’affichage correspondant) ; puis, si la première
valeur était correcte, le programme doit demander une deuxième valeur de dé et la vérifier (avec l’affichage
correspondant) ; enfin, si les deux valeurs étaient correctes, le programme doit afficher la somme des deux
dés.
3. On décide finalement de ne pas afficher Valeur correcte si la valeur du dé testée est effectivement correcte
(mais on garde l’affichage si la valeur est incorrecte). Quelle partie de votre code doit être modifiée ?

Exercice 4 : Dates
Le but de cet exercice est d’écrire une fonction date_valide qui reçoit en argument un jour, un mois et une
année (3 entiers supposés strictement positifs) et qui teste si la date correspondante est correcte. Cette fonction
renverra donc un booléen. Par exemple le 31/2/2012 n’est pas correct. Le 20/7/2015 est correct.

UCA - Licence N1 / LAS / PASS - UE Info. - Python 1


1. Écrire une fonction est_bissextile qui prend en argument un entier représentant une année et qui renvoie
un booléen indiquant si l’année est bissextile ou pas. Rappel : Une année est bissextile si c’est un multiple
de 400, ou bien si c’est un multiple de 4 sans être un multiple de 100.
2. Écrire une fonction jour_valide qui prend en argument deux entiers strictement positifs indiquant respec-
tivement un numéro de jour et un numéro de mois, et qui teste si le numéro de jour donné est correct pour
ce mois-ci dans une année non-bissextile. Cette fonction renverra un booléen.
3. Écrire la fonction date_valide, qui doit faire appel aux fonctions écrites précédemment.
4. Pour s’entraîner à tester nos fonctions Écrire un programme principal contenant des tests "en dur" des
différentes fonctions, en s’assurant de tester suffisamment de cas différents.
Attention : Dans cet exercice, comme partout, on prendra bien soin d’éviter les constructions du type suivant :
if condition : if condition :
return True return False ⇒ On les remplacera par return condition
ou
else: else: ou par return not(condition).
return False return True

Exercice 5 : Prévision de tickets de tombola


Nous devons créer un outil de simulation pour une association caritative qui vend des tickets de tombola pour
récolter des dons. Ils ont actuellement réussi à obtenir les prévisions suivantes :
— Pour un prix p de ticket inférieur ou égal à 15e, si on appelle un−1 le nombre de personnes ayant acheté un
ticket à l’année précédente n, alors le nombre d’acheteurs à l’année n devrait être de 1.15 × un−1 − 300.
— Pour un prix p de ticket strictement supérieur à 15e, le nombre d’acheteurs d’une année à l’autre passe au
contraire de un−1 à 1.07 × un−1 − 500.
À ces prévisions s’ajoutent également l’effet des jeux Paralympiques : si l’année est un multiple de 4, alors il faut
ajouter 1 000 acheteurs par rapport aux prévisions ci-dessus.
1. Écrire une fonction prochain qui prend en argument le prix du ticket du tombola, le nombre d’acheteurs
l’année précédente, et un entier représentant l’année en cours, et qui renvoie le nombre d’acheteurs prévision-
nels de tickets selon les formules ci-dessus (pour simplifier, on se permettra d’avoir un nombre d’acheteurs
non-entier).
2. Écrire une fonction nb_tickets qui prend en arguments le prix du ticket, le nombre d’acheteurs à la
toute première tombola, l’année de cette première tombola, un entier annee_voulue indiquant l’année
pour laquelle on souhaite faire la prévision, et un booléen affichage. La fonction doit renvoyer le nombre
d’acheteurs prévisionnels qu’il y aura en annee_voulue. Si affichage est faux, la fonction ne doit rien
afficher, sinon elle doit afficher pour chaque année intermédiaire le nombre d’acheteurs prévisionnels.
Exemple : L’appel nb_tickets(17, 5000, 2020, 2022, True) doit renvoyer 5759.5 et dot provoquer l’af-
fichage suivant :
2020 : 5000
2021 : 5850.0
2022 : 5759.5
3. Écrire une fonction meilleur_gain qui prend en argument un entier nb_init désignant le nombre d’ache-
teurs à la première tombola, annee_init l’année de cette première tombola, annee_voulue l’année pour
laquelle on veut la prévision, et deux prix prix1 et prix2. La fonction renverra un booléen indiquant si
prix1 rapporte une plus grosse cagnotte que prix2 pour la tombola (somme des prix des tickets vendus) à
l’année de prévision concernée.
4. Écrire une fonction gain_cumule qui prend en argument un prix, un entier nb_init désignant le nombre
d’acheteurs à la première tombola, annee_init l’année de cette première tombola, annee_voulue l’année
pour laquelle on veut la prévision, et qui renvoie la somme de toutes les cagnottes de tombola depuis la
création (de la première année jusqu’à annee_voulue incluses). Ici, il est tentant de vouloir faire appel à la
fonction nb_tickets, mais demandez-vous si cela ne risque pas de générer beaucoup de calculs inutiles.
5. Écrire une fonction meilleur_gain_cumule qui prend en argument un entier nb_init désignant le nombre
d’acheteurs à la première tombola, annee_init l’année de cette première tombola, annee_voulue l’année
pour laquelle on veut la prévision, et deux prix prix1 et prix2. La fonction renverra un booléen indiquant
si prix1 rapporte un meilleur gain cumulé que prix2 pour l’ensemble des tombolas (entre annee_init et
annee_voulue incluses).

Exercice 6 : Somme des chiffres


Le but de cet exercice est d’écrire une fonction qui reçoit en argument un entier (par exemple 37251) et renvoie
la somme de tous ses chiffres (ici : 3+7+2+5+1=18). On va écrire deux versions

1. Version 1 (facile) : en convertissant l’entier en chaîne de caractères, écrire la fonction somme_des_chiffres_v1.

UCA - Licence N1 / LAS / PASS - UE Info. - Python 2


2. Version 2 : on s’interdit de convertir l’entier en chaîne, mais on va utiliser l’opérateur modulo pour extraire
l’un des chiffres (à une des deux extrémités, à vous de déduire laquelle). écrire la fonction somme_des_chiffres_v2.

Exercice 7 : L’alphabet sous toutes ses formes


1. Écrire une fonction alphabet_rectangle qui prend en argument deux entiers total et nb_colonnes et
qui affiche un rectangle contenant un nombre total de lettres de l’alphabet en minuscule, sur le nombre
de colonnes spécifié, comme sur les exemples ci-dessous. Si total dépasse 26, l’alphabet doit reprendre du
début ; si total n’est pas un multiple de nb_colonnes, la dernière ligne devra être incomplète.
Affichage provoqué par l’appel Affichage provoqué par l’appel
alphabet_rectangle(40, 5) : alphabet_rectangle(53, 7) :
a b c d e a b c d e f g
f g h i j h i j k l m n
k l m n o o p q r s t u
p q r s t v w x y z a b
u v w x y c d e f g h i
z a b c d j k l m n o p
e f g h i q r s t u v w
j k l m n x y z a
2. En suivant les mêmes principes qu’à la question précédente, écrire une fonction alphabet_triangle qui
prend en argument un entier total et qui affiche cette fois-ci l’alphabet sous forme d’un triangle comme
dans les exemples ci-dessous :
Affichage provoqué par l’appel Affichage provoqué par l’appel
alphabet_triangle(12) : alphabet_triangle(40) :
a a
b c b c
d e f d e f
g h i j g h i j
k l k l m n o
p q r s t u
v w x y z a b
c d e f g h i j
k l m n
3. Écrire une fonction alphabet_triangle_inverse qui prend en argument un entier total et qui affiche cette
fois-ci l’alphabet à l’envers sous la forme d’un triangle dont la pointe serait en haut à droite, comme sur les
exemples ci-dessous. Il est fortement conseillé de commencer par écrire une fonction calcule_nb_lignes
qui prend en argument l’entier total et qui renvoie le nombre de lignes qui devront être affichées dans ce
triangle, car vous aurez probablement besoin de cette information dès l’affichage de la première ligne du
triangle.
Affichage provoqué par l’appel Affichage provoqué par l’appel
alphabet_triangle_inverse(30) : alphabet_triangle_inverse(15) :
z z
y x y x
w v u w v u
t s r q t s r q
p o n m l p o n m l
k j i h g f (Pas d’espace devant le p à la dernière ligne)
e d c b a z y
x w
(Pas d’espace devant le x à la dernière ligne)
4. On souhaite maintenant modifier légèrement nos fonctions précédentes pour que l’on puisse choisir d’afficher
l’alphabet en majuscule plutôt qu’en majuscule, ou bien pouvoir choisir de commencer l’alphabet par une
autre lettre que le 'a' (ou 'z' pour l’alphabet inversé). D’un autre côté, on aimerait bien que les appels
de fonctions tels qu’indiqués dans les exemples précédents continuent de fonctionner à l’identique (rétro-
compatibilité). Quelle solution paraît la plus pertinente dans ce cas pour implémenter les modifications
voulues ? Est-il vraiment nécessaire de traiter le cas des majuscules différemment du cas où l’on souhaite
indiquer un début d’alphabet différent de 'a' ?

UCA - Licence N1 / LAS / PASS - UE Info. - Python 3


2 Fonctions avec paramètres optionnels et plusieurs valeurs de retour

Exercice 8 : Tables de multiplication


1. Écrire une fonction table qui affiche la table 2. Écrire une nouvelle version
de multiplication d’un entier reçu en para- table_parametrable de la fonction précé-
mètre, de la manière suivante. dente pour pouvoir préciser deux paramètres
optionnels : la valeur de début (par défaut
>>> table(3)
1) et la valeur de fin (par défaut 10) des
3 x 1 = 3
multiplicateurs de la table de multiplication
3 x 2 = 6
affichée. Par exemple :
3 x 3 = 9
3 x 4 = 12 >>> table(3, 2, 4)
3 x 5 = 15 3 x 2 = 6
3 x 6 = 18 3 x 3 = 9
3 x 7 = 21 3 x 4 = 12
3 x 8 = 24
3. Écrire une troisième version de cette fonction
3 x 9 = 27
qui reçoit un 3e paramètre optionnel : le pas
3 x 10 = 30
entre les multiplicateurs considérés (par dé-
faut 1). Par exemple :
>>> table(3, 2, 4, 2)
3 x 2 = 6
3 x 4 = 12

Exercice 9 : Intervalle
1. Écrire une fonction afficheIntervalle qui reçoit en paramètre 2 entiers a et b, et qui affiche les entiers
de l’intervalle [a,b].
2. Que se passe-t-il si on appelle cette fonction avec un seul paramètre ?
3. Écrire une nouvelle fonction afficheIntervalle2 qui reçoit en paramètre 2 entiers, le 2e étant optionnel
(valeur par défaut = None). Cette fonction affiche les entiers de l’intervalle [a,b], ou uniquement l’entier a
s’il y a un seul paramètre. On appellera la première fonction.
4. Écrire une troisième fonction afficheIntervalle3 qui reçoit 2 paramètres optionnels (entiers a et b), et
affiche les entiers de l’intervalle [a,b]. Si b est absent elle n’affiche que a. SI a est aussi absent elle n’affiche
rien. On appellera la 2e fonction.

Exercice 10 : Vrai ou faux


On s’intéresse à un loto où le joueur choisit deux entiers entre 1 et 50 sur une grille, et s’il le souhaite, coche la
case Superloto (en supplément de prix). Ensuite le tirage du loto a lieu : deux numéros sont tirés au hasard entre
1 et 50 (inclus), et le joueur gagne 0, 50 ou 100e suivant qu’il avait coché 0, 1 ou les 2 bons numéros. De plus un
numéro chance est tiré entre 1 et 5 : les gains des joueurs Superloto sont multipliés par ce numéro chance.
1. On suppose qu’on dispose d’une fonction gain_ticket qui prend en argument les deux numéros cochés par le
joueur, ainsi qu’un paramètre optionnel superloto (faux par défaut) et un paramètre optionnel affichage
(faux par défaut). Elle simule le tirage du loto et elle retourne à la fois le gain et le numéro chance. De plus
si affichage est vrai, elle affiche le tirage du loto effectué et le gain obtenu.
Parmi les appels ci-dessous, lesquels provoquent une erreur et pourquoi ?
gain_ticket(18, 22)
gain_ticket(affichage=True, superloto=False, 18, 36)
gain_ticket(18, 36, True, False)
gain_ticket(18, 36, superloto=True, affichage=False)
gain_ticket(18, 36, affichage=True, superloto=False)
gain_ticket(18, 36, affiche=True, SuperLoto=False)
g, num_chance = gain_ticket(18, 27, False)
g, num_chance = gain_ticket(11, 36, True, superloto=False)
g, num_chance = gain_ticket(9, 43, False, affichage=True)
g, num_chance = gain_ticket(18, 36, affichage=True)
2. Écrivez la fonction gain_ticket (pour une meilleure expérience marketing, on souhaite au passage rajouter
un affichage lorsque l’option Superloto aurait rapporté strictement davantage au joueur).

UCA - Licence N1 / LAS / PASS - UE Info. - Python 4

Vous aimerez peut-être aussi