Chapitre 4 : Les fonctions en python.
Dans ce chapitre, nous nous pencherons sur l'utilisation de fonctions en python.
Rappel : Les bonnes pratiques
Programs must be written for people to read, and only incidentally for machines to execute. -- Harold Abelson
Pour l'instant, nous avons commencé à écrire un code qui tourne. Il commence à être le temps de se demander comment on peut écrire du bon code.
Si il vous arrive un jour de devoir réaliser un projet d'informatique un minimum ambitieux, aussi bien seul mais aussi à fortiori à plusieurs, vous vous rendrez compte à quel point il est important d'écrire du code propre, lisible et bien structuré.
N'oubliez pas, autant que possible d'appliquer les conseils vus au cours théorique. En particulier, essayez dès à présent d'autant que possible :
- Respecter les conventions d'écriture (ex : "nom_de_variable")
- Utiliser des noms de variables et de fonctions explicites (ex : "diviseur" plutôt que "blug")
- Découper son code en tâches simples et qui ont un rôle bien défini.
- Documenter son code, python rend ça tellement facile!
Exercices
1) Structurons les codes précédents.
Créez un programme qui demande à l'utilisateur d'entrer un nombre (N) et qui affichera les N premiers nombres de la suite de fibonnacci et indiquera si ils sont premiers ou non. Exemple de sortie du programme :
Combien de nombres voulez-vous ?
5
Number 1 : 1 ; isn't prime.
Number 2 : 1 ; isn't prime.
Number 3 : 2 ; is prime.
Number 4 : 3 ; is prime.
Number 5 : 5 ; is prime.
Le code devra contenir deux fonctions separées :
- une fonction qui évalue si un nombre donné est premier ou non
- une fonction qui retourne les
N
premiers nombres de la suite de Fibonacci dans une liste
Indice : une boucle for
peut être combinée avec une fonction retournant une liste
2) Factorielle par récurrence
Écrivez une fonction qui, en s'appelant elle-même, permet de calculer la factorielle d'un nombre.
3) Vérification du type d'entrée
Un nombre entier est dit parfait si la somme de ses diviseurs (y compris 1 et lui-même) est égale au double du nombre. Écrivez une fonction qui admet une variable. Si la variable est un entier, affichez "vrai" si il est parfait et "faux" sinon. Si c'est un nombre à virgules, afficher un message d'alerte et retourner "vrai" ou "faux" si le nombre entier le plus proche * est parfait. Si ce n'est pas un nombre, affichez un message d'erreur.
Comme exemple de nombres parfaits, vous pouvez utiliser 6, 28 ou 496.
Attention, dans cet exercice, on veut vérifier le type de la variable d'entrée et pas si il peut être considéré comme un entier ! Par exemple, on voudrait le message d'alerte si on appelle la fonction avec 3.0 comme argument.
Pour tester le type d'une variable en python on utilise la fonction isinstance
:
>>> isinstance(45, int)
True
>>> isinstance(45, float)
False
- veillez à effectuer un arrondi correct (1.49 -> 1, 1.51 -> 2) la fonction
round
peut être utile
4) Conversion de dates
Ecrivez une fonction qui prend en argument un jour de 1 à 31 et un numero de mois de 1 à 12 et qui renvoie une chaîne de caractère telle que "Samedi 25 mai 2020". Le premier janvier 2020 était un mercredi.
Ecrivez une fonction qui prenne une chaîne de caractère telle que "25/05" et un format optionnel tel que "dd/mm" et utilise la fonction ci-dessus pour afficher la date.
Les formats supportés seront:
- "dd/mm" -> "25/05" = le 25 mai (notation francophone, par defaut)
- "mm/dd" -> "05/25" = le 25 mai (notation anglo-saxonne)
Verifiez à chaque fois si la date est valide avant de la convertir.
Si vous avez le temps, ajoutez l'année aux deux fonctions en démarrant au premier Janvier 2000 (un samedi). Les formats serons "dd/mm/yyyy", "dd/mm/yy", "yy/mm/dd" et "yyyy/mm/dd".