1èremise en œuvre de Python

La meilleure façon d’apprendre un langage informatique étant de pratiquer, nous allons nous familiariser progressivement avec le langage Python en effectuant quelques opérations de base.

💻 Travail n° 1 Installation de Python

Nous allons par la suite utiliser une distribution de Python qui s’appelle Miniconda. Il en existe d’autres mais celle-ci propose par défaut un ensemble complet d’outils et de librairies.

  1. Taper anaconda dans la barre de recherche de Windows

  2. Si des entrées “Anaconda” similaires à ce qui est illustré ci-dessous apparaissent, c’est que Miniconda est déjà installé : passer directement au Travail n°2.

    is miniconda already installed
  3. Installer Miniconda en suivant la procédure indiquée dans Miniconda

Découverte de l’interpréteur Python

Python est un langage (semi-)interprété et, en tant que tel, il va nous permettre d’exécuter d’une manière simple nos premières instructions.

Pour commencer, on va donc utiliser Python dans un mode dit interactif qui va nous permettre d’exécuter des instructions que l’on va saisir les unes après les autres.

python repl

Dans le mode interactif, Python exécute en permanence la séquence suivante :

  1. il affiche une invite de commande sous la forme du symbole >>>. Comme son nom l’indique, une invite de commande invite l’utilisateur à saisir …​une commande ;

  2. il attend que l’utilisateur valide l’expression saisie avec la touche ENTRÉE ;

  3. il évalue l’expression saisie. Ceci signifie qu’il l’analyse et l’exécute ;

  4. il affiche le résultat de l’instruction.

Python pour faire calculs

Bien que ce ne soit pas sa vocation première, Python peut être utilisé comme une calculatrice. C’est ce que vous allez vérifier maintenant.

💻 Travail n° 2 Python en tant que calculette basique

  1. Lancer Python en tapant “anaconda” dans le menu “Démarrer” de “Windows” et en exécutant “Anaconda prompt (miniconda3)” ou “Anaconda Powershell Prompt (miniconda3)”

    Dans la fenêtre de type console qui s’affiche après un délai qui peut être assez long la 1ière fois, tapez python et validez afin de lancer l’interpréteur Python.

    Celui-ci s’ouvre, donne quelques informations de version et signale qu’il attend les instructions en affichant une invite de commande (→ prompt en anglais) sous la forme de >>>

  2. Saisir l’expression suivante 3 + 4 et validez avec la touche ENTRÉE. Vérifier que le résultat de cette somme apparaît sous l’instruction que vous venez de saisir.

  3. Trouver puis noter les expressions qui permettent de faire les calcul suivants en s’aidant de la rubrique Correspondances entre opérateurs et fonctions dans la documentation officielle de Python :

    • 5 moins 15

    • 8 fois 7

    • 9 divisé par 2

      Noter qu’en Python la partie décimale d’un nombre est séparée de sa partie entière par un point et non une virgule.

    • 9 modulo 2 (c-à-d le reste de la division euclidienne de 9 par 2)

      Cet opérateur est très souvent utilisé en informatique pour savoir si un nombre est multiple d’un autre ou pour effectuer des boucles. Il est donc recommandé de s’en souvenir.

    • 2 élevé à la puissance 10

    • 10 fois la somme de 4 et 3 (qui doit donner comme résultat 70 et non 43…​)


Dans le travail précédent, vous avez utilisé les opérateurs mathématiques classiques pour faire des calculs de base.

Python dispose également d’un certain nombre de fonctionnalités mathématiques évoluées comme celles présentes sur une calculatrice scientifique :

  • fonctions trigonométriques

  • fonctions logarithmiques (népérien, base 10)

  • fonction racine carrée

  • valeur de PI

  • …​

Ces fonctionnalités ne sont pas directement accessibles depuis un opérateur (+, -, % …​) mais depuis des fonctions.

Comme évoqué dans Constitution d’un programme, une fonction est un ensemble d’instructions regroupées ensemble qui vont permettre d’effectuer une action que l’on est souvent amené à faire dans un programme sans avoir à les retaper toutes à chaque fois. On se contentera alors de définir une fois pour toute une fonction que l’on appellera lorsqu’on en aura besoin. Cela rejoint un tout petit peu le principe d’une variable où on donne un nom à un emplacement mémoire sauf qu’ici on va donner un nom à un ensemble d’instructions.

