Contenu

enseignements informatiques

Recherche simple Vous recherchez ...

espace pédagogique > disciplines du second degré > enseignements informatiques > enseignement > nsi

atelier mise en fonction

mis à jour le 03/10/2023


vignette.png

Etudier le principe de passage d’informations depuis la partie principale d’un script vers une fonction suite au découpage d’un algorithme en fonctions.

mots clés : fonction, algorithmique, nsi, python


Les ressources publiées sur ce site sont sous la licence CC BY-NC 4.0.
 
Objectif
Finalité : étudier le principe de passage d’informations depuis la partie principale d’un script vers une fonction suite au découpage d’un algorithme en fonctions.
1ere partie : Activité pratique
L’activité pratique est constituée de :
 
  • une surface au centre représentant l’espace mémoire alloué au processus correspondant au script Python,
  • l’algorithme principal pour les appels de fonctions,
  • des fiches navettes pour expliciter les passages d’arguments lors des appels de fonctions,
  • des quatre ‘algorithmes’ de pliage pour chacune des fonctions utilisées ,
  • du questionnaire de synthèse en fin de cette première partie de la séance.


Académie de Nantes - Groupe de travail NSI - 2023
IPR : Gilles OLLIVIER / Christel IZAC
Réf : David COBAC / Philippe MOCQUARD / Jacques CHOUTEAU
 
Disposition de l’activité :

Fiche de questions de synthèse et compléments d’informations.

2eme partie : Analyse de scripts Python sur les fonctions
Scripts Python où la partie principale du script effectue des appels à des fonctions avec :
  • des informations passées par valeurs  ( int, float, tuple, str, ... )
  • des informations passées par référence ( list, dict, ... )
 
1ere partie 
Objectif : étudier le principe de passage d’informations depuis la partie principale d’un script vers une fonction et réciproquement.

L’activité pratique est constituée de :
  • une feuille A3 : espace mémoire alloué au processus pour le script principal ( espace mémoire global )
  • une feuille A4 plastifiée : espace mémoire alloué à une fonction en cours d’exécution ( feuille à compléter avec un feutre effaçable ),
  • l’algorithme principal pour les appels de fonctions,
  • les quatre algorithmes des fonctions de pliage et une fiche navette plastifiée par fonction,
  • le questionnaire de synthèse en fin de cette première partie de l’activité.
