{ "cells": [ { "cell_type": "markdown", "id": "f5ca56dc", "metadata": {}, "source": [ "# Exercices sur les fonctions\n", "\n" ] }, { "cell_type": "markdown", "id": "9e8337af", "metadata": {}, "source": [ "## Que fait cette fonction ?\n", "\n", "Répondre aux questions de cet exercice sans s'aider de l'ordinateur, puis vérifier.\n", "\n", "1. On souhaite calculer $\\sum \\frac{1}{i}$. Quelle est la différence entre les différentes fonctions si dessous ? Laquelle est la \"bonne\" fonction, laquelle la \"pire\"" ] }, { "cell_type": "code", "execution_count": 48, "id": "4794d7a1", "metadata": { "tags": [ "keep" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1.0\n", "1.5\n", "1.8333333333333333\n", "2.083333333333333\n", "2.283333333333333\n", "2.283333333333333\n" ] }, { "data": { "text/plain": [ "2.283333333333333" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def serie_1(n):\n", " output = 0\n", " for i in range(1, n+1):\n", " output = output + 1/i\n", " print(output)\n", " \n", "serie_1(5)\n", " \n", "def serie_2(n):\n", " output = 0\n", " for i in range(1, n+1):\n", " output = output + 1/i\n", " return output\n", "\n", "serie_2(5) \n", " \n", "def serie_3(n):\n", " output = 0\n", " for i in range(1, n+1):\n", " output = output + 1/i\n", " print(output)\n", " \n", "serie_3(5)\n", "\n", " \n", "def serie_4(n):\n", " output = 0\n", " for i in range(1, n+1):\n", " output = output + 1/i\n", " return output\n", "\n", "serie_4(5)\n" ] }, { "cell_type": "markdown", "id": "592edbf1", "metadata": {}, "source": [ "2. Parmi tous les appels de la fonction ``f`` ci dessous, lequels vont faire une erreur ? Quelle sera l'erreur ?" ] }, { "cell_type": "code", "execution_count": null, "id": "b3dab48d", "metadata": { "tags": [ "keep" ] }, "outputs": [], "source": [ "def f(a, b):\n", " return a*2 + b\n", "\n", "p = [1, 2]\n" ] }, { "cell_type": "code", "execution_count": null, "id": "f008daa1", "metadata": { "tags": [ "keep" ] }, "outputs": [], "source": [ "f(1, 3, 4)\n", "f(1, 2)\n", "f(Bonjour, Hello)\n", "f(1, a=2)\n", "f(b=1, a=2)\n", "f(\"Bonjour\", \"Hello\")\n", "f[1, 2]\n", "f(\"Bonjour, Hello\")\n", "f(1)\n", "f(**p)\n", "f(*p)" ] }, { "cell_type": "markdown", "id": "d09a722b", "metadata": {}, "source": [ "3. Qu'est il affiché ? Dans quels fonction ``x`` est une variable globale ?" ] }, { "cell_type": "code", "execution_count": 3, "id": "e2ef2835", "metadata": { "tags": [ "keep" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n", "3\n", "16\n", "5\n", "3\n" ] }, { "ename": "UnboundLocalError", "evalue": "local variable 'x' referenced before assignment", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mUnboundLocalError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 21\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 22\u001b[0m \u001b[0mf3\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 23\u001b[0;31m \u001b[0mf4\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;32m\u001b[0m in \u001b[0;36mf4\u001b[0;34m(y)\u001b[0m\n\u001b[1;32m 11\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 12\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0mf4\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 13\u001b[0;31m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0my\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 14\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m15\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 15\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mUnboundLocalError\u001b[0m: local variable 'x' referenced before assignment" ] } ], "source": [ "\n", "def f1(x, y):\n", " print(x + y)\n", "\n", "def f2(y):\n", " x = 15\n", " print(x + y)\n", "\n", "def f3(x, y):\n", " print(x + y)\n", " x = 15\n", "\n", "def f4(y):\n", " print(x + y)\n", " x = 15\n", "\n", "x = 10\n", "f1(1, 2)\n", "x = 5\n", "f1(1, 2)\n", "f2(1)\n", "print(x) \n", "f3(1, 2)\n", "f4(1) # Attention, il y a un piège ici.\n" ] }, { "cell_type": "markdown", "id": "30dc9fa8", "metadata": {}, "source": [ "4. Qu'est il affiché ?" ] }, { "cell_type": "code", "execution_count": 47, "id": "a64e9f82", "metadata": { "tags": [ "keep" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.0\n", "1.0\n", "0.0\n", "0.0\n" ] } ], "source": [ "from math import sin\n", "\n", "pi = 3.141592653589793\n", "\n", "def g():\n", " return sin(pi/2)\n", " \n", "def f():\n", " pi = 0\n", " return sin(pi/2)\n", "\n", "print(f())\n", "print(g())\n", "pi = 0\n", "print(f())\n", "print(g())\n" ] }, { "cell_type": "markdown", "id": "0a623f01", "metadata": {}, "source": [ "4. Qu'est il affiché ?" ] }, { "cell_type": "code", "execution_count": 11, "id": "ae1b92be", "metadata": { "tags": [ "keep" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "123\n", "321\n", "132\n", "111\n" ] } ], "source": [ "def f(a, b, c):\n", " print(100*a + 10*b + c)\n", "\n", "a = 1\n", "b = 2\n", "c = 3\n", "f(a, b, c)\n", "f(c, b, a)\n", "f(a, b=c, c=b)\n", "f(a=a, b=a, c=a)\n" ] }, { "cell_type": "markdown", "id": "924ad086", "metadata": {}, "source": [ "## Fonction cos_deg\n", "\n", "Ecrire une fonction qui renvoie le cosinus d'un angle exprimé en degré" ] }, { "cell_type": "code", "execution_count": 23, "id": "8381b33b", "metadata": {}, "outputs": [], "source": [ "from math import cos, pi\n", "\n", "def cos_deg(angle):\n", " return cos(angle/180*pi)" ] }, { "cell_type": "markdown", "id": "34e10a31", "metadata": {}, "source": [ "## Volume d'un cône\n", "\n", "1. Ecrire une fonction qui renoit le volume d'un cône de rayon $r$ et hauteur $h$.\n", "2. Ecrire une fonction qui envoit le volume d'un tronc de cône de rayon $r_1$ et $r_2$. \n", "3. Ecrire une seule fonction pour laquelle le tronc de cône est par défaut un cône (i.e. $r_2=1$)" ] }, { "cell_type": "code", "execution_count": null, "id": "98d68357", "metadata": {}, "outputs": [], "source": [ "from math import pi\n", "\n", "def volume_cone(h, r):\n", " return pi*h*r**2/3\n", "\n", "def volume_tronc_cone(h, r1, r2):\n", " return pi*h*(r1**2 - r2**2)/3\n", "\n", "def volume_tronc_cone(h, r1, r2=0):\n", " return pi*h*(r1**2 - r2**2)/3" ] }, { "cell_type": "markdown", "id": "267b648c", "metadata": {}, "source": [ "## Fonction datetime\n", "\n", "Importer la fonction ``datetime`` du module ``datetime`` et regarder se documentation. \n", "\n", "1. Utiliser cette fonction pour entrer votre date de naissance (et l'heure si vous la connaissez) en nomant explicitement les arguments. \n", "2. Même question mais après avoir mis les arguments dans une liste\n", "3. Dans un dictionnaire" ] }, { "cell_type": "code", "execution_count": 19, "id": "637f74bd", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2011-06-02\n", "2011-06-02\n", "2011-06-02\n" ] } ], "source": [ "from datetime import date, datetime\n", "\n", "print(date(year=2011, month=6, day=2))\n", "\n", "liste = [2011, 6, 2]\n", "\n", "print(date(*liste))\n", "\n", "parametre = {'year':2011, 'month':6, 'day':2}\n", "\n", "print(date(**parametre))\n" ] }, { "cell_type": "markdown", "id": "346791de", "metadata": {}, "source": [ "## Fonction date en français\n", "\n", "1. Ecrire une fonction ``date_en_francais`` qui renvoie un objet ``date`` mais dont les arguments sont en français (``annee``, ``mois``, ``jour``) \n", "2. Idem avec la fonction ``datetime`` du module ``datetime`` (il faudra rajouter les arguments optionels ``heure``, ``minute``, ``seconde``) " ] }, { "cell_type": "code", "execution_count": 22, "id": "cf093598", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2011-06-02\n", "2011-06-02 15:00:00\n" ] } ], "source": [ "def date_fr(annee, mois, jour):\n", " return date(annee, mois, jour)\n", "\n", "print(date_fr(annee=2011, mois=6, jour=2))\n", "\n", "def datetime_fr(annee, mois, jour, heure=0, minute=0, seconde=0):\n", " return datetime(annee, mois, jour, heure, minute, seconde)\n", "\n", "print(datetime_fr(annee=2011, mois=6, jour=2, heure=15))\n" ] }, { "cell_type": "markdown", "id": "cbeb62f2", "metadata": {}, "source": [ "## Polynômes\n", "\n", "On considère un polynôme de degrés $n$ : $a_0 + a_1x + a_2x^2 + ... + a_n x^n$. \n", "\n", "1. Ecrire une fonction ``eval_polynome_troisieme_degres(x, a_0, a_1, a_2, a_3)`` qui évalue un tel polynôme en $x$. \n", "2. Ecrire une fonction qui permettra d'évaluer un polynôme de degré inférieur à 4 est que l'on pourra utiliser de la façon suivante : \n", "\n", " eval_polynome(x, 3, 4) # 3x + 4\n", " eval_polynome(x, a_0=2, a_2=4) # 4x^2 + 4\n", " \n", "3. Faire en sorte que cette fonction marche pour n'importe quel degré. \n", " " ] }, { "cell_type": "code", "execution_count": 25, "id": "471ffbcf", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "43" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def eval_polynome_troisieme_degres(x, a_0, a_1, a_2, a_3):\n", " return a_0 + a_1*x + a_2*x**2 + a_3*x**3\n", "\n", "def eval_polynome(x, a_0=0, a_1=0, a_2=0, a_3=0, a_4=0):\n", " return a_0 + a_1*x + a_2*x**2 + a_3*x**3 + a_4**4\n", "\n", "def eval_polynome(x, *a):\n", " output = 0\n", " for i, val_a in enumerate(a):\n", " output += val_a*x**i\n", " return output\n", " \n", "x = 10\n", "eval_polynome(x, 3, 4)" ] }, { "cell_type": "markdown", "id": "0ef64c73", "metadata": {}, "source": [ "## Equation du second degré\n", "\n", "On souhaite trouver les solutions de l’équation : $ax^2 + bx + c=0$. On rappelle que pour cela on calcule le discriminant $\\Delta = b^2 - 4*a*c$. \n", "- Si $\\Delta>0$, les solutions sont $\\frac{-b \\pm \\sqrt{Delta}}{2a}$\n", "- Si $\\Delta=0$, il y a une solution (double) $\\frac{-b }{2a}$\n", "- Si $\\Delta<0$, les solutions sont $\\frac{-b \\pm i\\sqrt{Delta}}{2a}$\n", "\n", "1. Ecrire une fonction equation_second_degre qui donne les solutions.\n", "2. Tester l’équation $x^2 -3x + 2$\n", "3. Ecrire une fonction qui résout une équation du premier degré.\n", "4. Faire en sorte que cette fonction soit appelée lorsque $a=0$. " ] }, { "cell_type": "code", "execution_count": 34, "id": "c20b0925", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2.0, 1.0)\n" ] } ], "source": [ "from math import sqrt\n", "\n", "def equation_seconde_degre(a, b, c):\n", " Delta = b**2 - 4*a*c\n", " if Delta>0:\n", " return (-b + sqrt(Delta))/(2*a), (-b - sqrt(Delta))/(2*a)\n", " if Delta==0:\n", " return -b/(2*a)\n", " if Delta<0:\n", " return (-b + sqrt(-Delta)*1J)/(2*a), (-b - sqrt(-Delta)*1J)/(2*a)\n", " \n", "print(equation_seconde_degre(1, -3, 2))\n", "\n", "def equation_premier_degre(a, b):\n", " return -b/a\n", "\n", "def equation_seconde_degre(a, b, c):\n", " if a==0:\n", " return equation_premier_degra(b, c)\n", " Delta = b**2 - 4*a*c\n", " if Delta>0:\n", " return (-b + sqrt(Delta))/(2*a), (-b - sqrt(Delta))/(2*a)\n", " if Delta==0:\n", " return -b/(2*a)\n", " if Delta<0:\n", " return (-b + sqrt(-Delta)*1J)/(2*a), (-b - sqrt(-Delta)*1J)/(2*a)\n", "\n", "# Dans cet exercice, les else ou elif sont inutiles." ] }, { "cell_type": "markdown", "id": "2fce35c1", "metadata": {}, "source": [ "## Coordonnée polaire d'un nombre complexe\n", "\n", "On considère une nombre complexe $z$ et sa représentation polaire : $z = re^{i\\theta}$\n", "\n", "1. Ecrire une fonction qui à partir de $r$ et $\\theta$ renvoie $z$\n" ] }, { "cell_type": "code", "execution_count": 37, "id": "24d1046e", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(6.123233995736766e-17+1j)" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from math import cos, sin, pi\n", "\n", "def from_polar(r, theta):\n", " return r*cos(theta) + 1J* r*sin(theta)\n", " \n", "from_polar(1, pi/2)" ] }, { "cell_type": "markdown", "id": "cd39c278", "metadata": {}, "source": [ "## Nombres premiers \n", "\n", "Ecrire une fonction qui renvoie True si un nombre est premier et False sinon. Pour cela, on testera si le nombre\n", "est divisible par les entiers successifs à partir de 2.\n", "\n", "On admet que si $n$ n’est pas premier, alors il existe un entier $p \\ge 2$ tel que $p^2 \\le n$ qui est un diviseur de $n$.\n", "\n", "1. Ecrire la fonction à l'aide d'une boucle.\n", "2. Combien y a t-il d'années au XXIème siècle qui sont des nombres premiers ?\n", "3. Si vous n'êtes pas convaincu que c'est mieux avec des fonctions, faites le sans..." ] }, { "cell_type": "code", "execution_count": null, "id": "9e4efd4b", "metadata": {}, "outputs": [], "source": [ "def est_premier(n):\n", " p = 2\n", " while p**2<=n:\n", " if n%p==0:\n", " return False\n", " p += 1\n", " return True\n", "\n", "est_premier(7)\n", "\n", "count_premier = 0\n", "for annee in range(2001, 2101):\n", " if est_premier(annee):\n", " count_premier += 1\n", "print(f'Il y a {count_premier} années premières aux XXI siècle')" ] }, { "cell_type": "markdown", "id": "2e160ef7", "metadata": {}, "source": [ "## Mention\n", "\n", "Ecrire une fonction qui à partir de la note sur 20 donne la mention" ] }, { "cell_type": "code", "execution_count": null, "id": "5a380b37", "metadata": {}, "outputs": [], "source": [ "def mention(note):\n", " if note>=18:\n", " return 'Felicitation'\n", " if note>=16:\n", " return 'Très bien'\n", " if note>=14:\n", " return \"Bien\"\n", " if note>=12:\n", " return \"Assez bien\"\n", " return 'Pas de mention'" ] } ], "metadata": { "celltoolbar": "Tags", "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.8" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 5 }