Un autre avantage des fonctions est qu’elles sont paramétrables. On va ainsi pouvoir généraliser leur comportement. Un comportement spécifique sera obtenu en leur fournissant des arguments. Ces arguments sont fournis à la fonction en les indiquant entre parenthèses à la suite du nom de la fonction.

Ci-dessous figure un exemple d’appel de la fonction standard Python nommée int qui peut retourner la valeur d’un nombre codé dans une base donnée..

Exemple d’appel de la fonction int()
>>> int('1E', 16) (1)
30 (2)
1 on fournit 2 arguments à la fonction int() : une chaîne de caractères représentant un nombre puis la base dans laquelle ce nombre est exprimé (hexadécimal ⇒ base 16);
2 1E|16 ⇒ 30|10

Même si Python dispose d’un certain nombre de fonctions par défaut (→ voir Built-in Functions) , la plupart d’entre elles ne sont accessibles qu’à travers de ce qu’on appelle des modules.

Pour appeler une fonction d’un module il faudra en premier lieu importer le module puis appeler la fonction en la préfixant du nom du module suivi d’un ‘.’

Exemple pour la fonction factorial() du module math
>>> import math (1)
>>> math.factorial(5) (2)
120 (3)
1 On importe le module math dans lequel se trouve la fonction factorial()
2 On appelle la fonction factorial() en lui fournissant l’argument 5
3 Python affiche la factorielle de 5 (120 = 5 * 4 * 3 * 2 * 1)

💻 Travail n° 3 : Python en tant que calculette scientifique*

  1. Se rendre sur math — Mathematical functions link

  2. À partir de la documentation du module math de Python (voir notamment les exemples), donner les expressions qui permettent de :

    • calculer la racine carrée de 81

    • retourner la valeur absolue de -100

    • retourner la valeur de PI

      Come l’indique la documentation, l’expression qui retourne PI n’est pas une fonction mais une constante.

    • calculer le cosinus de PI

    • retourner la partie entière de 9.75

  3. Expliquer la différence entre les fonctions math.floor(), math.ceil() et math.trunc().

  4. Calculer, avec ne seule expression Python, la période de révolution d’un satellite en orbite circulaire autour de la Terre évoluant à 100km d’altitude par rapport à sa surface en utilisant la formule suivante :

    formule periode revolution satellite

    avec :

    • T, période de révolution du satellite (exprimée en secondes)

    • RT, rayon de la Terre, exprimé en mètres (6,378.106m à l’équateur).

    • h, altitude du satellite par rapport à la surface de la Terre, exprimée en mètres.

    • G, la constante gravitationnelle universelle (6,67.10-11.m3.kg-1.s-2)

    • MT, la masse de la Terre (5,98.1024kg)

Vous devez obtenir T ≈ 5187s

Utilisation de variables

Dans les activités précédentes, des calculs ont été réalisés directement sur des valeurs numériques. Ces valeurs sont appelées valeurs littérales.

Il faut éviter au maximum d’utiliser les valeur littérales dans les programmes. On doit au contraire privilégier l’utilisation de variables.

Comme expliqué dans le paragraphe Constitution d’un programme, les variables sont des noms qui font référence à des emplacements de la mémoire où sont stockées des valeurs.

Pour créer un variable en Python, il suffit de saisir le nom qu’on désire lui donner et lui affecter une valeur.

Le nom d’une variable Python ne doit contenir que des lettres (minuscules ou majuscules), des chiffres (‘0’ à ‘9’ ) et des symboles de soulignement (‘_’).

Autres restrictions : il ne peut ni débuter par un chiffre ni être identique à un des mots clés du langage (→ class par exemple).

De plus, il n’est pas recommandé de faire débuter le nom d’une variable par un ‘_’ (sauf cas très particulier).

Enfin, Python est sensible à la casse, ce qui signifie qu’il distingue les majuscules et les minuscules. Ainsi, les variables TesT, test et TEST sont différentes pour Python.

Lorsqu’on veut modifier le contenu d’un emplacement mémoire on réalise une affectation à l’aide de l’opérateur = dont la signification, on le rappelle, diffère de celle qu’on lui accorde en mathématique (→ égalité).

Ainsi, en Python, x = 3 signifie “mettre la valeur 3 dans l’emplacement mémoire référencé par l’identificateur noté x”.

En mathématique, x = 3 représente une égalité et peut également s’écrire 3 = x. Cette dernière écriture, n’a aucune signification en Python. La preuve:

>>> 3 = x
  File "<stdin>", line 1 (1)
    3 = x
    ^