Fonction 1/4 Fonction 2/4 Fonction 3/4 Fonction 4/4
 
 






 
Questions de synthèse de l’activité et compléments d’informations
Quelles différences faites vous entre une variable utilisée dans la partie principale du script et une variable locale à une fonction ?
Réponse attendue
  • localisation dans l’espace mémoire,
  • « durée de vie » de la variable,
  • accessibilité par les instructions ( de la fonction # du script principal ), …
IMPORTANT : A propos du « nom de la variable », l’activité n’aborde pas le problème de la confusion engendrée dans le langage Python par des variables du script principal accessibles depuis une fonction sans utiliser le mot clé global. (voir le script joint local_global_implicite.py)
  • soit il n’y a pas d’affectation et la variable est accessible en lecture seule (équivalent à un passage par valeur)
  • soit il y a affectation et la fonction utilise une variable locale qui porte le même nom que la variable du script principal mais qui n’est pas dans le même espace mémoire ! (variable locale) A CONDITION qu’aucune instruction de la fonction n’ait utilisé accéder à cette variable en lecture avant affectation ( voir f2( ) du script cité ci-dessus)
Ce point pourrait faire l’objet d’une autre fiche navette dans une autre activité d’approfondissement ou de pédagogique individualisée.

Quelle est la signification « durée de vie » d’une variable d’un point de vue de la mémoire allouée ?
Réponse attendue
Si cette variable est déclarée dans le script principale elle sera disponible jusqu’à la fin du script principal. Si cette variable a été déclarée dans une fonction, l’espace mémoire est libéré à la fin de l’exécution du script de la fonction.
Une variable alpha « existe » dès la première instruction alpha = … . Cette instruction signifie que l’interpréteur Python va utiliser la référence alpha et l’associer à une information en mémoire.
  • Soit cette information est déjà en mémoire , alors il n’y a pas d’utilisation supplémentaire de mémoire, alpha fera référence à l’information déjà disponible. Il peut donc y avoir plusieurs variables qui référencent la même information en mémoire.
  • Soit cette information n’est pas en mémoire et l’interpréteur va alors utiliser un nouvel espace mémoire pour y placer l’information puis référencer cet espace avec le nom de la variable : alpha.

Nous n’aborderons pas ici les instructions qui permettent de libérer des espaces mémoire alloués. Cette opération est  automatisé sous Python : garbage collector => http://www.mypycode.com/fr/Python/1001000649.html
Là aussi, le type de l’information et donc le type de la variable va impliquer un mode de fonctionnement différent que l’on retrouve selon que l’affectation se fasse par valeur (int, str, …) ou par référence ( list, dict, …) voire en fonction de l’information en elle même.


En effet, Python stocke par défaut les valeurs de -5 à 256 car ces valeurs sont très régulièrement utilisées. Donc nul besoin de réserver de l’espace mémoire, il suffit d’y faire référence.

A titre informatif : le nom d’une liste ne fait pas référence à l’adresse où est stocké l’élément d’indice 0 mais fait référence à l’adresse mémoire où est placée l’instance de class list avec tous les attributs propres à cette  instance de classe ( longueur, …). Le premier élément de la liste est placé ailleurs en mémoire. Tout dépend de sa nature int, str, tuple, ...
Peut-on accéder aux variables locales à une fonction depuis la partie principale du script ?
Réponse attendue
Par principe, le script principal est suspendu, pendant le temps d’exécution de la fonction. celui-ci attend le retour de la « fiche navette ».
Le script principal ne peut accéder qu’à l’information renvoyée par l’instruction return …
Soit cette instruction transmet une valeur, soit une référence à une adresse où est placée l’information renvoyée par la fonction mais elle ne peut être récupérée que si celle-ci est référencée par une variable au retour de la fonction : ma_variable = fonction ( … ).
Peut-on modifier l’information référencée par une variable du script principal depuis une fonction ?
Réponse attendue
Oui, depuis une fonction on peut modifier l’information référencée par une variable du script principal à condition que le mot clé global soit utilisé dans la fonction et que les variables portent le même nom dans le script principal et le script de la fonction puisqu’il s’agit alors de la même variable (référence).
Lorsqu’on passe une information référencée par une variable dans la script principal, à une variable déclarée dans les arguments de la fonction, ces deux variables doivent-elles avoir le même nom ?
Exemple : ici peut-on utiliser la variable rayon dans le script principal et r dans le script de la fonction ?
Réponse attendue
Non les variables peuvent avoir des noms différents puisque les deux espaces mémoire sont différents.
En revanche l’ordre des arguments est important si le nom de la variable local n’est pas cité dans l’appel.
Ici, l’appel volume_cylindre ( 5, 2 ) aurait le même effet que volume_cylindre ( h = 2, r = 5 )
Réaliser la fiche navette qui correspondrait à l’appel de la fonction surface_carre ( …) ci dessus.
 
2eme partie : Analyse de scripts Python
Objectifs :
  • Lors de l’appel d’une fonction, comprendre les transferts d’informations vers cette fonction ( passage d’arguments ) et la récupération de l’information renvoyée par cette fonction en fin de traitement ( return … ).
  • Faire la distinction entre une variable locale à une fonction et une variable globale déclarée dans le script principal.

L’activité pratique est constituée de :
  • trois scripts Python contenant des déclarations de fonctions ainsi que les informations affichées en console,

Cette partie ne demande qu’à être développée avec différents exercices de niveau de difficulté variés.

Elle peut faire l’objet d’un travail individuel puis une autocorrection en binômes pour échanger sur les résultats obtenus.

 

information(s) pédagogique(s)

niveau : tous niveaux

type pédagogique :

public visé : non précisé

contexte d'usage :

référence aux programmes :

ressource(s) principale(s)

logo.png journée de partages de pratiques en NSI 14/06/2023
Journée pédagogique NSI : conférences et ateliers le 31 mai 2023 au lycée Jean Perrin de Rezé
NSI

documents complémentaires

Fichier(s) associé(s)
archive Les différents fichiers accessibles au téléchargement

haut de page

enseignements informatiques - Rectorat de l'Académie de Nantes