TP - Chapitre 4 : Les fonctions

N.B. Niveau : Première Générale, enseignement de spécialité NSI (Numérique et Sciences Informatiques)

 

D
É
C
O
N
N
E
C
T
É

Chapitre 4 - Les fonctions

Nous avons déjà vu beaucoup de fonctions : print(), type(), len(), input(), range()...
Ce sont des fonctions prédéfinies (built-in functions).
Nous avons aussi la possibilité de créer nos propres fonctions !

Intérêt des fonctions

Une fonction est une portion de code que l'on peut appeler au besoin (c'est une sorte de sous-programme).

L'utilisation des fonctions évite des redondances dans le code : on obtient ainsi des programmes plus courts et plus lisibles.

Par exemple, nous avons besoin de convertir à plusieurs reprises des degrés Celsius en degrés Fahrenheit :

>>> print (100.0*9.0/5.0+32.0)
212.0
>>> print (37.0*9.0/5.0+32.0)
98.6
>>> print (233.0*9.0/5.0+32.0)
451.4

La même chose en utilisant une fonction :

>>> def F(DegreCelsius):
print (DegreCelsius*9.0/5.0+32.0)

>>> F(100)
212.0
>>> F(37)
98.6
>>> x = 233
>>> F(x)
451.4

Rien ne vous oblige à définir des fonctions dans vos scripts, mais cela est tellement pratique qu'il serait bête de s'en passer !

L'instruction def

Syntaxe :

def NomDeLaFonction(parametre1,parametre2,parametre3,...):
""" Documentation
qu'on peut écrire
sur plusieurs lignes """
# docstring entouré de 3 guillemets (ou apostrophes)

bloc d'instructions # attention à l'indentation

return resultat # la fonction retourne le contenu de la variable resultat

Exemple n°1

Une fois la fonction définie, nous pouvons l'appeler en saisissant MaPremiereFonction(). Print permet d'afficher ce que la fonction retourne, ici None



L'accès à la documentation se fait avec la fonction pré-définie help(). (Cette fonction n'est pas implémentée sur le site Internet). :

>>> help(MaPremiereFonction)    # affichage de la documentation
Help on function MaPremiereFonction in module __main__:

MaPremiereFonction()
Cette fonction affiche 'Bonjour'

Exemple n°2

La fonction suivante simule le comportement d'un dé à 6 faces.
Pour cela, on utilise la fonction randint() du module random.



Exemple n°3



Exemple n°4

Une fonction avec deux paramètres :




Exemple n°5

Une fonction qui retourne une liste :




Exemple n°6

Une fonction qui affiche la parité d'un nombre entier.
Il peut y avoir plusieurs instructions return dans une fonction.
L'instruction return provoque le retour immédiat de la fonction.



Portée de variables : variables globales et locales

La portée d'une variable est l'endroit du programme où on peut accéder à la variable.

Observons le script suivant :



La variable a de valeur 20 est créée dans la fonction : c'est une variable locale à la fonction.
Elle est détruite dès que l'on sort de la fonction.

L'instruction global rend une variable globale :



Remarque : il est préférable d'éviter l'utilisation de l'instruction global car c'est une source d'erreurs (on peut modifier le contenu d'une variable sans s'en rendre compte, surtout dans les gros programmes).

Exercices

Mission 1 ☆

Ecrire la fonction f(x) qui retourne la valeur du calcul du polynôme f(x)=27x3 -27x2 -18x +8 :

>>> print (f(0),f(1),f(0.5),f(0.25),f(0.375))
8.0 -10.0 -4.375 2.234375 -1.123046875

Code python :

non validé


						
					

Mission 2 ★

Le programme ci-dessous permet de convertir une image couleur en niveaux de gris :

Chaque pixel est représenté par 3 octets (rouge,vert,bleu):

  • le premier pixel blanc = (255,255,255)
  • le troisième pixel est bleu = (20,0,171)

Changer la couleur du premier pixel pour qu'il soit orange, puis exécuter le programme.

Code python :

  • Ajouter une fonction negatif(img) permettant d'inverser la couleur de tous les pixels : couleur inversée = 255-couleur courante
  • Remarque : Malgré le passage de paramètre, la liste img est stockée au même endroit que la liste image. Pour remédier au problème, appeler les fonctions gris et negatif avec le paramètre img.copy() qui va créer une nouvelle liste dans la mémoire de l'ordinateur.

non validé



Mission 3 ★

Ecrire une fonction qui retourne la factorielle d'un nombre entier N. La factorielle est la multiplication des nombres entiers de 1 à N : N ! = 1×2×...×N-1×N
Exemple :

>>> print (Factorielle(50))
30414093201713378043612608166064768844377641568960512000000000000

Code python :

non validé



Modifiez le programme précédent afin de vérifier le résultat de la fonction Factorielle en important le module math et en faisant deux print, l'un avec la fonction que vous avez créé l'autre avec la fonction factorial() du module math.

