N.B. Niveau : Première Générale, enseignement de spécialité NSI (Numérique et Sciences Informatiques)
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 !
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 !
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
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'
La fonction suivante simule le comportement d'un dé à 6 faces.
Pour cela, on utilise la fonction randint()
du module random
.
Une fonction avec deux paramètres :
Une fonction qui retourne une liste :
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.
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).
Mission 1 ☆
>>> print (f(0),f(1),f(0.5),f(0.25),f(0.375)) 8.0 -10.0 -4.375 2.234375 -1.123046875
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):
Changer la couleur du premier pixel pour qu'il soit orange, puis exécuter le programme.
negatif(img)
permettant d'inverser la couleur de tous les pixels : couleur inversée = 255-couleur couranteimg.copy()
qui va créer une nouvelle liste dans la mémoire de l'ordinateur.
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
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 :
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
Mission 4 validée :
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)Exemple :
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
>>> print (enleve_accents("DJÀRAÏ Zakaryyâ")) DJARAI Zakaryya
Mission 5 validée :
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":"%$&<>@=+()*"}
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
Mission 6 validée :
Vérifier la résistance des mots de passe générés sur le site Internet kaspersky
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'], [...]]
Mission 7 validée :
Mission 8★ : Assemblage des fonctions
lecture_fichier(nom)
, coller les fonctions :place_de_lettre(lettre,chaine)
enleve_accents(chaine)
mot_de_passe()
lower()
.identifiant
qui prend en paramètres prenom
et nom
et qui retourne la chaine de caractères correspondant à l'identifiant.affiche_csv(eleves)
qui génère avec un print la sortie ci-dessous : 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 :
Rendu dans un tableur :
Fond : Texte : Tables : Thème du langage:
Contenu
sous licence CC BY-NC-SA 3.0
Fabrice Sincère ; version 1.3.5.29
Modifié et adapté par Pascal Hassenforder 07/11/2020
MAJ le 04/01/2022