2019-2020/1ST/Programmation/2-Fonctions.ipynb

424 lines
10 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Python et fonctions\n",
"\n",
"Le but de ce TP est de découvrir les fonctions en programmation.\n",
"\n",
"* [Echauffement](#Que-fait-ce-programme?)\n",
"* [Fonctions mathématiques](#Fonctions-mathématiques)\n",
"* [Faire beaucoup de calculs](#Faire-beaucoup-de-calculs)\n",
"* [Reçut/Recalé/mentions au bac](#Reçut/Recalé/mentions-au-bac)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Que fait ce programme?\n",
"\n",
"* Avant d'executer le programme suivant. Lisez-le et essayer de comprendre ce qu'il fait.\n",
"* Commenter au dessus de chaque ligne (avec #...) pour expliquer ce qu'elle fait."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"entree1 = 'Choux' # Crée un variable nommé entree1 et y met le mot 'Choux'\n",
"entree2 = 'Salade'\n",
"plat1 = 'Frites'\n",
"plat2 = 'Haricots vert'\n",
"print(\"==== Menu du jour ====\")\n",
"print(\"\")\n",
"print(\"Entrées -----\")\n",
"print(\" * \", entree1)\n",
"print(\" * \", entree2)\n",
"print(\"Plats -------\")\n",
"print(\" * \", plat1)\n",
"print(\" * \", plat2)\n",
"print(\"\")\n",
"print(\"Faites votre choix\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Ajouter un choix de dessert à ce programme"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Fonctions mathématiques \n",
"\n",
"On peut aussi tout à fait programmer des fonctions similaires à celles que l'on trouve en mathématiques. \n",
"\n",
"Cette fonction polynôme\n",
"\n",
"$$ f:x \\mapsto -x^2 + 6x+ 3$$\n",
"\n",
"se codera en python"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"def f(x):\n",
" return -x**2+6*x-3"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Quelques éléments de syntaxes sont importants à noter:\n",
"\n",
"- `def` est le mot clé qui annonce à Python que l'on va définir une fontion.\n",
"- `:` à la fin de la ligne\n",
"- `return` est le mot clé qui demande à Python de retourner ce qui est après comme résultat.\n",
"\n",
"Maintenant que la fonction est codée, on peut l'utiliser pour calculer des images."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(f(10))\n",
"print(f(-2))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Modifier les commandes précédentes pour calculer d'autres images. Vous pouvez aussi entourer le résultat du calcul avec une phrase pour décrire le résultat."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Pour chacune des fonctions suivantes, testées les pour savoir si elles fonctionnents. Une fois que vous ètes sûr qu'elles font bien ce que vous souhaitez, ne les effacées pas et gardez les pour la suite.\n",
"\n",
"* Programmer la fonction $g$ définie par \n",
" $$ g:x \\mapsto x(19 - 2x) $$\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calculer des images par cette fonction et vérifier que les résultats correspondent bien à que l'on attend."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"* Programmer la fonction $h$ qui correspond au programme de calcul suivant\n",
"\n",
" * Choisir un nombre\n",
" * -> Ajouter 2\n",
" * -> Elever au carré\n",
" * -> Soustraire 4"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Calculer des images par cette fonction et vérifier que les résultats correspondent bien à que l'on attend."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
" \n",
"* Programmer une fonction `celcius2fahrenheit` qui convertit des degrés celcius vers des degrés fahrenheit en utilisant la formule suivante\n",
" $$ (°F) = 1,8 * (°C) + 32 $$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Convertir en Fahrenheit les températures suivantes\n",
"$$\n",
" 0°C \\qquad 10°C \\qquad 100°C\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Programmer la fonction inverse `fahrenheit2celcius`.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Convertir en Celsius les températures suivantes\n",
"$$\n",
" 0°F \\qquad 100°F \\qquad -10°F\n",
"$$"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"Les 2 prochaines parties peuvent être faite independament. A vous de choisir celle qui tente le plus."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Faire beaucoup de calculs\n",
"\n",
"Imaginons que je souhaite chercher le maximum de la fonction $f$ programmée précédement. Il va falloir que je fasse calculer à python plusieurs images de cette fonction.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"print(f(0))\n",
"print(f(5))\n",
"print(f(20))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Le faire de la sorte peut prendre beaucoup de temps et se serait se priver de faire travailler l'ordinateur à notre place\n",
"\n",
"Pour réaliser plusieurs calculs de façon systématiques, on peut utiliser **une boucle** `for`.\n",
"\n",
"Ici la boucle va calculer les images par la fonction $f$ de tous les nombres de 0 à 9. "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"for x in range(10):\n",
" print(\"Quand x vaut\", x, \", f(x) vaut\", f(x))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"On peut donc penser que la fonction a un maximum autour de 3.\n",
"\n",
"* Ecrire toutes les conversions 0 à 100 degré celcius en farhenheit"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Calculer toutes les valeurs de $g(x)$ pour $x$ allant de -10 à 10."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Algortihme de seuil\n",
"\n",
"Dans cette partie, nous allons voir un algorithme \"classique\" dit algorithme de seuil. Le but de cet algorithme est de chercher à partir de quelle valeur de $x$ une fonction dépasse une certaine valeur.\n",
"\n",
"Par exemple, on pourrait vouloir savoir à partir de quelle valeur de $x$, $f(x)$ est plus petit que -100 en partant de $x=0$ et avec une précision de 0,1.\n",
"\n",
"- Faire cette recherche à la main en essayant de détailler votre démarche."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"L'algorithme pourrait s'écrire en pseudo-code:\n",
"\n",
" x <- 0\n",
" pas <- 0,1\n",
" tant que f(x) > -100 faire\n",
" x <- x + pas\n",
" afficher x\n",
"\n",
"**Tant que** se traduit en python par `while`. Ainsi l'algorithme précédent s'écrit en Python:\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Quand x dépasse 13.299999999999969 ,f(x) passe en dessous de -100\n"
]
}
],
"source": [
"x = 0\n",
"pas = 0.1\n",
"while f(x) > -100:\n",
" x = x + pas\n",
"print(\"Quand x dépasse\", x, \",f(x) passe en dessous de -100\", )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Les nombreux chiffres après la virgules (qui sont faux!) viennent de la façon de stocker les nombres à virgules dans l'ordinateur. Ils sont présents dans la majorité des programmes et il est difficile de les éviter. C'est une des raison pour laquelle on ne peut pas faire aveuglément confiance à un ordinateur.\n",
"\n",
"\n",
"- Trouver le plus petit $x$ tel que $g(x)$ passe en dessous 100 avec une précision de 0,1.\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"- Trouver le plus petit 𝑥 tel que 𝑔(𝑥) passe en dessous 100 avec une précision de 0,01."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.8.3"
}
},
"nbformat": 4,
"nbformat_minor": 2
}