Mini projet : Identifiants et mots de passe

On vous fournit le fichier csv de votre classe les noms et les prénoms des élèves. Vous êtes chargés de générer des mots de passes aléatoires et de générer un affichage nom;prénom;identifiant;mot de passe (pour simplifier, on ne gère pas les doublons).

Le miniprojet se décompose sous formes de fonctions :

    • Enlever les caractères accentués des noms et des prénoms
    • Générer un mot de passe
    • Lire le fichier csv puis afficher les identifiants et mots de passe de chaque élève.

Mission 4 ★

Ecrire une fonction qui retourne la place d'une lettre dans une chaine de caractères. Si elle ne s'y trouve pas la fonction retourne -1

Algorithme :

Définir la fonction place_de_lettre(lettre,chaine)
place ← -1
i ← 0
pour chaque caractere dans la chaine
si le caractere est égal à la lettre
alors i → place
incrémenter i
retourne la place

Exemple :

>>> print(place_de_lettre("c","abcdefghijklmnopqrstuvwxyz"))
2
>>> print (place_de_lettre("é","abcdefghijklmnopqrstuvwxyz"))
-1

Code python :


								
						

	
		

Mission 4 validée : non validé

Mission 5 ★

Ajouter au script ci-dessus une fonction qui retourne une chaîne de caractères sans les caractères accentués. 

Algorithme :

Définir la fonction enleve_accents(chaine)
accents ← "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"
pas_accents ← "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"
resultat ← ""
pour chaque lettre dans chaine
place = recherche la place de lettre dans accents
Si place ≥ 0
ajouter à resultat le caractère de la chaine pas_accents de la même place
sinon
ajouter à resultat la lettre
retourne resultat
Exemple :
>>> print (enleve_accents("DJÀRAÏ Zakaryyâ"))
DJARAI Zakaryya

Mission 5 validée : non validé

Mission 6 ★★

Ecrire une fonction qui retourne un mot de passe de 8 caractères alphanumériques (consonne majuscule, voyelle, consonne, voyelle, consonne, voyelle, caractère spécial, chiffre).

Structure des données, un dictionnaire : composition = {"chiffres":'0123456789',"consonnes":"bcdfghjklmnpqrstvwxz","voyelles":"aeiouy","speciaux":"%$&<>@=+()*"}

  • Importer la bibliothèque random
  • L'instruction permettant d'afficher les consonnes majuscules : random.choice(composition["consonnes"]) .upper()

Je vous conseille de faire une chaine de caractères vide et lui ajouter chaque élément du mot de passe.

la fin du programme, retourner le mot de passe généré.

Avant de vous lancer dans le codage, faire l'algorithme du programme.

Résultat attendu :

>>> print (mot_de_passe())
Jolymi&3

Code python :


								
						

Mission 6 validée : non validé

Vérifier la résistance des mots de passe générés sur le site Internet kaspersky

mot de passe

Mission 7 ★ : Lecture du fichier

En vous aidant très simplement du code de la mission 7 du chapitre 3, adapter le programme afin de créer la fonction lecture_fichier qui prend en paramètre nom_fichier (str) une chaine de caractères qui sera le nom du fichier à lire et qui renvoie une liste contenant les noms, et prénoms.

Résultat attendu :

>>> print(lecture_fichier("Eleves.csv"))
[['ÃITSAYD', 'Àbdelwahd\n'], ['ALAOUÏ', 'Moulay-Wassim\n'], ['ÄNANTHARAJAH', 'Nilaksaan\n'], ['ÂYDOGAN', 'Mervé\n'], ['BELLOUHASSI', 'Yassir\n'], [...]]

Code python :


								
						
		

Mission 7 validée : non validé

Mission 8★ : Assemblage des fonctions

  • Dans la fenêtre de programmation ci-dessus, sans supprimer lecture_fichier(nom), coller les fonctions :
    • place_de_lettre(lettre,chaine)
    • enleve_accents(chaine)
    • mot_de_passe()
    • Les identifiants seront générés à partir de la première lettre du prénom concaténée au nom. Ils seront dénués d'accents et passés en minuscules avec la méthode lower().
      On peut imaginer une fonction identifiant qui prend en paramètres prenom et nom et qui retourne la chaine de caractères correspondant à l'identifiant.
    • Créer une fonction affiche_csv(eleves) qui génère avec un print la sortie ci-dessous :
    • le programme pricipal (dernière ligne du programme) sera composé de l'appel suivant : affiche_csv(lecture_fichier("Eleves.csv"))

Nom;Prénom;Identifiant;Mot de passe
ÃITSAYD;Àbdelwahd;aaitsayd;Fuweka@2
ALAOUÏ;Moulay-Wassim;malaoui;Cesyce@0
ÄNANTHARAJAH;...

Mission 8 validée : non validé

Rendu dans un tableur :


Fond :  Texte :  Tables :  Thème du langage: