{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# 1A.0 - Premiers pas en Python\n", "\n", "Questions tr\u00e8s simples pour ceux qui savent coder, quelques \u00e9l\u00e9ments principaux du langage Python pour les autres."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Partie 1"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Un langage de programmation permet de d\u00e9crire avec pr\u00e9cision des op\u00e9rations tr\u00e8s simples sur des donn\u00e9es. Comme tout langage, il a une grammaire et des **mot-cl\u00e9s**. La complexit\u00e9 d'un programme vient de ce qu'il faut beaucoup d'op\u00e9rations simples pour arriver \u00e0 ses fins. Voyons cela quelques usages simples. Il vous suffit d'ex\u00e9cuter chaque petit extrait en appuyant sur le triangle pointant vers la droite ci-dessus. N'h\u00e9sitez pas \u00e0 modifier les extraits pour mieux comprendre ce que le programme fait.\n", "\n", "**La calculatrice**"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["15\n"]}], "source": ["x = 5\n", "y = 10\n", "z = x + y\n", "print(z) # affiche z"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On programme sert souvent \u00e0 automatiser un calcul comme le calcul mensuel du taux de ch\u00f4mage, le taux d'inflation, le temps qu'il fera demain... Pour pouvoir r\u00e9p\u00e9ter ce m\u00eame calcul sur des valeurs diff\u00e9rentes, il faut pouvoir d\u00e9crire ce calcul sans savoir ce que sont ces valeurs. Un moyen simple est de les nommer : on utilise des variables. Une variable d\u00e9signe des donn\u00e9es. ``x=5`` signifie que la variable ``x``contient 5. ``x+3`` signifie qu'on ajoute 3 \u00e0 ``x`` sans avoir besoin de savoir ce que ``x`` d\u00e9signe.\n", "\n", "**L'addition, l'incr\u00e9mentation**"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["3\n", "7\n"]}], "source": ["x = 2\n", "y = x + 1\n", "print(y)\n", "x += 5\n", "print(x)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Lorsqu'on programme, on passe son temps \u00e0 \u00e9crire des calculs \u00e0 partir de variables pour les stocker dans d'autres variables voire dans les m\u00eames variables. Lorsqu'on \u00e9crit ``y=x+5``, cela veut dire qu'on doit ajouter 5 \u00e0 ``x`` et qu'on stocke le r\u00e9sultat dans ``y``. Lorsqu'on \u00e9crit ``x += 5``, cela veut dire qu'on doit ajouter 5 \u00e0 ``x`` et qu'on n'a plus besoin de la valeur que ``x`` contenait avant l'op\u00e9ration.\n", "\n", "**La r\u00e9p\u00e9tition ou les boucles**"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["45\n"]}], "source": ["a = 0\n", "for i in range (0, 10) :\n", " a = a + i # r\u00e9p\u00e8te dix fois cette ligne\n", "print (a) "]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le mot-cl\u00e9 ``print`` n'a pas d'incidence sur le programme. En revanche, il permet d'afficher l'\u00e9tat d'une variable au moment o\u00f9 on ex\u00e9cute l'instruction ``print``.\n", "\n", "**L'aiguillage ou les tests**"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["10\n"]}], "source": ["a = 10\n", "if a > 0 :\n", " print(a) # un seul des deux blocs est pris en consid\u00e9ration\n", "else:\n", " a -= 1\n", " print(a)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**Les cha\u00eenes de caract\u00e8res**"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["10\n", "a\n", "textec\n"]}], "source": ["a = 10\n", "print(a) # quelle est la diff\u00e9rence\n", "print(\"a\") # entre les deux lignes\n", "s = \"texte\"\n", "s += \"c\"\n", "print(s) "]}, {"cell_type": "markdown", "metadata": {}, "source": ["Toute valeur a un type et cela d\u00e9termine les op\u00e9rations qu'on peut faire dessus. ``2 + 2`` fait ``4`` pour tout le monde. ``2 + \"2\"`` fait quatre pour un humain, mais est incompr\u00e9hensible pour l'ordinateur car on ajoute deux choses diff\u00e9rentes (``torchon + serviette``)."]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["23\n", "5\n"]}], "source": ["print(\"2\" + \"3\")\n", "print(2+3)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Partie 2"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Dans cette seconde s\u00e9rie, partie, il s'agit d'interpr\u00e9ter pourquoi un programme ne fait pas ce qu'il est cens\u00e9 faire ou pourquoi il provoque une erreur, et si possible, de corriger cette erreur.\n", "\n", "**Un oubli**"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["9\n"]}], "source": ["a = 5\n", "a += 4\n", "print(a) # on voudrait voir 9 mais c'est 5 qui appara\u00eet"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**Une erreur de syntaxe**"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["45\n"]}], "source": ["a = 0\n", "for i in range (0, 10): # il manque quelque chose sur cette ligne\n", " a = a + i\n", "print(a)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**Une autre erreur de syntaxe**"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["45\n"]}], "source": ["a = 0\n", "for i in range (0, 10):\n", " a = a + i # regardez bien\n", "print(a) "]}, {"cell_type": "markdown", "metadata": {}, "source": ["**Une op\u00e9ration interdite**"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"ename": "TypeError", "evalue": "unsupported operand type(s) for +: 'int' and 'str'", "output_type": "error", "traceback": ["\u001b[1;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[0ms\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;34m\"e\"\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 3\u001b[1;33m \u001b[0mprint\u001b[0m \u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0ms\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mTypeError\u001b[0m: unsupported operand type(s) for +: 'int' and 'str'"]}], "source": ["a = 0\n", "s = \"e\"\n", "print(a + s) # petit probl\u00e8me de type"]}, {"cell_type": "markdown", "metadata": {}, "source": ["**Un nombre impair de...**"]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"name": "stdout", "output_type": "stream", "text": ["195\n"]}], "source": ["a = 0\n", "for i in range (0, 10) :\n", " a = (a + (i+2)*3 ) # comptez bien\n", "print(a) "]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Partie 3"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Il faut maintenant \u00e9crire trois programmes qui :\n", "\n", "+ Ecrire un programme qui calcule la somme des 10 premiers entiers au carr\u00e9.\n", "+ Ecrire un programme qui calcule la somme des 5 premiers entiers impairs au carr\u00e9.\n", "+ Ecrire un programme qui calcule la somme des qui 10 premi\u00e8res factorielles : $\\sum_{i=1}^{10} i!$.\n", "\n", "A propos de la parit\u00e9 :"]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"data": {"text/plain": ["(0, 1)"]}, "execution_count": 14, "metadata": {}, "output_type": "execute_result"}], "source": ["14%2, 233%2"]}, {"cell_type": "markdown", "metadata": {}, "source": ["### Tutor Magic"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Cet outil permet de visualiser le d\u00e9roulement des programmes (pas trop grand, site original [pythontutor.com](http://www.pythontutor.com/))."]}, {"cell_type": "code", "execution_count": 14, "metadata": {"collapsed": true}, "outputs": [], "source": ["%load_ext tutormagic"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"text/html": ["\n", " \n", " "], "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["%%tutor --lang python3\n", "\n", "a = 0\n", "for i in range (0, 10):\n", " a = a + i"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Arriverez-vous \u00e0 r\u00e9soudre le premi\u00e8re exercice du site [CodinGame](https://www.codingame.com/) ?"]}, {"cell_type": "code", "execution_count": 16, "metadata": {"collapsed": true}, "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.6.1"}}, "nbformat": 4, "nbformat_minor": 2}