You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This repo is archived. You can view files and clone it, but cannot push or open issues/pull-requests.

01.md 9.1 KiB

5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598
  1. # Introduction à la programmation avec Python
  2. <p align="right">
  3. E2L <br />
  4. 24/11/2018 <br />
  5. Dimitri Merejkowsky <br />
  6. </p>
  7. ---
  8. # Plan
  9. * Présentation et historique du langage
  10. * L'interpréteur interactif
  11. * Un jeu simple
  12. ---
  13. # Historique
  14. * Créé par Guido van Rossum. Conçu à la base pour l'enseignement.
  15. * Le nom vient des Monty Python (si, si)
  16. * Python 1: Sortie en 1991
  17. * Python 2: en 2000
  18. * Python 3: en 2008
  19. ---
  20. # Le grand schisme
  21. La plupart des langages continuent à être compatibles d'une version à l'autre.
  22. *Ce n'est pas le cas pour Python3*, et ça a causé beaucoup de confusion et de débats.
  23. Heureusement, 10 ans plus tard, la situation s'est arrangée.
  24. ---
  25. # Python3
  26. Ce cours fonctionne donc uniquement avec Python3.
  27. N'utilisez *pas* Python2, sinon certaines choses expliquées ici ne marcheront pas :/
  28. ---
  29. # Utilisation de Python
  30. * Aussi appelé "langage de script", `glue language`
  31. * Bon partout, excellent nulle part
  32. * Exemples d'utilisation:
  33. * Sciences (physique, chimie, linguistique ...)
  34. * Animation (Pixar, Disney ...)
  35. * Sites web (journaux, youtube, ...)
  36. * Ligne de commande
  37. * ...
  38. ---
  39. # Installation
  40. ---
  41. # L'interpréteur interactif
  42. !pycon
  43. $ python3
  44. Python 3.7.1 (default, Oct 22 2018, 10:41:28)
  45. [GCC 8.2.1 20180831] on linux
  46. Type "help", "credits" or "license" for more information.
  47. >>>
  48. ---
  49. # Note
  50. À partir de maintenant, recopiez les entrées sur les slides dans votre propre
  51. interpréteur.
  52. Vous devez taper la même chose après l'invite de commande ('>>>') et vous devez voir les mêmes réponses.
  53. Si ce n'est pas le cas, prévenez moi!
  54. ---
  55. # Entiers et maths simples
  56. !pycon
  57. >>> 1
  58. 1
  59. >>> 2
  60. 2
  61. >>> 1 + 2
  62. 3
  63. >>> 2 * 3
  64. 6
  65. ---
  66. # Flottants
  67. C'est le `.` qui fait le flottant
  68. !pycon
  69. >>> 0.5
  70. 0.5
  71. >>> 0.5 + 0.2
  72. 0.7
  73. >>> 10 / 3
  74. 3.3333333333333335
  75. *Note: les flottants sont imprécis*
  76. ----
  77. # Division entières et modulo
  78. !pycon
  79. >>> 14 // 3
  80. 4
  81. >>> 14 % 3
  82. 2
  83. *Le `%` n'a rien à voir avec un pourcentage!*
  84. ---
  85. # Priorité des opérations
  86. !pycon
  87. >>> 1 + 2 * 3
  88. 7
  89. >>> (1 + 2) * 3
  90. 9
  91. *Les parenthèses permettent de grouper les expressions*
  92. ---
  93. # Variables
  94. !pycon
  95. >>> a = 2
  96. >>> a
  97. 2
  98. >>> b = 3
  99. >>> a + b
  100. 5
  101. * On peut nommer des valeurs
  102. * On peut afficher la valeur d'une variable entrant son nom dans le REPL
  103. ---
  104. # Variables (2)
  105. !pycon
  106. >>> a = 2
  107. >>> a
  108. 2
  109. >>> a = 3
  110. >>> a
  111. 3
  112. * On peut changer la valeur d'une variable (d'où son nom)
  113. ---
  114. # Nom des variables
  115. - Préférez des noms longs et descriptifs
  116. - Toujours en minuscule
  117. - Séparez les "mots" par des tirets bas (underscore)
  118. !pycon
  119. >>> score = 42
  120. >>> medium_age = 22
  121. ---
  122. # Les chaînes de caractères
  123. Aussi appelées "string".
  124. Avec des simple quotes (`'`)
  125. !pycon
  126. >>> 'Bonjour monde!'
  127. 'Bonjour monde'
  128. Marche aussi avec des double quotes (`"`)
  129. !pycon
  130. >>> "Bonjour, monde!"
  131. 'Bonjour monde'
  132. ---
  133. # Double et simple quotes
  134. On peut mettre des simples quotes dans des double quotes et vice-versa.
  135. !pycon
  136. >>> "Il a dit: 'bonjour' ce matin."
  137. "Il a dit: 'bonjour' ce matin."
  138. >>> 'Il a dit: "bonjour" ce matin'
  139. 'Il a dit: "bonjour" ce matin!'
  140. ---
  141. # Échappement
  142. Avec la barre oblique inversée "backslash"
  143. !pycon
  144. >>> 'Il a dit: "bonjour". C\'est sympa!'
  145. 'Il a dit: "bonjour". C\'est sympa!'
  146. ---
  147. # Concaténation
  148. !pycon
  149. >>> name = "John"
  150. >>> message = "Bonjour " + name + " !"
  151. >>> message
  152. "Bonjour John !"
  153. ---
  154. # Types
  155. !pycon
  156. >>> a = 42
  157. >>> message = "La réponse est: " + a
  158. TypeError: can only concatenate str (not "int") to str
  159. On ne mélange pas les torchons et les serviettes!
  160. ---
  161. # Conversions
  162. !python
  163. # Entier vers string
  164. >>> a = 42
  165. >>> message = "La réponse est: " + str(a)
  166. >>> message
  167. 'La réponse est 42'
  168. # String vers entier
  169. >>> answer = int("42")
  170. >>> answer
  171. 42
  172. Notez les parenthèses autour des valeurs.
  173. ---
  174. # Booléens
  175. True et False
  176. En Python, elle sont en majuscules!
  177. ---
  178. # Assignation
  179. On peut assigner des variables aux valeurs True et False
  180. !pycon
  181. >>> la_terre_est_plate = False
  182. ...
  183. >>> python_c_est_genial = True
  184. ---
  185. # Comparaisons
  186. !pycon
  187. >>> a = 2
  188. >>> b = 3
  189. >>> a > b
  190. False
  191. >>> 2 + 2 == 4
  192. True
  193. Note: `==` pour la comparaison, `=` pour l'assignation
  194. ---
  195. # Comparaisons (2)
  196. !pycon
  197. >>> a = 2
  198. >>> b = 3
  199. >>> a != b
  200. True
  201. >>> 2 + 2 >= 4
  202. True
  203. ---
  204. # Non persistance
  205. !pycon
  206. >>> a = 2
  207. >>> quit()
  208. <span />
  209. !pycon
  210. >>> a
  211. Traceback (most recent call last):
  212. File "<stdin>", line 1, in <module>
  213. NameError: name 'a' is not defined
  214. *Notre premier message d'erreur !*
  215. ---
  216. # Du code dans un fichier
  217. Aussi appelé: "code source", ou "source".
  218. L'essence du logiciel libre :)
  219. ---
  220. # Installation d'un éditeur de texte simple
  221. * Linux; `gedit`, `kate`, ...
  222. * macOS: `CotEditor`
  223. * Windows: `Notepad++`
  224. J'insiste sur **simple**. Inutile d'installer un IDE pour le moment.
  225. ---
  226. # Configuration
  227. * Police de caractères à chasse fixe
  228. * Indentation de *4 espaces*
  229. * Remplacer tabulation par des espaces
  230. * Activer la coloration syntaxique
  231. ---
  232. # Notre premier fichier source
  233. Insérez le code suivant dans votre éditeur de texte
  234. !python
  235. # Affiche un message
  236. print("Bonjour, monde")
  237. Sauvegardez dans un fichier `bonjour.py` dans `Documents/e2l/python` par exemple
  238. ---
  239. # Lancer du code en ligne de commande
  240. !console
  241. $ cd Documents/e2l/python/
  242. $ python3 bonjour.py
  243. Bonjour, monde
  244. * Les lignes commençant par dièse (`#`) ont été ignorées
  245. * `print()` affiche la valeur, comme dans le REPL.
  246. ---
  247. # Note importante (1)
  248. Vous avez juste besoin:
  249. * d'un éditeur de texte
  250. * de Python3 installé
  251. * d'une ligne de commande
  252. Pas la peine d'installer quoique ce soit de plus pour le moment
  253. ---
  254. # Note importante (2)
  255. À partir de maintenant, s'il y a marqué `# à recopier` en haut d'un exemple
  256. 1. *Recopiez* le code affiché dans votre éditeur, à la suite du code
  257. déjà écrit
  258. 2. Lancez le code depuis la ligne de commande
  259. 3. Réparez les erreurs éventuelles
  260. 4. Recommencez
  261. ---
  262. # Note importante (3)
  263. C'est le meilleur moyen d'apprendre. Si vous restez passifs vous retiendrez beaucoup moins de choses et ne pourrez pas coder par vous-même.
  264. Profitez qu'on soit là pour vous aider si vous avez des erreurs que vous ne comprenez pas!
  265. ---
  266. # Flot de contrôle
  267. L'essence de la programmation!
  268. ---
  269. # while
  270. Répéter tant qu'une condition est vraie
  271. !python
  272. print("Bonjour, monde")
  273. while True:
  274. print("spam!")
  275. Notes:
  276. * deux points à la fin de la ligne
  277. * indentation après les deux points
  278. ---
  279. # Notre première boucle infinie
  280. !bash
  281. > python bonjour.py
  282. Bonjour, monde
  283. spam!
  284. spam!
  285. spam!
  286. ....
  287. CTRL-C pour interrompre
  288. ---
  289. # Conditions
  290. !python
  291. a = 3
  292. b = 4
  293. if a == b:
  294. print("a et b sont égaux")
  295. else:
  296. print("a et be sont différents")
  297. Rappel:
  298. * deux points à la fin de la ligne
  299. * indentation après les deux points
  300. ---
  301. # Combiner while et if
  302. Interrompt la boucle quand une condition devient vraie:
  303. !python
  304. i = 0
  305. while True:
  306. i = i + 1
  307. if i > 3:
  308. print("i est plus grand que 3, on arrête")
  309. break
  310. print("i =" + str(i))
  311. print("i est plus petit que 3, on continue")
  312. <pre>
  313. i = 1
  314. i est plus petit que 3, on continue
  315. i = 2
  316. i est plus petit que 3, on continue
  317. i = 3
  318. i est plus petit que 3, on continue
  319. i est plus grand que 3, on arrête
  320. </pre>
  321. ---
  322. # Lire une entrée utilisateur
  323. * `input()` (encore des parenthèses ...)
  324. * interrompt le script
  325. * lit ce que l'utilisateur tape jusqu'à ce qu'il tape "entrée".
  326. * renvoie une string
  327. ---
  328. # Le jeu
  329. On fait deviner un nombre à l'utilisateur, en affichant 'trop grand', 'trop petit'
  330. jusqu'à ce qu'il trouve la valeur exacte.
  331. ---
  332. # Le code
  333. !python
  334. # À recopier dans devine-nombre.py
  335. secret = 42
  336. print("Devine le nombre auquel je pense")
  337. while True:
  338. response = input()
  339. response = int(response)
  340. if response == secret:
  341. print("Gagné")
  342. break
  343. else:
  344. if response > secret:
  345. print("Trop grand")
  346. if response < secret:
  347. print("Trop petit")
  348. ---
  349. # Éviter de hard-coder le secret
  350. Le secret a une valeur prédéfinie, et il faut changer le code source
  351. pour changer le secret, pas terrible.
  352. Solution: le choisir au hasard
  353. ---
  354. # Un secret au hasard
  355. Remplacez le première ligne pour avoir:
  356. !python
  357. # À recopier dans devine-nombre.py
  358. import random
  359. secret = random.randint(0, 100)
  360. Le jeu devient tout de suite plus amusant :)
  361. (Oui, c'est un peu magique pour le moment, mais on expliquera en
  362. détail comment ça marche plus tard).
  363. ---
  364. # Et voilà!
  365. $ python 02-devine-nombre.py
  366. Devine le nombre auquel je pense
  367. 50
  368. Trop grand
  369. 25
  370. Trop petit
  371. 27
  372. Trop grand
  373. 26
  374. Gagné