SyntaxError: cannot assign to literal here. Maybe you meant '==' instead of '='?
1 Python manifeste son mécontentement lorsqu’on essaye d’affecter une valeur littérale.

Pour lire le contenu d’une variable, il suffit de saisir son nom.

Pour affecter (assign en anglais) à la variable y le double de la variable x, on écrit alors :

>> x = 3;
3
>> y = 2 * x;
6

Lorsque le nom d’une variable apparait à gauche d’un signe ‘=’ c’est qu’on veut y écrire dedans. Lorsqu’il apparait à droite, c’est qu’on veut lire son contenu.

💻 Travail n° 4 : Mise en œuvre de variables

  1. Saisir les expressions suivantes dans l’interpréteur Python. Celles-ci calculent le prix TTC d’un article dont le prix Hors Taxes est 45€ sachant que son taux de TVA vaut 5.5%:

    >>> prixHT = 45
    >>> TVA = 5.5 / 100
    >>> prixTTC = prixHT * (1 + TVA)
    >>> prixTTC (1)
    1 Affiche la valeur de la variable prixTTC
  2. Modifiez la valeur du taux de TVA pour qu’il prenne la valeur 20% et affichez immédiatement le prix TTC.

    >>> TVA = 0.20;
    >>> prixTTC;

    Celui-ci a-t-il été mis à jour ? Expliquer pourquoi.

  3. Donner l’expression Python qui permet d’évaluer le prix à payer par le client lorsqu’on lui accorde une réduction de 5% sur le prix hors taxes.

  4. Donner l’expression qui permettrait d’augmenter de 1% la TVA quel que soit son taux actuel.


Les variables peuvent contenir des valeurs de nature vraiment différente.

On a vu dans le chapitre Constitution d’un programme que les variables pouvaient notamment contenir des nombres ou du texte,

Lors de l’affectation d’une variable, Python va déterminer automatiquement le type de celle-ci afin de connaitre les opérations qu’il est possible ou non de réaliser sur elle.

Python dispose d’une fonction qui permet d’afficher le type qu’il a déterminé pour une variable. C’est la fonction type() à laquelle on fournit le nom de la variable entre les parenthèses.

💻 Travail n° 5 : Types des variables

  1. Affecter le nombre 18 à une variable nommée century.

    Afficher et noter le type de cette variable en tapant type(age).

  2. Affecter le texte “85” (voir ci-dessous comment faire) à une variable nommée year puis demander à Python d’afficher son type puis le noter sur le compte rendu.

    Pour affecter du texte à une variable, il faut l’entourer soit d’apostrophes (touche 4 du clavier) soit de guillemets doubles (touche 3 du clavier).

    Si le texte contient ", il faut délimiter le texte avec '.

    Si le texte contient ', il faut délimiter le texte avec ".

    Le choix est libre si le texte ne contient ni de ' ni de ".

    Exemple
    titreFilm = "Bienvenue chez les Ch'tis" (1)
    intituleQuestion = 'Qui a dit : "Veni, vidi, vici" ?' (2)
    1 le texte contient ' ⇒ on le délimite avec des "
    2 le texte contient des " ⇒ on le délimite par des '
  3. Afficher les produits year * 2 et century * 2.

    Quelle signification peut avoir l’opérateur * lorsqu’il est appliqué à une variable de type texte en Python ?

  4. Donner l’expression Python qui permet d’affecter le texte “1885” à la variable strVictorHugoDeath en n’utilisant que la fonction standard str() (voir Built-in Functions link) et les variables year et century

  5. Donner l’expression Python qui permet d’affecter le nombre 1885 à la variable intVictorHugoDeath en n’utilisant que la fonction standard int() (voir Built-in Functions link) et les variables year et century


Notre découverte de l’interpréteur Python en mode interactif touche à sa fin.

Ce mode d’utilisation de Python est très pratique pour tester des commandes/fonctions de Python.

Cependant, il n’est guère adapté pour rejouer une séquence de commandes à laquelle on désire apporter ne serait-ce qu’une seule petite modification car cela implique de saisir à nouveau toutes les commandes et les exécuter les unes après les autres.

Un autre inconvénient du mode interactif est de perdre tout ce qui a été tapé lorsqu’on quitte l’interpréteur.

Nous allons voir à présent comment remédier à ces inconvénients grâce aux scripts Python.

Premiers scripts Python

Dans cette partie, vous allez utiliser Python dans le mode “normal” et non plus dans le mode “interactif”.

