Chapitre 3 Fonctions
3.1 Activité 1: Premiers pas
- Saisir le code suivant et l’analyser ligne à ligne
# Déclaration de la fonction bonjour_v1
def bonjour_v1():
print('Bonjour')
# Appel de la fonction bonjour_v1
bonjour_v1()
- Justifier que la ligne 5 est exécutée avant la ligne 3.
- Compléter le code afin que le programme affiche
Bonjour Monsieur DENIS
après avoir affichéBonjour Toto!
# Déclaration de la fonction bonjour_v2
def bonjour_v2(qui):
"""
In: reçoit la chaine de caractères qui
Travail: Affiche Bonjour suivi de qui
Out: Rien
"""
print('Bonjour', end="") #end="" permet de ne pas revenir a la ligne
print(qui)
# Appels de la fonction bonjour_v2
bonjour_v2("Toto !")
nom = "Monsieur DENIS"
bonjour_v2(....)
- Une fonction permet aussi de renvoyer une valeur. Complète la fonction suivante:
# Déclaration de la fonction minimum
def minimum(a,b):
"""
In: a et b deux nombres
Out: retourne le plus petit nombre entre a et b
"""
if ... < ...:
return a
else:
return b
3.2 Activité 2: Erreurs classiques
- Explique pourquoi le shell affiche
None
et corrige ce fonctionnement.
def ajoute_1(x):
print(x+1)
= 3
y = ajoute_1(y)
res print(res)
- Ecris une fonction
plus_1
qui reçoit comme argument un nombre et qui retourne ce nombre augmenté de 1. Est-il normal que cette fonction n’affiche rien au cours de son exécution ? - Ecris un petit programme python qui montre la différence entre
return
etprint
. - Ecris un programme qui demande à l’utilisateur d’entrer deux nombres entiers et qui affiche le plus petit des deux nombres. Exemple de déroulement:
entrer nb 1: 12
entrer nb 2: 15
12 est le plus petit nombre parmi 12 et 15
- Expliquer pourquoi le ligne avec
print('Toto')
ne sera jamais lue par l’interpréteur Python.
def double(x):
return 2 * x
print('Toto')
print(f"le double de 3 est {double(3)}")
3.3 Activité 3: Tests unitaires
- Recopier le code suivant et modifier la valeur de résultat. Que se passe-t-il ? Expliquez le fonctionnement de
assert
= 20
resultat
# Test de la valeur de résultat
assert resultat == 20 , "resultat différent de 20"
#
def somme(a,b):
= a + b
s = 2 * s
s return s
#
## Test de la fonction somme
assert somme(2, 3) == 10
#
- Ecrire une fonction nommée
pythagore
qui reçoit les longueursa
etb
d’un triangle rectangle et qui renvoie la valeur de l’hypothénuse de ce triangle. - Tester la fonction précédente avec le test unitaire suivant:
assert(hypothenuse(3,4) == 25)
- Ecrire une fonction majeur qui reçoit l’âge de l’utilisateur qui renvoie True si l’utilisateur est majeur et False dans les autres cas. Ecrire deux tests unitaires pour tester le bon fonctionnement de votre fonction.
3.4 Activité 4: Portée des variables
- Prédire ce que va afficher le programme suivant:
- Prédire et expliquer dans le détail ce que fait le programme suivant:
a=1
def test_2(a):
a= 2
print(a)
def test_3():
global a
a= 2
print(a)
test_2(a=1)
print(a)
test_3()
print(a)
- Corriger l’erreur dans le programme suivant:
3.5 Activité 5: Passage d’arguments
- Afin de calculer sa moyenne coefficientée un élève a programmé la fonction suivante
moyenne_coef
. Cette fonction reçoit deux arguments:dm
etds
qui contiennent les notes obtenues respectivement au devoir maison et au devoir sur table. Commente et explique en détaille le code suivant:
def moyenne_coef(dm, ds):
= 1
coeff_dm = 3
coeff_ds = coeff_dm + coeff_ds
somme_coeff = (coeff_dm*dm + coeff_ds*ds) / somme_coeff
moyenne return moyenne
= moyenne_coef(12 , 10)
ma_moyenne print(ma_moyenne)
- Bruce a obtenu 12 au devoir sur table et 10 au devoir maison. Faut-il modifier le programme précédent ? L’ordre de arguments lors de l’appel de la fonction est-il important ? Explique.
- Comparer les 3 appels suivants et justifier les valeurs calculées.
= moyenne_coef(10 , 12)
ma_moyenne = moyenne_coef(12 , 10)
ma_moyenne = moyenne_coef(ds = 10 , dm =12) ma_moyenne
- La fonction
publier_msg(message, utilisateur)
doit permettre l’affichage suivant:
Pablo: Super météo aujoud'hui !
Louna: Envie de se promener ?
Complète le programme suivant pour obtenir l’affichage souhaité.
def publier_msg(message, utilisateur):
print(f"{utilisateur}: {message})
publier_msg("...","....")
...
*
devant un paramètre signifie que la fonction peut recevoir un nombre quelconque d’arguments positionnés. C’est très utile lorsqu’on ne peut prédire le nombre d’arguments qui va être passé. Dans la fonction ci-dessous*msgs
constituent un tuple. Prédire avec un papier et un crayon l’affichage que va produire le programme suivant.
def poster_messages(utilisateur, *msgs):
print(f"{utilisateur} a dit:")
for texte in msgs:
print(texte)
"Barbe rouge", "3...", "2...","1...", "FEU à volonté !" ) poster_messages(
- Explique le programme suivant et nomme la structure dans laquelle la fonction reçoit les arguments:
**desc
?
def desc_utilisateur(utilisateur, **informations):
print(f"Voici les informations de l'agent secret {utilisateur}:")
for cle, valeur in informations.items():
print(f"{cle}: {valeur}")
"James Bond", nationnalite = "Britannique", age = 33, permis_de_tuer = True, boisson ="Vodka Martini...") desc_utilisateur(
3.6 Activité 6: Importer de nouvelles fonctions
- Nous allons utiliser le module math pour faire quelques calculs.
from math import sqrt, cos
= sqrt(2) / 2
a = cos(pi / 4)
b print(f"La moitié de racine de 2 vaut {b :<10.3f} ")
print(f"Le cosinus de pi/4 ou 45 degré vaut {c :<10.3f} ")
Explique ce que fait la première ligne.
- Modifie la programme afin qu’il affiche la valeur du cosinus d’un angle de 60° c’est à dire de pi/6. Quel problème pose cette valeur calculée ?
- Pour générer un entier aléatoire, on utilise très couramment le module
random
. Aller consulter la documentation derandint
et compléter la fonction tirage afin qu’elle retourne un entier compris entre 1 et 6 de manière à simuler un dé à jouer.
import random
def tirage()
return randint()
= tirage()
lance print(lance)
- Le programme précédent importe la totalité du module random ce qui est coûteux en mémoire. Modifier le programme de manière à n’importer que la fonction
randint
. - En utilisant la fonction précédente écrire un programme qui simule le lancement de 3 dés et qui affiche “PAIRE” si deux dés sont identiques “BRELAN” si 3 dés sont identiques et “RIEN” dans les autres cas. ## Corrections des activités