Feat(NSI): Début des cours sur les fonctions
continuous-integration/drone/push Build is passing Details

This commit is contained in:
Bertrand Benjamin 2023-01-03 17:18:41 +01:00
parent d1b35d0d16
commit c5c70d2d4d
7 changed files with 194 additions and 22 deletions

View File

@ -1,14 +0,0 @@
\documentclass[a4paper,10pt]{article}
\usepackage{myXsim}
\author{Benjamin Bertrand}
\title{Fonctions spécifications et tests - Cours}
\date{décembre 2022}
\pagestyle{empty}
\begin{document}
\maketitle
\end{document}

View File

@ -0,0 +1,112 @@
\documentclass[a4paper,10pt]{article}
\usepackage{myXsim}
\usepackage{minted}
\author{Benjamin Bertrand}
\title{Fonctions spécifications et tests - Cours}
\date{décembre 2022}
\pagestyle{empty}
\begin{document}
\maketitle
\section{Les fonctions}
\begin{definition}[Les fonctions]
\textbf{Les fonctions} sont des séries de blocs d'instructions que l'on souhaite isoler et réutiliser. Elles permettent de \textbf{factoriser} des instructions et, quand elles sont bien nommées, donner des informations sur l'intention du programmeur.
En Python, les fonctions ont la forme suivante
\begin{center}
\begin{minipage}{0.5\linewidth}
\begin{minted}[bgcolor=base3,linenos]{python}
def nom_de_la_fonction(argument1, argument2, ...):
instruction 1
instruction 2
instruction 3
...
return valeur
\end{minted}
\end{minipage}
\end{center}
Le mot clé \mintinline{python}{return} permet de renseigner la valeur que la fonction retournera après son exécution. L'exécution de la fonction s'arrêtera au premier \mintinline{python}{return} rencontré. Si aucun \mintinline{python}{return} la fonction ne renverra aucune valeur, mais toutes les instructions s'exécuteront.
Si une variable est définie dans une fonction, on ne pourra pas accéder à sa valeur en dehors sauf si elle retournée.
\end{definition}
\paragraph{Exemples}
\begin{multicols}{1}
\begin{itemize}
\item Fonction qui calcule les coordonnées d'un vecteur
\begin{minipage}{0.9\linewidth}
\begin{minted}[bgcolor=base3,linenos]{python}
def coord_vecteur(xA, xB, yA, yB):
x = xB - xA
y = yB - yA
return x, y
print(coord_vecteur(1, 2, 3, 4))
xAB, yAB = coord_vecteur(12, 34, 23, 15)
\end{minted}
\end{minipage}
\columnbreak
\item Fonction qui teste si un mot de passe est valide
\begin{center}
\begin{minipage}{0.9\linewidth}
\begin{minted}[bgcolor=base3,linenos]{python}
mdp = "NSI"
def pass_est_valid(password):
if password == mpd:
return True
print("Mot de passe invalide")
return False
acces = pass_est_valid("plop")
acces2 = pass_est_valid("NSI")
print(acces)
print(accesé)
\end{minted}
\end{minipage}
\end{center}
\end{itemize}
\end{multicols}
\bigskip
\begin{itemize}
\item Fonction qui décore du texte
\begin{center}
\begin{minipage}{0.6\linewidth}
\begin{minted}[bgcolor=base3,linenos]{python}
def decor_pyramide(texte, symbole):
chapeau = ""
for i in range(len(texte)):
chapeau = chapeau + symbole*(i+1) + "\n"
bas = ""
for i in range(len(texte)):
chapeau = chapeau + symbole*(len(texte)-i) + "\n"
return chapeau + "\n" + texte + "\n" + bas
decoration = decor_pyramide("NSI", "#")
print(decoration)
print(chapeau)
\end{minted}
\end{minipage}
\end{center}
\end{itemize}
\end{document}

View File

@ -0,0 +1,59 @@
\documentclass[a4paper,10pt]{article}
\usepackage{myXsim}
\usepackage{minted}
\author{Benjamin Bertrand}
\title{Fonctions spécifications et tests - Cours}
\date{décembre 2022}
\pagestyle{empty}
\begin{document}
\maketitle
\setcounter{section}{1}
\section{Documenter}
Programmer c'est écrire du code pour que la machine le comprenne mais aussi et surtout pour que d'autres personnes le comprenne et soit en mesure de l'utiliser ou le modifier. C'est pour cela qu'il est primordiale de \textbf{documenter} les fonctions.
\begin{definition}[ Les docstrings ]
Une \textbf{docstring} (chaine de documentation) est la manière choisi pour documenter les fonctions en Python. Elles se placent en dessous de la signature de la fonction (ligne avec \mintinline{python}{def}) et sont entourés de \mintinline{python}{""" ... """}.
\begin{center}
\begin{minipage}{0.5\linewidth}
\begin{minted}[bgcolor=base3,linenos]{python}
def nom_de_la_fonction(argument1, argument2, ...):
""" Docstring """
instruction 1
instruction 2
instruction 3
...
return valeur
\end{minted}
\end{minipage}
\end{center}
Pour accéder à la docstring, on utilise l'attribut \mintinline{python}{__doc__} ou la fonction \mintinline{python}{help} en mode interactif.
\begin{center}
\begin{minipage}{0.5\linewidth}
\begin{minted}[bgcolor=base3,linenos]{python}
>>> from math import sqrt
>>> print(sqrt.__doc__)
Return the square root of x.
\end{minted}
\end{minipage}
\end{center}
\end{definition}
\section{Spécifier}
z
\section{Tester}
Écrire une fonction qui marche c'est bien mais écrire une fonction qui fait ce qu'on attend d'elle c'est mieux.
Pour cela,
\end{document}

View File

@ -2,7 +2,7 @@ Fonctions spécifications et tests
#################################
:date: 2022-12-02
:modified: 2022-12-02
:modified: 2023-01-03
:authors: Benjamin Bertrand
:tags: Programmation
:category: 1NSI
@ -33,12 +33,16 @@ Progression
Étape 1: Création de fonctions décoratives
------------------------------------------
Activité capytale pour apprendre a programmer des fonctions en décorant du texte.
Activité capytale pour apprendre à programmer des fonctions en décorant du texte.
- `Fonctions décoratives (notebook) <./1E fonctions de décorations.ipynb>`_
Bilan: structure d'une fonction, arguments, valeur retournée, spécifications
.. image:: ./1B_fonctions.pdf
:height: 200px
:alt: Cours sur les fonctions
Étape 2: Coder des fonctions et les documenter
----------------------------------------------
@ -46,3 +50,16 @@ Bilan: structure d'une fonction, arguments, valeur retournée, spécifications
Fonctions plus classiques à programmer et à documenter.
- `Fonctions et documentation (notebook) <./2E fonction documentations.ipynb>`_
Bilan: documenter et spécifier une fonction
.. image:: ./2B_specifiction_test.pdf
:height: 200px
:alt: Documenter et spécifier une fonction
Étape 3: Tester une fonction
----------------------------
Écrire des tests avant d'écrire une fonction. Utilisation d'assert.

View File

@ -2,7 +2,7 @@ Spécialité première NSI
#######################
:date: 2022-07-25
:modified: 2023-01-01
:modified: 2023-01-03
:authors: Bertrand Benjamin
:category: 1NSI
:tags: Progression
@ -51,17 +51,18 @@ Période 2
Période 3
---------
.. big_button::
:title: Interaction client/serveur
:link: ./05_Interaction_client-serveur/
Étude du protocole HTTP à travers les requests et les responses, construction d'un serveur avec Flask.
.. big_button::
:title: Tuple et array
Découverte des tuples et des arrays en python. Algorithme: recherche d'un élément dans une liste.
.. big_button::
:title: Représentation d'un texte
@ -77,9 +78,6 @@ Période 4
.. big_button::
:title: Architecture réseau
.. big_button::
:title: Recherche dans une liste
.. big_button::
:title: Tris