Dans le mode “normal”, vous lancez l’exécution de l’interpréteur Python en lui indiquant le nom d’un fichier (avec l’extension .py). Ce fichier contient l’ensemble des instructions que vous souhaitez qu’il exécute en séquence. Ce fichier s’appelle un script.

Ce mode offre l’avantage de pouvoir sauvegarder ou de diffuser votre code source Python.

La saisie du code source Python peut se faire avec n’importe quel éditeur de texte (notepad, vim, kate, emacs, geany…​).

Ici, vous allez utiliser un éditeur de texte appelé VSCode.

Python dispose en standard d’un environnement de développement intégré (→ EDI ou IDE en anglais) appelé IDLE.

IDLE est tout à fait utilisable pour saisir le code source dans la suite de cet atelier mais il est cependant moins performant et surtout moins extensible que VSCode que vous aurez l’occasion d’utiliser dans d’autres contextes (scripts PowerShell, développement web…​)

VSCode va vous permettre non seulement de saisir des scripts Python mais également de taper des commandes en mode interactif.

VSCode propose également la coloration syntaxique et la “completion” automatique.

Ces 2 fonctionnalités consistent, pour l’une, à colorer de différentes manières, les mots clés de Python, les variables…​ et, pour l’autre, à tenter de deviner ce que vous voulez taper en proposant une liste de possibilités.

Ces fonctionnalités facilitent grandement l’apprentissage du langage.

💻 Travail n° 6 Installation de VSCode

  1. Télécharger en local depuis le NAS l’installateur de VSCode (→ \\Diskstation\install\vscode\VSCodeSetup-x64-<version>.exe) ainsi que son extension Python (→ ms-python.python-<date>.<version>.vsix )

  2. Exécuter l’installateur en tant qu’administrateur

  3. Exécuter VSCode

  4. Installer l’extension “Python - IntelliSense (Pylance)” comme illustré ci-dessous :

    python vscode extension

Pour découvrir sous un aspect “ludique” le monde des scripts, vous allez réaliser des dessins (rudimentaires) en Python.

Rassurez-vous, Python propose un module qui va vous faciliter grandement la tâche. Ce module s’appelle turtle.

turtle met à votre disposition un ensemble de fonctions qui vont reproduire le comportement d’un crayon sur une feuille sur laquelle on désirerait dessiner.

Voici quelques unes des fonctions du module turtle :

  • reset() → Efface tout le dessin

  • goto(x, y) → Positionne le crayon à la position de coordonnées x, y

  • forward(distance) → Avance d’une distance donnée

  • backward(distance) → Recule d’une distance donnée

  • up() → Relève le crayon pour pouvoir le déplacer sans dessiner

  • down() → Repose le crayon pour recommencer à dessiner

  • color(couleur) → Sélectionne la couleur du tracé. couleur peut être une chaîne prédéfinie (red, blue, green, etc.)

  • left(angle) → Tourne à gauche d’un angle donné exprimé en degrés

  • right(angle) → Tourne à droite

  • width(épaisseur) → Choisit l’épaisseur du tracé

  • begin_fill() → Demande le remplissage du prochain contour fermé ou forme à l’aide de la couleur courante

  • end_fill() → Procède au remplissage des formes et contours fermés dessinés après l’appel à begin_fill()

  • write(texte) → Écrit le texte délimité par ' ou " à l’endroit actuel du crayon.

💻 Travail n° 7 Aperçu du module turtle

  1. Lancer VSCode

  2. Dans le menu “File”, sélectionner “New file”

  3. Saisir le code suivant :

    script-01.py
    import turtle as t
    
    t.reset()
    
    t.color('blue')
    
    t.begin_fill()
    
    t.forward(100)
    t.left(120)
    t.forward(100)
    t.left(120)
    t.forward(100)
    t.left(120)
    
    t.end_fill()
    
    t.exitonclick()

    Remarquez la variante de syntaxe dans l’utilisation de la directive import. Celle-ci permet d’invoquer de manière plus concise les fonctions du module “turtle” en les faisant précéder de t. et non plus de turtle.. Le choix de ‘t’ est arbitraire. On aurait pu choisir n’importe quelle autre lettre.

  4. Sauvegarder ce code source dans un fichier de votre espace de travail en lui donnant le nom script01.py

  5. Dans VSCode, sélectionner l’interpréteur Python qui sera utilisé pour exécuter le script en appuyant sur la combinaison de touche Shift+Ctrl+P

    select python interpreter
  6. Exécuter le script en appuyant sur la flèche située en haut à droite de VSCode

    first turtle
  7. Analyser le code source pour déterminer le rôle de chaque expression du script dans le dessin obtenu.

