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.

python-S02-E08.md 11 KiB

4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
4 years ago
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012
  1. % Programmation avec Python (Épisode 8)
  2. % Dimitri Merejkowsky
  3. % 18 janvier 2020
  4. # Quiz
  5. Les transparents qui suivent contiennent tous du code, suivi d'une liste
  6. numérotée de 1 à 2.
  7. Seule l'une des deux réponse est correcte - à vous de la trouver.
  8. Si vous n'êtes pas sûr, vous pouvez recopier le code dans un fichier
  9. `exemple.py` et lancer `python3 exemple.py` pour faire tourner
  10. le code :)
  11. Vous pouvez aussi lire les chapitres 1 à 13 sur
  12. https://dmerej.info/books/python/
  13. À vous de jouer!
  14. #
  15. ```python
  16. print("Bonjour")
  17. ```
  18. \vfill
  19. 1. Bonjour
  20. 2. Au revoir
  21. #
  22. ```python
  23. print(1 + 2)
  24. ```
  25. \vfill
  26. 1. 2
  27. 2. 3
  28. #
  29. ```python
  30. print(11 / 2)
  31. ```
  32. \vfill
  33. 1. 5
  34. 2. 5.5
  35. #
  36. ```python
  37. print(11 // 2)
  38. ```
  39. \vfill
  40. 1. 5
  41. 2. 5.5
  42. #
  43. ```python
  44. print(11 % 2)
  45. ```
  46. \vfill
  47. 1. 0
  48. 2. 1
  49. #
  50. ```python
  51. print(1 + 2 * 3)
  52. ```
  53. \vfill
  54. 1. 9
  55. 2. 7
  56. #
  57. ```python
  58. print((1 + 2) * 3)
  59. ```
  60. \vfill
  61. 1. 9
  62. 2. 7
  63. #
  64. ```python
  65. a = 2
  66. print(a)
  67. ```
  68. \vfill
  69. 1. 2
  70. 2. 3
  71. #
  72. ```python
  73. a = 2
  74. b = 3
  75. print(a + b)
  76. ```
  77. \vfill
  78. 1. 5
  79. 2. 4
  80. #
  81. ```python
  82. message = "Bonjour"
  83. print(message)
  84. ```
  85. \vfill
  86. 1. Bonjour
  87. 2. Au revoir
  88. #
  89. ```python
  90. message = "Bonjour"
  91. message = message + " monde"
  92. print(message)
  93. ```
  94. \vfill
  95. 1. Bonjour
  96. 2. Bonjour monde
  97. #
  98. ```python
  99. message = "Bonjour"
  100. message += " monde"
  101. print(message)
  102. ```
  103. \vfill
  104. 1. Bonjour
  105. 2. Bonjour monde
  106. #
  107. ```python
  108. message = "Bonjour en Anglais se dit 'hello'"
  109. print(message)
  110. ```
  111. \vfill
  112. 1. Bonjour en Anglais se dit hello
  113. 2. Bonjour en Anglais se dit 'hello'
  114. #
  115. ```python
  116. message = 'Bonjour en Anglais se dit "hello"'
  117. print(message)
  118. ```
  119. \vfill
  120. 1. Bonjour en Anglais se dit 'hello'
  121. 2. Bonjour en Anglais se dit "hello"
  122. #
  123. ```python
  124. réponse = 42
  125. message = "La réponse est: " + str(réponse)
  126. print(message)
  127. ```
  128. \vfill
  129. 1. La réponse est: 'réponse'
  130. 2. La réponse est: 42
  131. #
  132. ```python
  133. entrée_utilisateur = "40"
  134. age = int(entrée_utilisateur)
  135. année_de_naissance = 2020 - age
  136. print(année_de_naissance)
  137. ```
  138. \vfill
  139. 1. 1980
  140. 2. 40
  141. #
  142. ```python
  143. la_terre_est_plate = False
  144. print(la_terre_est_plate)
  145. ```
  146. \vfill
  147. 1. True
  148. 2. False
  149. #
  150. ```python
  151. il_pleut = True
  152. j_ai_mon_parapluie = False
  153. print(il_pleut and j_ai_mon_parapluie)
  154. ```
  155. \vfill
  156. 1. True
  157. 2. False
  158. #
  159. ```python
  160. il_pleut = True
  161. j_ai_mon_parapluie = False
  162. je_suis_mouillé = il_pleut and (not j_ai_mon_parapluie)
  163. print(je_suis_mouillé)
  164. ```
  165. \vfill
  166. 1. True
  167. 2. False
  168. #
  169. ```python
  170. a = 2
  171. b = 3
  172. print(a == b)
  173. ```
  174. \vfill
  175. 1. True
  176. 2. False
  177. #
  178. ```python
  179. a = 2
  180. b = 3
  181. print(a != b)
  182. ```
  183. \vfill
  184. 1. True
  185. 2. False
  186. #
  187. ```python
  188. a = 2
  189. b = 3
  190. print(a < b)
  191. ```
  192. \vfill
  193. 1. True
  194. 2. False
  195. #
  196. ```python
  197. a = 2
  198. b = 2
  199. print(a <= b)
  200. ```
  201. \vfill
  202. 1. True
  203. 2. False
  204. #
  205. ```python
  206. min = 2
  207. x = 3
  208. max = 5
  209. print(min < x < max)
  210. ```
  211. \vfill
  212. 1. True
  213. 2. False
  214. #
  215. ```python
  216. a = 3
  217. b = 4
  218. if a == b:
  219. print("a et b sont égaux")
  220. else:
  221. print("a et b sont différents")
  222. ```
  223. \vfill
  224. 1. a et b sont égaux
  225. 2. a et b sont différents
  226. #
  227. ```python
  228. age = 18
  229. if age < 10:
  230. print("inférieur à dix")
  231. elif 10 <= age < 20:
  232. print("âge entre 10 et 20")
  233. elif 20 <= age < 40:
  234. print("âge entre 20 et 40")
  235. else:
  236. print("âge supérieur à 40")
  237. ```
  238. \vfill
  239. 1. âge entre 10 et 20
  240. 2. âge supérieur à 40
  241. #
  242. ```python
  243. i = 0
  244. while i < 3:
  245. i = i + 1
  246. print(i)
  247. ```
  248. \vfill
  249. 1. 2
  250. 2. 3
  251. #
  252. ```python
  253. i = 0
  254. while True:
  255. i = i + 1
  256. if i >= 3:
  257. break
  258. print(i)
  259. ```
  260. \vfill
  261. 1. 1
  262. 2. 3
  263. #
  264. ```python
  265. def dire_bonjour():
  266. print("Bonjour")
  267. def dire_au_revoir():
  268. print("Au revoir")
  269. dire_bonjour()
  270. ```
  271. \vfill
  272. 1. Bonjour
  273. 2. Au revoir
  274. #
  275. ```python
  276. def dire_bonjour(prénom):
  277. print("Bonjour " + prénom )
  278. dire_bonjour("Alice")
  279. ```
  280. \vfill
  281. 1. Bonjour Alice
  282. 2. Au revoir Alice
  283. #
  284. ```python
  285. def ma_fonction(x, y):
  286. return x -y
  287. résultat = ma_fonction(2, 5)
  288. print(résultat)
  289. ```
  290. \vfill
  291. 1. 3
  292. 2. -3
  293. #
  294. ```python
  295. def ma_fonction(x, y):
  296. return x -y
  297. résultat = ma_fonction(y=2, x=5)
  298. print(résultat)
  299. ```
  300. \vfill
  301. 1. 3
  302. 2. -3
  303. #
  304. ```python
  305. def dire_bonjour(prénom, enthousiaste=False):
  306. message = "Bonjour " + prénom
  307. if enthousiaste:
  308. message += "!"
  309. print(message)
  310. dire_bonjour("Thomas", enthousiaste=True)
  311. ```
  312. \vfill
  313. 1. Bonjour Thomas
  314. 2. Bonjour Thomas!
  315. #
  316. ```python
  317. def dire_bonjour(prénom, enthousiaste=False):
  318. message = "Bonjour " + prénom
  319. if enthousiaste:
  320. message += "!"
  321. print(message)
  322. dire_bonjour("Thomas")
  323. ```
  324. \vfill
  325. 1. Bonjour Thomas
  326. 2. Bonjour Thomas!
  327. #
  328. ```python
  329. a = "un"
  330. b = "deux"
  331. c = "trois"
  332. print(a, b, c)
  333. ```
  334. \vfill
  335. 1. undeuxtrois
  336. 2. un deux trois
  337. #
  338. ```python
  339. a = "chauve"
  340. b = "souris"
  341. print(a, b, sep="-")
  342. ```
  343. \vfill
  344. 1. chauve-souris
  345. 2. chauve souris
  346. #
  347. ```python
  348. def ne_fait_rien():
  349. pass
  350. ne_fait_rien()
  351. ```
  352. \vfill
  353. 1. <rien>
  354. 2. ne_fait_rien
  355. #
  356. ```python
  357. def ne_renvoie_rien():
  358. a = 2
  359. b = 3
  360. c = a + b
  361. résultat = ne_renvoie_rien()
  362. print(résultat)
  363. ```
  364. \vfill
  365. 1. <rien>
  366. 2. None
  367. #
  368. ```python
  369. fruits = ["pomme", "poire"]
  370. print(len(fruits))
  371. ```
  372. \vfill
  373. 1. 1
  374. 2. 2
  375. #
  376. ```python
  377. fruits = ["pomme", "poire"]
  378. premier_fruit = fruits[0]
  379. print(premier_fruit)
  380. ```
  381. \vfill
  382. 1. pomme
  383. 2. poire
  384. #
  385. ```python
  386. prénoms = ["Alice", "Bob"]
  387. print("Alice" in prénoms)
  388. ```
  389. \vfill
  390. 1. True
  391. 2. False
  392. #
  393. ```python
  394. prénoms = ["Alice", "Bob"]
  395. print("Ève" not in prénoms)
  396. ```
  397. \vfill
  398. 1. True
  399. 2. False
  400. #
  401. ```python
  402. total = 0
  403. liste_de_nombres = [1, 2, 3]
  404. for élement in liste_de_nombres:
  405. total += élement
  406. print(total)
  407. ```
  408. \vfill
  409. 1. 0
  410. 2. 6
  411. #
  412. ```python
  413. prénoms = ["Alice", "Bob"]
  414. prénoms[1] = "Charlie"
  415. print(prénoms)
  416. ```
  417. \vfill
  418. 1. ['Alice', 'Bob', 'Charlie']
  419. 2. ['Alice', 'Charlie']
  420. #
  421. ```python
  422. scores = {"Alice": 5, "Bob": 4}
  423. score_d_alice = scores["Alice"]
  424. print(score_d_alice)
  425. ```
  426. \vfill
  427. 1. 5
  428. 2. 4
  429. #
  430. ```python
  431. scores = {"Alice": 5, "Bob": 4}
  432. scores["Alice"] = 6
  433. print(scores)
  434. ```
  435. 1. {'Alice': 6, 'Bob': 4}
  436. 2. {'Alice': 5, 'Bob': 4}
  437. \vfill
  438. #
  439. ```python
  440. scores = {"Alice": 5, "Bob": 4}
  441. scores["Charlie"] = 3
  442. print(scores)
  443. ```
  444. \vfill
  445. 1. {'Alice': 5, 'Bob': 4, 'Charlie': 3}
  446. 1. {'Alice': 5, 'Bob': 4}
  447. #
  448. ```python
  449. scores = {"Alice": 5, "Bob": 4}
  450. del scores["Alice"]
  451. print(scores)
  452. ```
  453. \vfill
  454. 1. {'Alice': 5, 'Bob': 4}
  455. 1. {'Bob': 4}
  456. #
  457. ```python
  458. score_max = 0
  459. scores = {"Alice": 5, "Bob": 6, "Charlie": 4}
  460. gagnant = None
  461. for prénom_du_joueur in scores:
  462. score_du_joueur = scores[prénom_du_joueur]
  463. if score_du_joueur >= score_max:
  464. score_max = score_du_joueur
  465. gagnant = prénom_du_joueur
  466. print("gagnant:", gagnant, "score:", score_max)
  467. ```
  468. \vfill
  469. 1. gagnant: Bob, score: 6
  470. 2. gagnant: Alice, score: 5
  471. #
  472. ```python
  473. mon_tuple = (42, 14)
  474. print(42 in mon_tuple)
  475. ```
  476. \vfill
  477. 1. True
  478. 2. False
  479. #
  480. ```python
  481. mon_tuple = (42, 14)
  482. print(len(mon_tuple))
  483. ```
  484. \vfill
  485. 1. 1
  486. 2. 2
  487. #
  488. ```python
  489. mon_tuple = (42,)
  490. print(len(mon_tuple))
  491. ```
  492. \vfill
  493. 1. 1
  494. 2. 2
  495. #
  496. ```python
  497. couple = ("Batman", "Robin")
  498. héros, side_kick = couple
  499. print(side_kick)
  500. ```
  501. \vfill
  502. 1. Batman
  503. 2. Robin
  504. #
  505. ```python
  506. def tire_carte():
  507. valeur = "10"
  508. couleur = "trèfle"
  509. return (valeur, couleur)
  510. v, c = tire_carte()
  511. print(v, "de", c)
  512. ```
  513. \vfill
  514. 1. 10 de trèfle
  515. 2. 5 de carreau
  516. #
  517. ```python
  518. class MaClasse:
  519. pass
  520. mon_instance = MaClasse()
  521. mon_instance.mon_attribut = 42
  522. print(mon_instance.mon_attribut)
  523. ```
  524. \vfill
  525. 1. 42
  526. 2. None
  527. #
  528. ```python
  529. class MaClasse:
  530. def ma_méthode(self):
  531. return 42
  532. mon_instance = MaClasse()
  533. print(mon_instance.ma_méthode())
  534. ```
  535. \vfill
  536. 1. 42
  537. 2. None
  538. #
  539. ```python
  540. class MaClasse:
  541. def __init__(self):
  542. self.mon_attribut = 42
  543. def affiche_mon_attribut(self):
  544. print(self.mon_attribut)
  545. mon_instance = MaClasse()
  546. mon_instance.affiche_mon_attribut()
  547. ```
  548. \vfill
  549. 1. 42
  550. 2. None
  551. #
  552. ```python
  553. class MaClasse:
  554. def méthode1(self):
  555. return 2
  556. def méthode2(self):
  557. return 3
  558. def grosse_méthode(self):
  559. résultat = self.méthode1() + self.méthode2()
  560. return résultat
  561. mon_instance = MaClasse()
  562. résultat = mon_instance.grosse_méthode()
  563. print(résultat)
  564. ```
  565. \vfill
  566. 1. 5
  567. 2. None
  568. #
  569. ```python
  570. class Chat:
  571. def __init__(self, nom):
  572. self.nom = nom
  573. chat = Chat("Monsieur Moustaches")
  574. print(chat.nom)
  575. ```
  576. \vfill
  577. 1. None
  578. 2. Monsieur Moustaches
  579. #
  580. ```python
  581. class Chat:
  582. def __init__(self, nom):
  583. self.nom = nom
  584. class Humain:
  585. def __init__(self, prénom):
  586. self.prénom = prénom
  587. def adopte(self, chat):
  588. print(self.prénom, "adopte", chat.nom)
  589. boule_de_poils = Chat("Boule de Poils")
  590. bernard = Humain("Bernard")
  591. bernard.adopte(boule_de_poils)
  592. ```
  593. \vfill
  594. 1. Bernard adopte Boule de Poils
  595. 2. Boule de Poils adopte Bernard
  596. #
  597. ```python
  598. class Chat:
  599. def __init__(self, nom):
  600. self.nom = nom
  601. def ronronne(self):
  602. print(self.nom, 'fait: "prrrrr"')
  603. def caresse(self):
  604. self.ronronne()
  605. boule_de_poils = Chat("Boule de poils")
  606. boule_de_poils.caresse()
  607. ```
  608. \vfill
  609. 1. rien
  610. 2. Boule de poils fait: "prrrrr"
  611. #
  612. ```python
  613. # Tous les enfants ont un chat!
  614. class Enfant:
  615. def __init__(self, prénom, chat):
  616. self.prénom = prénom
  617. self.chat = chat
  618. def console(self):
  619. self.chat.caresse()
  620. boule_de_poils = Chat("Boule de poils")
  621. alice = Enfant("Alice", boule_de_poils)
  622. alice.console()
  623. ```
  624. 1. rien
  625. 2. Boule de poils fait: "prrrrr"
  626. #
  627. \huge Atelier
  628. On va implémenter un pense bête en ligne de commande.
  629. # Consignes - 1
  630. * Le programme doit lancer une boucle interactive.
  631. * À chaque étape de la boucle, il faut afficher
  632. les choses à faire, par exemple:
  633. ```
  634. [ ] faire ceci
  635. [x] faire cela
  636. ```
  637. \vfill
  638. Ici, `faire ceci` est à faire, mais `faire cela` est fait.
  639. # Consignes - 2
  640. Ensuite, l'utilisateur peut enter des actions, déterminé
  641. par le premier caractère:
  642. ```
  643. > + faire un truc
  644. # ajoute un élément "faire un truc" à la liste
  645. > - 2
  646. # supprime le deuxième élement de la liste
  647. > x 1
  648. # marque le premier élément comme fait
  649. > o 3
  650. # marque le troisième élément comme non fait
  651. ```
  652. # Consignes - 3
  653. Exemple d'interaction:
  654. ```
  655. rien à faire pour le moment
  656. > + faire un premier truc
  657. 1 [ ] faire un premier truc
  658. > + faire autre chose
  659. 1 [ ] faire un premier truc
  660. 2 [ ] faire autre chose
  661. > x 1
  662. 1 [x] faire un premier truc
  663. 2 [ ] faire autre chose
  664. > x 2
  665. 1 [x] faire un premier truc
  666. 2 [x] faire autre chose
  667. ```
  668. # Squelette - 1
  669. Deux classes:
  670. ```python
  671. class ChoseÀFaire:
  672. def __init__(self, contenu, fait): ...
  673. class PenseBête:
  674. """ Contient une liste de choses à faire """
  675. def __init__(self):
  676. self.liste = []
  677. def ajouter(self, chose_à_faire): ...
  678. # Attention! les index commencent à 1
  679. def supprimer(self, index): ...
  680. def marquer_comme_fait(self, index): ...
  681. def marquer_comme_non_fait(self, index): ...
  682. ```
  683. # Squelette - 2
  684. Deux fonctions:
  685. ```python
  686. def parse(entrée_utilisateur):
  687. """" Retourne un tuple (action, argument)
  688. Par exemple:
  689. >>> parse("+ quelque chose")
  690. ("ajouter", "quelque chose")
  691. >>> parse("- 2")
  692. ("supprimer", 2)
  693. """
  694. def main():
  695. """" Boucle principale """
  696. ....
  697. ```