"* [site du zero](http://openclassrooms.com/courses/apprenez-a-programmer-en-python) (cours en ligne)\n",
"* [codeacademy](http://www.codecademy.com/) (cours en ligne)\n",
"* [code conbat](http://codecombat.com) (jeu en ligne qui se joue en codant)\n",
"* [checkio](http://www.checkio.org/) (jeu en ligne - anglais - avec beaucoup de langage différents)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Avec Repl.it\n",
"\n",
"Se rendre sur le site de [repli.it](https://repl.it/repls/SpiffyOpulentBackend). \n",
"\n",
"L'interface se sépare en 2 parties:\n",
"\n",
"![interface replit](./fig/replit_global.png)\n",
"\n",
"- **Zone Script**: Éditeur de texte où l'on pourra écrire notre programme python. Pour executer son contenu, il faudra cliquer sur ![replit run](./fig/replit_run.png)\n",
"- **Zone Shell**: Line de commande pour interagir avec python. Ici vous pouvez tester vos commandes python et presser la touche *entrer* pour l'executer. Par contre on ne peut pas écrire sur plusieurs lignes.\n",
"\n",
"Il est conseillé d'utiliser en priorité la **zone script** car elle permet d'écrire sur plusieurs lignes et de corriger après l'execution. La **zone shell** servira à tester des commandes pour voir directement leurs effets. \n",
"\n",
"Pour sauvergarder votre travail, vous cliquerez sur les 3 points à côté de *Files* puis sur *download as zip*.\n",
"\n",
"![replit save](./fig/replit_files.png)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Introduction Python\n",
"\n",
"Dans les encadrés, il y a du code python. Il faudra le recopier leur contenu dans la zone script et ne pas hésiter à le modifier."
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Bonjour\n"
]
}
],
"source": [
"print(\"Bonjour\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Modifier la commande précédente pour qu'elle n'affiche plus bonjour mais votre nom puis executer cette commande.\n",
"\n",
"Il est possible d'afficher plusieurs messages:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"bonjour\n",
"monde\n"
]
}
],
"source": [
"print(\"bonjour\")\n",
"print(\"monde\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Modifier le programme précédent pour qu'il affiche:\n",
"\n",
" Bonjour\n",
" \n",
" tous\n",
" \n",
" le \n",
" \n",
" monde\n",
" \n",
"Quand une ligne commence par un #, Python ne la lit pas. On appelle cela des commentaires. Nous les utiliserons pour expliquer ce que l'on fait."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"bonjour\n"
]
}
],
"source": [
"# la commande suivante affiche Bonjour\n",
"print(\"bonjour\")\n",
"# Quand on veut afficher quelque chose, on utilisera la commande print()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Les variables\n",
"\n",
"Les variables sont des *enveloppes* où l'on stockera des nombres, des mots, des phrases ou des choses plus compliqués."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"un_nombre = 10"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ainsi dans *l'enveloppe* appelée **un_nombre** on y met le nombre 10.\n",
"\n",
"C'est ce que l'on appelle **assigner** une **valeur** à une variable ou **stocker** une valeur dans une variable."
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"10\n"
]
}
],
"source": [
"un_nombre = 10\n",
"print(un_nombre) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Modifier le programme précédent pour stocker le nombre 2 dans **un_nombre** puis l'afficher.\n",
"\n",
"Pour stocker des mots ou des phrases, il faut les mettre entre guillemets"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"un_mot = \"Coucou\"\n",
"une_phrase = \"ceci est une phrase\""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Modifier le programme précédent pour changer le contenu des variables puis ajouter deux lignes pour afficher ce que contiennent ces variables (avec la commande `print`)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Générateur d'excuses\n",
"\n",
"Quand Loïc fait des bétises, il se fait souvent prendre et doit trouver une excuse le plus rapidement possible. Aidons le en créant un programme qui créé des excuses sur commande.\n",
"\n",
"Ces excuses auront le modèle suivant\n",
"\n",
" C'est pas moi! C'est (Bob). \n",
" Il a (mangé) une (grenouille) (volante). Alors que moi j'étais tranquillement en train de (faire) un (super) (exercice de math). \n",
" Je suis innocent (monsieur)!\n",
" \n",
"Les nombres entre parenthèses seront remplacé par des mots choisis par l'utilisateur de ce générateur.\n",
"\n",
"Pour écrire du texte avec une variable, il faut séparer les parties par une virgule:"
"Pour demander quelque chose à l'utilisateur, on utilise la fonction `input`.\n",
"\n",
"Dans le programme suivant, l'ordinateur pose une question (**Nom du coupable (masculin)?**), attend que l'utilisateur donne une réponse puis réutilise cette réponse pour faire une phrase (**C'est pas moi! c'est ....**)"
"Pour ceux qui ne connaissent pas un Magic 8 ball est un boule magique qui répond à toutes les questions ([vidéo](https://www.youtube.com/watch?v=9gaQwIrBNPw)).\n",
"\n",
"Même si je ne voudrai pas gacher votre âme d'enfant, cette boule magique répond au hasard... Pour gérer le hasard en Python, on utilise **random**. Il faut donc placer la ligne suivante au début du fichier à chaque fois que l'on veut faire quelque chose au hasard."
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"import random"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Nous allons mettre toutes les réponses possibles dans une liste"
"* Completer votre programme pour demander une réponse à l'utilisateur *(utilisez `int(input(\"question\"))` plutôt que `input(\"question\")` pour que la réponse soit transformée en entier)*\n",
"\n",
"* Regarder la section sur [Condition if](#Condition-if) pour adapter l'exemple et savoir lequel du nombre choisi par l'ordinateur ou de l'utilisateur est le plus grand.\n",
"* Écrire le programme final qui fait choisir un nombre à l'ordinateur, qui demande un nombre à l'utilisateur puis qui dit si le nombre donné par l'utilisateur est plus grand ou plus petit.\n",
"* Pour améliorer notre programme, il faudrait que l'utilisateur puisse rententer de deviner le nombre. Regardez la section [Boucle while](#Boucle-while) pour améliorer votre programme.\n",
"Pour ce projet, nous allons programmer un générateur de smileys. Nous allons définir quelquels éléments de ce smiley et l'ordinateur choisira aléatoirement parmi ces éléments pour créer le smiley.\n",
"On veut écrire un programme qui manipule les polynomes du 2nd degré qui l'on améliorera petit à petit.\n",
"\n",
"* Écrire un programme qui demande les valeurs de `a`, `b` et `c` (les coefficients du polynome) et renvoie les racines du polynôme $ax^2 + bx + c$\n",
"\n",
" Valeur de a?\n",
" 4\n",
" Valeur de b?\n",
" 4\n",
" Valeur de c?\n",
" 1\n",
" Delta = 0, il y a une racine:\n",
" x = 0.5\n",
" \n",
"* On veut maintenant améliorer notre programme pour qu'il donne le tableau de signe du polynôme.\n",
"\n",
" Valeur de a?\n",
" 4\n",
" Valeur de b?\n",
" 4\n",
" Valeur de c?\n",
" 1\n",
" Delta = 0, il y a une racine:\n",
" x = 0.5\n",
" Comme a = 4 donc le tableau de signe est \n",
" \n",
" -------------------------\n",
" x | -inf 0.5 +inf\n",
" -----------------------------\n",
" P | + 0 +\n",
" -----------------------------"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Chiffrement de Cesar\n",
"\n",
"Le chiffrement de César, utilisé par Jules César pour transmettre des messages secrets dans l’Antiquité, consiste décaler les lettres dans l'alphabet pour écrire un message.\n",
"\n",
"Voici un exemple avec un décalage de 4\n",
"\n",
" message >>> bonjour\n",
" chiffré >>> fsrnsyv \n",
"\n",
"Le `b` devient `f`, `o` devient `s` etc...\n",
"\n",
"* Avec un crayon et du papier chiffrer `bonjour` avec un décalage de 6.\n",
"\n",
"Python est plus fort pour manipuler les nombres que les lettres. Il faudra donc commencer par transformer les lettres en nombre (on appelle cela **encoder**). Il existe une fonction faite pour ça: `ord`"
"Vous retrouverez tous les caractères et leurs nombres [ici](http://www.asciitable.com/). On peut remarquer qu'il y en a 256 (souvenez en vous on s'en servira plus tard)\n",
"\n",
"Il faut donc transformer le message en liste de nombre. Pour cela on utilisera des [Boucles for](#Boucle-for):"
"Le `%256` est là pour être sûr qu'aucun nombre ne dépasse 255. Si un nombre dépasse 255, on recommence par 0 (par exemple 259 devient 3 c'est le reste de la division euclidienne de 259 par 256)\n",
"\n",
"Il faut maintenant décodé le `message_decale` pour avoir à nouveau des lettres"
"Après avoir afficher la question, l'ordinateur se met en pose et attend que l'utilisateur réponde quelque chose. Une fois que l'utilisateur a répondu (a appuyé sur `entrer`) la réponse est stocké, ici, dans la variable `nom`."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Condition if\n",
"\n",
"Pour différencier plusieurs cas, on utilisera la commande `if` (si), `elif` (sinon si) et `else` (sinon)."
"En anglais, `while` signifie **tant que**. On l'utilisera quand on veut refaire quelque plusieurs fois **tant que** quelque chose n'est pas vrais.\n",
"\n",
"Ajouter 3 **tant que** que `u` n'a pas dépassé 19: "
"Une fonction est un morceau de programme qui évitera de coder plusieurs fois la même chose. Quand on programme on dit souvent `Si c'est la 3e fois que l'on écrit ces lignes c'est qu'il faut en faire une fonction`.\n",