PCSI 2016/17 Utilisation de fonctions en Python Quand une certaine tâche doit être accomplie à différents endroits d’un programme, il est peu pratique de répéter le code à chaque endroit. Les fonctions (appelées aussi procédures d’autres langages de programmation) permettent de décomposer un programme complexe en une série de sous-programmes plus simples. En python, une fonction s’utilise de la manière suivante : >>> nomDeLaFonction(liste de paramètres séparés par des virgules) exécuter une fonction (on dit aussi : faire un appel de fonction) a les deux effets suivants : 1. Modifier l’état de l’ordinateur ; en particulier, certaines variables stockées en mémoire vive peuvent changer de valeur. De ce point de vue, une fonction au sens informatique (appelée aussi procédure dans d’autres langages de programmation) diffère d’une fonction au sens mathématique. 2. Renvoyer une valeur lorsqu’elle se termine (de la même manière qu’une fonction au sens mathématique), par exemple sin(π/6) renvoie la valeur 0.5 (à supposer que sin et π soient connus par python.) Certaines fonctions sont déjà intégrées au langage Python, voir http ://docs.python.org/3/library/functions.html pour plus de détail. Voici ce que font les plus simples d’entre elles : abs(x) Renvoie la valeur absolue (ou le module) du nombre x complex(x,y) Crée le nombre complexe x + iy ; en Python, il s’affiche ainsi : (x + yj) float(x) Convertit l’entier ou la chaîne x en «nombre à virgule flottante» help(objet) Affiche une page d’aide concernant objet qui peut être un module, une fonction, une méthode, un mot clé ou un sujet de la documentation officielle sur Python. input(message) Affiche la chaîne de caractères message, puis invite l’utilisateur à entrer des caractères au clavier. Lorsque la touche <Entrée> est enfoncée, la fonction renvoie la chaîne que l’utilisateur a saisie et le programme se poursuit. len(s) Renvoie la longueur de la séquence s ; une séquence peut être une chaîne de caractères, une liste, un tuple ou un dictionnaire. min,max(s) Renvoie le minimum, maximum d’une séquence s ayant au moins deux termes. pow(x,y) Renvoie x à la puissance y print(liste d’objets) Affiche la liste d’objets séparés par des espaces terminée par un retour à la ligne. On peut modifier les paramètres "sep" (le séparateur) et "end" (la terminaison), exemple : print("12","45","58",sep="+",end="=?") range(début,fin,pas) Renvoie une séquence d’entiers commençant à début (0 si la fonction n’a qu’un seul paramètre) jusqu’à une valeur strictement inférieure à fin, en suite arithmétique de raison pas (1 si la fonction a 1 ou 2 arguments). round(x,n) Arrondit le nombre x à n chiffres après la virgule. Si le second argument n est absent, il vaut 0 par défaut. D’autres fonctions sont définies dans des fichiers séparés appelés «modules». Par exemple, le module math contient la définition de la fonction exponentielle appelée exp. Pour affecter e2 à la variable x, les deux méthodes suivantes sont possibles : 1. from math import exp x=exp(2) 2. import math x=math.exp(2) Une fonction peut être définie avec le mot-clé def. Par exemple : def carre(x): y = x**2 # y est une variable locale print("le carré de ",x," vaut ",y) # message affiché à l’écran return y Ici, la fonction carre a un paramètre appelé x. Les instructions qui forment le corps de la fonction commencent à la ligne suivante et doivent être indentées. x et y sont des variables locales de la fonction carre : un appel de la fonction carre ne modifie pas les valeurs de variables x ou y définies à l’extérieur de la fonction. Le mot-clé return indique la valeur renvoyée par la fonction. Un appel de fonction se termine à la fin d’une ligne commençant par return. Si return est absent la fonction ne renvoie aucune valeur, plus précisément elle renvoie l’objet python appelé None (rien du tout en anglais ! ). Avec IDLE3 créer un script python appelé fonctions_tp2.py (pour l’instant vide.) Certains exercice (par exemple l’exo2) demandent l’écriture d’un programme. Il faudra alors définir une fonction sans argument appelée par exemple exo2() dans ce script. Le programme sera testé en exécutant le script par la commande Run Module ou le raccourci clavier <F5>, puis en faisant un appel de cette fonction. D’autres exercices (par exemple l’exo4) demandent l’écriture d’une fonction qui sera alors définie dans le script, puis appelée comme avant. Essayer également de commenter votre code pour le rendre compréhensible : on peut insérer des commentaires à peu près n’importe où en les faisant précéder d’un caractère #. Lorsqu’il rencontre ce caractère, l’interpréteur Python ignore tout ce qui suit, jusqu’à la fin de la ligne courante. 1. (a) Commencer l’écriture du fichier fonctions_tp2.py en y recopiant la définition précédente de la fonction carre(), puis charger ce fichier. (b) Faire quelques tests pour comprendre comment Python se comporte avec les variables. Par exemple taper les instructions : x,y=7,6 carre(4) z=carre(5) z print(x,’**’,y) . . . 2. Au moyen de la fonction input(), inviter l’utilisateur à entrer 2 nombres x (par exemple 3) et y (par exemple 5) , puis (dans le cas particulier de l’exemple) afficher le message : 3 plus 5 égale 8 3. Utiliser la formuler C = 5 ∗ (F − 32)/9 pour afficher une table de conversion des températures en degrés Farenheit (F) et de leurs équivalents en degrés Celsius (C) : chaque ligne de la table consistera en deux valeurs correspondantes, F variant de 0 à 300 degrés Farenheit et augmentant de 20 degrés à chaque ligne. Les degrés Celsius seront arrondis à l’unité. 4. Une année est bissextile si elle est divisible par 4, mais pas par 100, à l’exception des années multiples de 400 qui sont bien bissextiles. Ecrire une fonction bissextile() telle que l’appel bissextile(n) affiche «l’année n est bissextile» ou bien «l’année n n’est pas bissextile» selon le cas, mais ne renvoie aucune valeur. 5. (a) Ecrire une fonction degre2radian() qui convertit en radians un angle fourni au départ sous la forme (degrés,minutes,secondes). (b) Ecrire la fonction radian2degre() inverse de la précédente. 6. (a) Définir la fonction factorielle. (b) Définir la fonction nbzeros() telle que nbzeros(n) renvoie le nombre de zéros qui terminent l’écriture décimale de l’entier n. (c) Par combien de zéros se termine 10000 ! 7. On appelle suite de Syracuse une suite d’entiers définie ainsi : On part d’un nombre entier n ∈ N∗ ; s’il est pair, on le divise par 2 ; s’il est impair, on le multiple par 3 et on ajoute 1. En répétant l’opération, on obtient une suite d’entiers positifs dont chacun ne dépent que de son prédécesseur. Par exemple, la suite de Syracuse du nombre 14 est : 14, 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1, 4, 2 . . . Ecrire une fonction syracuse(n) qui affiche les termes de la suite de Syracuse de n jusque la valeur 1 soit atteinte. Il a été conjecturé que la suite de Syracuse de n’importe quel entier strictement positif atteint 1. En dépit de la simplicité de son énoncé, cette conjecture défie depuis de nombreuses années les mathématiciens. 8. Ecrire un programme qui affiche les 20 premiers termes de la table de multiplication par 7, en signalant à l’aide d’une astérisque ceux qui sont multiples de 3. Exemple : 7 14 21 * 28 35 42 * 49 . . . ∗ ∗ ∗ 9. Ecrire la fonction triangle(n) qui affiche n lignes de la forme : ∗ ∗ ∗ .. .. . . ∗ ∗ ... ... ∗ 10. La suite u de Fibonacci est définie par : u0 = 1, u1 = 2 et un+2 = un + un+1 pour tout entier n. Ecrire une fonction fibo(n) qui affiche les termes de la suite u qui ne dépassent pas la valeur n. 11. Un nombre parfait est un entier naturel égal à la somme de tous ses diviseurs autres que lui-même. Par exemple 6 = 1 + 2 + 3 est parfait. Ecrire une fonction parfait(n) qui affiche tous les nombres parfaits inférieurs ou égaux à n.