25개 이상의 토픽을 선택하실 수 없습니다. 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.2 KiB

6 년 전
6 년 전
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611
  1. # Introduction à la programmation avec Python (chapitre 1)
  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. # Comparaisons (3)
  205. !pycon
  206. >>> a = 2
  207. >>> a < 2
  208. False
  209. >>> 1 < a < 3 # only in Python
  210. True
  211. ---
  212. # Non persistance
  213. !pycon
  214. >>> a = 2
  215. >>> quit()
  216. <span />
  217. !pycon
  218. >>> a
  219. Traceback (most recent call last):
  220. File "<stdin>", line 1, in <module>
  221. NameError: name 'a' is not defined
  222. *Notre premier message d'erreur !*
  223. ---
  224. # Du code dans un fichier
  225. Aussi appelé: "code source", ou "source".
  226. L'essence du logiciel libre :)
  227. ---
  228. # Installation d'un éditeur de texte simple
  229. * Linux; `gedit`, `kate`, ...
  230. * macOS: `CotEditor`
  231. * Windows: `Notepad++`
  232. J'insiste sur **simple**. Inutile d'installer un IDE pour le moment.
  233. ---
  234. # Configuration
  235. * Police de caractères à chasse fixe
  236. * Indentation de *4 espaces*
  237. * Remplacer tabulation par des espaces
  238. * Activer la coloration syntaxique
  239. ---
  240. # Notre premier fichier source
  241. Insérez le code suivant dans votre éditeur de texte
  242. !python
  243. # Affiche un message
  244. print("Bonjour, monde")
  245. Sauvegardez dans un fichier `bonjour.py` dans `Documents/e2l/python` par exemple
  246. ---
  247. # Lancer du code en ligne de commande
  248. !console
  249. $ cd Documents/e2l/python/
  250. $ python3 bonjour.py
  251. Bonjour, monde
  252. * Les lignes commençant par dièse (`#`) ont été ignorées
  253. * `print()` affiche la valeur, comme dans le REPL.
  254. ---
  255. # Note importante (1)
  256. Vous avez juste besoin:
  257. * d'un éditeur de texte
  258. * de Python3 installé
  259. * d'une ligne de commande
  260. Pas la peine d'installer quoique ce soit de plus pour le moment
  261. ---
  262. # Note importante (2)
  263. À partir de maintenant, s'il y a marqué `# à recopier` en haut d'un exemple
  264. 1. *Recopiez* le code affiché dans votre éditeur, à la suite du code
  265. déjà écrit
  266. 2. Lancez le code depuis la ligne de commande
  267. 3. Réparez les erreurs éventuelles
  268. 4. Recommencez
  269. ---
  270. # Note importante (3)
  271. 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.
  272. Profitez qu'on soit là pour vous aider si vous avez des erreurs que vous ne comprenez pas!
  273. ---
  274. # Flot de contrôle
  275. L'essence de la programmation!
  276. ---
  277. # while
  278. Répéter tant qu'une condition est vraie
  279. !python
  280. print("Bonjour, monde")
  281. while True:
  282. print("spam!")
  283. Notes:
  284. * deux points à la fin de la ligne
  285. * indentation après les deux points
  286. ---
  287. # Notre première boucle infinie
  288. !bash
  289. $ python bonjour.py
  290. Bonjour, monde
  291. spam!
  292. spam!
  293. spam!
  294. ....
  295. CTRL-C pour interrompre
  296. ---
  297. # Conditions
  298. !python
  299. a = 3
  300. b = 4
  301. if a == b:
  302. print("a et b sont égaux")
  303. else:
  304. print("a et be sont différents")
  305. Rappel:
  306. * deux points à la fin de la ligne
  307. * indentation après les deux points
  308. ---
  309. # Combiner while et if
  310. Interrompt la boucle quand une condition devient vraie:
  311. !python
  312. i = 0
  313. while True:
  314. i = i + 1
  315. if i > 3:
  316. print("i est plus grand que 3, on arrête")
  317. break
  318. print("i =" + str(i))
  319. print("i est plus petit que 3, on continue")
  320. <pre>
  321. i = 1
  322. i est plus petit que 3, on continue
  323. i = 2
  324. i est plus petit que 3, on continue
  325. i = 3
  326. i est plus petit que 3, on continue
  327. i est plus grand que 3, on arrête
  328. </pre>
  329. ---
  330. # Lire une entrée utilisateur
  331. * `input()` (encore des parenthèses ...)
  332. * interrompt le script
  333. * lit ce que l'utilisateur tape jusqu'à ce qu'il tape "entrée".
  334. * renvoie une string
  335. ---
  336. # Le jeu
  337. On fait deviner un nombre à l'utilisateur, en affichant 'trop grand', 'trop petit'
  338. jusqu'à ce qu'il trouve la valeur exacte.
  339. ---
  340. # Le code
  341. !python
  342. # À recopier dans devine-nombre.py
  343. secret = 42
  344. print("Devine le nombre auquel je pense")
  345. while True:
  346. response = input()
  347. response = int(response)
  348. if response == secret:
  349. print("Gagné")
  350. break
  351. else:
  352. if response > secret:
  353. print("Trop grand")
  354. if response < secret:
  355. print("Trop petit")
  356. ---
  357. # Éviter de hard-coder le secret
  358. Le secret a une valeur prédéfinie, et il faut changer le code source
  359. pour changer le secret, pas terrible.
  360. Solution: le choisir au hasard
  361. ---
  362. # Un secret au hasard
  363. Remplacez le première ligne pour avoir:
  364. !python
  365. # À recopier dans devine-nombre.py
  366. import random
  367. secret = random.randint(0, 100)
  368. Le jeu devient tout de suite plus amusant :)
  369. (Oui, c'est un peu magique pour le moment, mais on expliquera en
  370. détail comment ça marche plus tard).
  371. ---
  372. # Et voilà!
  373. $ python 02-devine-nombre.py
  374. Devine le nombre auquel je pense
  375. 50
  376. Trop grand
  377. 25
  378. Trop petit
  379. 27
  380. Trop grand
  381. 26
  382. Gagné