💻 Travail n° 8 Instructions de boucle

Dans l’exmple précédent, vous pouvez remarquer que la séquence suivante est répétée 3 fois dans le code source :

t.forward(100)
t.left(120)

C’est le genre de situation qu’il faut absolument éviter dans les programmes.

Tous les langages proposent à cet effet d'instructions de boucle.

En Python, il y en a une, appelée for, qui va permettre de répéter un certain nombre de fois un bloc d’instructions.

Pour que Python distingue les instructions à répéter de celles qui ne doivent pas l’être, il impose de les indenter les unes par rapport aux autres.

Indenter un bloc d’instructions consiste simplement à décaler les instructions qui le composent d’un ou plusieurs espaces ou tabulations.

La valeur de l’indentation importe peu du moment qu’elle est cohérente sur l’ensemble du bloc d’instructions à répéter.

Cette indentation obligatoire est une des spécificités de Python qui contribue à rendre les programmes très lisibles.

  1. Modifier le script tu travail précédent comme suit et vérifier qu’à l’exécution, vous obtenez le même résultat :

    import turtle as t
    
    t.reset()
    
    t.color('blue')
    
    t.begin_fill()
    
    for n in range(0,3) : (1)
       t.forward(100)
       t.left(120)
    
    t.end_fill()
    
    t.exitonclick()
    1 La ligne for n in range(0,3) : signifie que l’on désire exécuter le bloc d’instructions qui suit le ‘:’ tant que la variable n n’aura pas parcouru l’ensemble des valeurs entières de l’intervalle [0…​3[ sachant qu’au départ, elle vaut 0 et que Python augmente automatiquement sa valeur d'1 unité à chaque passage dans la boucle.

    Chaque passage dans la boucle s’appelle aussi une itération.

  2. Modifier le script pour qu’il affiche un carré plutôt qu’un triangle isocèle

💻 Travail n° 9 Interaction avec l’utilisateur

Il est souvent nécessaire pour un programme de demander à l’utilisateur qu’il rentre des valeurs qui conditionneront le déroulement du programme.

Python dispose en standard d’une fonction qui permet cela : input().

Cette fonction renvoie au programme ce qui a été saisi au clavier par l’utilisateur sous forme d’une chaîne de caractères.

Cette chaîne de caractère peut ensuite être convertie en valeur numérique.

Exemples d’utilisation:

>>> txt = input("Entrez votre nom : ")
Entrez votre nom : Manvussa
>>> print txt
Manvussa
>>> dateNaissance = input("Année de naissance ? ")
Année de naissance ? 1980
>>> type(dateNaissance)
<type 'str'>
>>> import datetime as d
>>> print "Vous avez ", d.datetime.now().year - dateNaissance, " ans."
Vous avez
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'int' and 'str' (1)
>>> dateNaissance = int(dateNaissance) (2)
>>> type(dateNaissance)
<type 'int'>
>>> print "Vous avez ", d.datetime.now().year - dateNaissance, " ans."
Vous avez 43 ans. (3)
>>>
1 Python signale une erreur car il ne sait pas soustraire une chaîne d’un entier
2 int(dateNaissance) convertit dateNaissance en entier et on remet le résultat dans la même variable qui change donc de type (strint)
3 cette fois-ci, il n’y a aucune erreur car on soustrait bien 2 valeurs entières
Travail demandé :
  1. Modifier le script du travail précédent de façon à ce que l’utilisateur puisse saisir la longueur du côté du triangle à dessiner.

  2. Faire évoluer le script afin que le programme demande également la couleur désirée pour le triangle.

  3. Modifier enfin le script de façon à ce que celui-ci puisse tracer un polygone (l’utilisateur devra donc saisir le nombre de côtés de la figure qu’il souhaite dessiner).

💻 Travail n° 10 Instructions de test

Le déroulement d’un programme dépend souvent des circonstances rencontrées.

Pour gérer cette situation, les langages proposent tous des instructions qui testent des conditions et aiguillent le déroulement du programme.

En Python, une des ces instructions est if <condition> : …​ else: …​

Exemple instruction if…​else :
>>> a = 18
>>> if a < 18:
   print u"Vous n'êtes pas majeur"
else:
   print u"Vous êtes majeur"

Vous êtes majeur
>>>

La lettre ‘u’ devant une chaîne de caractère indique à Python que cette chaîne doit être considérée comme une chaîne de caractères codés en Unicode.

Voir par exemple Codage numerique du texte link pour une présentation synthétique d’Unicode et d’un autre codage de caractères, plus simple, nommé ASCII.

Il est possible d’enchaîner des tests avec une structure if <condition> : …​ elif: …​ else: …​

Exemple if…​elif…​else…​ :
>>> moyenne=13
>>> if moyenne < 8:
   print u"niveau médiocre"
elif 8<= moyenne < 12:
   print u"niveau moyen"
elif 12 <= moyenne < 16:
   print u"bon niveau"
elif 16 <= moyenne <= 20:
   print u"Excellent niveau"
else:
   print u"Moyenne invalide"

bon niveau

Il est enfin possible de combiner plusieurs conditions au sein d’un même test à l’aide d’opérateurs logiques.

Opérateur logique Usage Description

and

<expr1> and <expr2>

“ET” logique. Retourne True uniquement si <expr1> et <expr2> valent True. Sinon retourne False.

or

<expr1> or <expr2>

“OU” logique. Retourne False uniquement si <expr1> et <expr2> valent False. Sinon retourne True.

not

not <expr>

“NON” logique. Retourne True si <exp> vaut False. Retourne False si <expr> vaut True.

Exemple de conditions combinées :
temperature = 16
chaudiereEnDefaut = False

if (temperature < 18) and (not chaudiereEnDefaut) : (1)
   print("Déclenchement du chauffage")
1 On ne déclenche le chauffage que SI la température est strictement inférieure à 18°C ET SI la chaudière n’est pas en défaut
Travail demandé
  1. Réaliser un script qui demande à l’utilisateur de saisir un nombre entre 1 et 100 tant qu’il n’a pas trouvé le nombre choisi aléatoirement par Python.

    • L’opérateur d’égalité se note == (double signe égal) en Python.

    • Pour demander à Python de choisir un nombre aléatoire entre 1 et 100 vous taperez le code suivant:

      import random (1)
      # [...]
      random.seed() (2)
      r = random.randint(1,100) (3)
      1 importation du module random en début de script
      2 appel de la fonction seed() du module random afin d’initialiser le générateur de nombres aléatoires.
      3 appel de la fonction randint() du module random qui génère un nombre aléatoire dans l’intervalle [1, 100].
  2. Coder un nscript qui devra déterminer si une année saisie par l’utilisateur est bissextile ou non sachant :

    • qu’une année bissextile est une année qui est soit divisible par 400 soit divisible par 4 et non par 100 ;

    • que l’opérateur “ET” est plus prioritaire que l’opérateur “OU” (comprendre qu’il faut éventuellement prévoir l’utilisation de parenthèses)

      Utilisez l’opérateur modulo (%) pour tester si un nombre est divisible par un autre.

💻 Travail n° 11 Fonctions utilisateur

Jusqu’à présent, vous avez utilisé des fonctions proposées par Python ou un de ses modules. Cependant, il est très fréquent et même recommandé de décomposer votre code source en regroupant dans des fonctions les traitements informatiques de vos scripts : vous y gagnerez en lisibilité, modularité, réutilisabilité, maintenance de code.

Une fonction se définit dans un bloc introduit par le mot clé def suivi du nom de la fonction et de la liste de ses paramètres entre parenthèses, séparés par des virgules.

Les paramètres correspondent aux informations dont la fonction a besoin pour réaliser le traitement dont elle a la charge.

Le déroulement d’une fonction se termine par une instruction return qui retourne le résultat du traitement.

Exemple d’un script calculant la circonférence d’un cercle dont le rayon est fourni par l’utilisateur :
# -*- coding: utf8 -*-  (1)(2)
# Importation des modules utilisés dans le script
import math

# Définition de la fonction qui permet de calculer la circonférence d'un cercle
def calculerCirconference(leRayon):
    circonference = 2 * math.pi * leRayon
    return circonference

# Point d'entrée du script (3)
r = float(input("Saisir le rayon du cercle : "))
perimetre = calculerCirconference(r) (4)
print u"la circonférence du cercle de rayon ", r, " vaut ", perimetre
1 En Python, un commentaire — c’est-à-dire du texte qui ne sera pas évalué par l’interpréteur — est introduit par le caractère #. Ces commentaires sont primordiaux car ils permettent de documenter son code.
2 -*- coding: utf8 -*- permet d’indiquer à Python que les caractères qui composent le code source sont codés en UTF-8 (→ encodage). Cette directive doit être donnée dans Python 2.x dès lors qu’on utilise des caractères spéciaux tels que les caractères accentués. En Python 3.x, c’est inutile car l’encodage de base est déjà UTF-8.
3 Le point d’entrée d’un script constitue la 1ière instruction évaluée par Python quand il l’exécute. Notez que celle-ci n’est pas forcément la 1ère ligne du script.
4 On appelle la fonction de calcul de la circonférence en lui fournissant la valeur contenue dans la variable r

La variable leRayon utilisée dans la définition de la fonction est parfois appelée paramètre formel tandis que la variable r utilisée lors de l’appel de la fonction est appelée paramètre effectif ou argument.

Même si c’est possible, interdisez-vous de nommer les variables qui servent de paramètres effectifs avec les mêmes noms que les paramètres formels.

La variable leRayon n’est connue que dans le bloc de définition de la fonction. Un argument apparait donc comme une sorte de variable locale à la fonction qui est affectée automatiquement avec l’argument fourni au moment de l’appel.

Ainsi, dans l’exemple précédent leRayon prend la valeur de r lorsque Python exécute calculerCirconference(r).

Une fonction doit toujours être connue avant d’être appelée. Ceci signifie dans notre cas que la définition de la fonction calculerCirconference() doit figurer dans le fichier avant la ligne où elle est appelée.

Travail demandé :
  1. Faire évoluer le script de dessin avec le module turtle de façon à ce qu’il propose le tracé de plusieurs formes par l’intermédiaire de fonctions

    Les fonctions, en plus de tracer une figure, retourneront son périmètre.

    Ci-dessous, on vous propose un début de solution qui fait apparaître la définition des fonctions que vous devez coder ainsi que le code d’une fonction qui permet de gérer un menu simple. Remplaçer simplement l’instruction pass de chaque fonction par les instructions nécessaires pour tracer un carré, un triangle équilatéral…​

    # -*- coding: utf8 -*-
    import turtle as t
    
    def tracerCarre(origineX, origineY, cote):
       pass (1)
    
    def tracerTriangleEquilateral(origineX, origineY, cote):
       pass (1)
    
    def tracerTriangleIsocele(origineX, origineY, base, hauteur):
       pass (1)
    
    def tracerRectangle(origineX, origineY, coteCourt, coteLong):
       pass (1)
    
    def gererMenu():
       quit = False
    
       while not quit :
          print "MENU : "
          print "1- Tracer un carré"
          print "2- Tracer un triangle équilatéral"
          print "3- Tracer un triangle isocèle"
          print "4- Tracer un rectangle"
          print "0- Quitter"
    
          choix = int(input("Votre choix ? "))
    
          if not (0 <= choix <= 4) :
             print "!! Choix non valide !!"
          else :
             quit = True
    
       return choix
    
    # Point d'entrée du script
    choixMenu = -1
    while choixMenu != 0 :
        choixMenu = gererMenu()
    
        t.reset()
    
        t.begin_fill(True)
    
        # Compléter le code du programme principal à partir d'ici
        # ...
    1 L’instruction pass est une instruction qui ne fait rien. Elle est utilisée à des endroits qui ne nécessitent aucun traitement mais où une instruction est quand même requise pour respecter la syntaxe. Ici, on l’utilise simplement pour indiquer la zone où vous devez compléter le code.

    Cette question est longue et nécessite quelques connaissances en trigonométrie.

  2. Les 2 fonctions tracerCarre() et tracerTriangleEquilateral() consistent toutes les 2 à tracer des polygones qui ne diffèrent que par leur nombre de côtés.

    Définir une fonction tracerPolygone(nbDeCotes, tailleCote) que vous appellerez depuis tracerCarre() et tracerTriangleEquilateral() pour réaliser le tracé effectif.

Proposition de corrigé
script-turtle.py
import turtle as t
import math as m

def tracerPolygone(nbDeCotes, tailleDesCotes) :
   angle = 360 / nbDeCotes

   for n in range(0, nbDeCotes) :
      t.forward(tailleDesCotes)
      t.left(angle)

def tracerCarre(origineX, origineY, cote):
   
   t.color('blue')
   
   t.up()
   t.goto(origineX, origineY)
   t.down()

   tracerPolygone(4, cote)     

def tracerTriangleEquilateral(origineX, origineY, cote):

   t.color('blue')
   
   t.up()
   t.goto(origineX, origineY)
   t.down()

   tracerPolygone(3, cote)   

def tracerTriangleIsocele(origineX, origineY, base, hauteur):

   t.color('blue')

   t.up()
   t.goto(origineX, origineY)
   t.down()

   t.forward(base)
   angle = m.atan((base/2)/hauteur) * (180 / m.pi);
   coteIsocele = m.sqrt((base/2)**2 + hauteur**2)
   t.left(90 + angle)
   t.forward(coteIsocele)
   t.left(180 - 2*angle)
   t.forward(coteIsocele)

def tracerRectangle(origineX, origineY, coteCourt, coteLong):
   
   t.color('blue')

   t.up()
   t.goto(origineX, origineY)
   t.down()
   
   t.forward(coteLong)   
   t.left(90)
   t.forward(coteCourt)
   t.left(90)
   t.forward(coteLong)   
   t.left(90)
   t.forward(coteCourt)


def gererMenu():
   quit = False

   while not quit :
      print("MENU : ")
      print("1- Tracer un carré")
      print("2- Tracer un triangle équilatéral")
      print("3- Tracer un triangle isocèle")
      print("4- Tracer un rectangle")
      print("0- Quitter")
      
      choix = int(input("Votre choix ? "))

      if not (0 <= choix <= 4) :
         print("!! Choix non valide !!")
      else :
         quit = True

   return choix

def tracerFigure(type) :
   if type == 1 :
      nomFigure = "carré"
      nomArg1 = "du côté"
      nomArg2 = None
   elif type == 2 :
      nomFigure = "triangle équilatéral"
      nomArg1 = "du côté"
      nomArg2 = None
   elif type == 3 :
      nomFigure = "triangle isocèle"
      nomArg1 = "de la base"
      nomArg2 = "de la hauteur"
   elif type == 4 :
      nomFigure = "rectangle"
      nomArg1 = "du côté court"
      nomArg2 = "du côté long"
   
   xOrigine = int(input("Saisir l'abscisse de l'origine du " + nomFigure + " : "))
   yOrigine = int(input("Saisir l'ordonnée de l'origine du " + nomFigure + " : "))
   
   arg1 = int(input("Saisir la longueur " + nomArg1 + " : "))
   
   if nomArg2 :
      arg2 = int(input("Saisir la longueur " + nomArg2 + " : "))
   
   t.reset()
      
   #t.begin_fill()
      
   if type == 1 :
      tracerCarre(xOrigine, yOrigine, arg1)
   elif type == 2 :
      tracerTriangleEquilateral(xOrigine,yOrigine,arg1)
   elif type == 3 :
      tracerTriangleIsocele(xOrigine,yOrigine,arg1, arg2)
   elif type == 4 :
      tracerRectangle(xOrigine,yOrigine,arg1,arg2)

   #t.end_fill()
      
   t.exitonclick()

# Point d'entrée du script
choixMenu = -1
while choixMenu != 0 :
   choixMenu = gererMenu()

   if(choixMenu != 0) :
      tracerFigure(choixMenu)

Conclusion

Voilà qui termine cet atelier de formation consacré à l’initiation à la programmation avec le langage Python.

Vous avez vu de quoi pouvait se composer un programme Python : instructions, opérateurs de calcul, variables, instructions de test et de boucle, fonctions (créées par l’utilisateur ou importées d’un module)…​

Quoique la syntaxe soit parfois spécifique à Python, vous retrouverez toujours ces éléments dans l’ensemble des langages de programmation (C/C++, Java, …​) et de script (PHP, bash, powershell, …​). Il est donc important d’en comprendre l’usage.

Il y a bien sûr beaucoup de sujets qui n’ont pas été abordés mais les grandes lignes ont cependant été exposées.

N’oubliez pas que la programmation est une activité qui nécessite énormément de pratique. N’hésitez donc surtout pas à refaire chez vous les exercices proposés et même à les compléter par vous même en proposant des alternatives ou des évolutions.

Les outils utilisés au labo d’informatique sont majoritairement gratuits. Vous n’avez donc aucune excuse pour ne pas les installer chez vous !

De plus, la programmation informatique — du moins à notre niveau — n’occasionne pas de dégâts irréversibles. Donc, osez expérimenter même si cela n’aboutit pas : échouer c’est apprendre à réussir.

Bonne programmation !

🞄  🞄  🞄