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-03.md 5.0 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. % Programmation avec Python (chapitre 3)
  2. % Dimitri Merejkowsky
  3. \centering
  4. Retours sur le chapitre 2
  5. #
  6. \centering
  7. Retour sur les listes
  8. # extend()
  9. Pour concaténer des listes:
  10. ```python
  11. >>> fruits = ["pomme", "banane"]
  12. >>> fruits.extend(["orange", "abricot"])
  13. >>> fruits
  14. ['pomme', 'banane', 'orange', 'abricot']
  15. ```
  16. \vfill
  17. Peut aussi s'écrire `+=`
  18. ```python
  19. >>> nombres = [1, 2]
  20. >>> nombres += [3, 4]
  21. >>> nombres
  22. [1, 2, 3, 4]
  23. ```
  24. # pop()
  25. `pop()` existe aussi pour les listes:
  26. \vfill
  27. ```python
  28. >>> fruits = ["pomme", "banane"]
  29. >>> fruits.pop() # Retourne l'élément
  30. 'pomme'
  31. >>> fruits # Et modifie la liste
  32. ["banane"]
  33. >>> vide = list()
  34. >>> vide.pop()
  35. IndexError
  36. ```
  37. # clear()
  38. Pour vider une liste:
  39. ```python
  40. >>> fruits = ["pomme", "banane"]
  41. >>> fruits.clear()
  42. >>> fruits
  43. []
  44. ```
  45. # index()
  46. Pour récupérer la position d'un élément:
  47. ```python
  48. >>> fruits = ["pomme", "banane"]
  49. >>> fruits.index("banane")
  50. >>> 1
  51. >>> fruits.index("citron")
  52. >> ValueError
  53. ```
  54. # count()
  55. Pour compter le nombre d'occurrences d'un élément
  56. ```python
  57. >>> fruits = ["pomme", "banane", "pomme", "poire"]
  58. >>> fruits.count("pomme")
  59. 2
  60. >>> fruits.count("poire")
  61. 1
  62. >>> fruits.count("citron")
  63. 0
  64. ```
  65. # sort()
  66. Pour trier une liste.
  67. \vfill
  68. * Par ordre naturel
  69. ```python
  70. >>> nombres = [2, 3, 1, 5]
  71. >>> nombres.sort()
  72. >>> nombres
  73. [1, 2, 3, 5]
  74. ```
  75. \vfill
  76. * Par ordre alphabétique
  77. ```python
  78. >>> mots = ["abeille", "faucon", "chat"]
  79. >>> mots.sort()
  80. ['abeille', 'chat', 'faucon']
  81. ```
  82. # Ordre lexicographique
  83. Pour chaque "liste-élément" on compare le premier élément.
  84. S'il y a égalité, on regarde le deuxième élément, etc:
  85. ```python
  86. >>> composite = [["chat", 1], ["abeille", 2], ["chat", 3]]
  87. >>> composite.sort()
  88. [['abeille', 2], ['chat', 1], ['chat', 3]]
  89. ```
  90. \vfill
  91. L'ordre alphabétique est l'ordre lexicographique pour les chaînes de caractères :)
  92. # Attention!
  93. ```python
  94. >>> mauvaise_liste = ["un", 2]
  95. >>> mauvaise_liste.sort()
  96. TypeError
  97. ```
  98. # Comparer autrement
  99. Trier les mots par leur taille
  100. * Avec l'argument `key`
  101. \vfill
  102. ```python
  103. def taille(mot):
  104. return len(mot)
  105. mots = ["chat", "abeille", "faucon"]
  106. mots.sort(key=taille)
  107. >>> mots
  108. ["chat", "faucon", "abeille"]
  109. ```
  110. # Lambda
  111. Sert définir une fonction sans utiliser `def`
  112. ```python
  113. >>> retourne_42 = lambda: 42 # pas d'argument
  114. >>> retourne_42()
  115. 42
  116. >>> ajoute_deux = lambda x: x + 2 # un seul argument
  117. >>> ajoute_deux(3)
  118. 5
  119. >>> multiplie = lambda x, y: x* y # deux arguments
  120. >>> multiplie(2, 3)
  121. 6
  122. ```
  123. Note: le corps de la fonction doit tenir en une seule ligne
  124. # Utilisation avec sort
  125. ```python
  126. >>> mots = ["chat", "abeille", "faucon"]
  127. >>> mots.sort(key=lambda x: len(x))
  128. >>> mots
  129. ["chat", "faucon", "abeille"]
  130. ```
  131. # Indexer des listes
  132. Rappel:
  133. ```python
  134. >>> lettres = ["a", "b", "c", "d", "e"]
  135. >>> lettres[0] # ça commence à zéro
  136. "a"
  137. >>> lettres[4]
  138. "e"
  139. ```
  140. Mais on peut aussi compter à l'envers:
  141. ```python
  142. >>> lettres[-1]
  143. "e"
  144. >>> lettres[-2]
  145. "d"
  146. ```
  147. # Trancher des listes
  148. Ou "faire des slices", ou "slicer".
  149. ```python
  150. >>> lettres = ["a", "b", "c", "d", "e"]
  151. >>> lettres[1:3] # début (inclus), fin (non-inclus)
  152. ['b', 'c']
  153. >>> lettres[:3] # début implicite
  154. ['a', 'b', 'c']
  155. >>> lettres[3:] # fin implicite
  156. ['d', 'e']
  157. >>> lettres[1:-2] # fin négative
  158. ['b', 'c']
  159. >>> lettres[:] # une copie
  160. ['a', 'b', 'c', 'd', 'e']
  161. ```
  162. #
  163. \centering
  164. Retour sur les strings
  165. # index() et count() marchent aussi
  166. ```python
  167. >>> message = "Bonjour, monde !"
  168. >>> message.index("B")
  169. 0
  170. >>> message.count("o")
  171. 3
  172. ```
  173. # Trancher des chaînes de caractères
  174. Ou slicer des strings:
  175. \vfill
  176. ```python
  177. >>> message = "Bonjour, monde !"
  178. >>> message[1:4]
  179. 'onj'
  180. >>> message[:7]
  181. 'Bonjour'
  182. >>> message[9:-2]
  183. 'monde'
  184. ```
  185. # Formater des chaînes de caractères
  186. Problème:
  187. \vfill
  188. ```python
  189. >>> nom = "Ford"
  190. >>> résultat = 42
  191. >>> message = "Bonjour, " + nom + ". "
  192. >>> message += "La réponse est: " + str(résultat) + "."
  193. >>> message
  194. 'Bonjour, Ford. La réponse est: 42.'
  195. ```
  196. \vfill
  197. Ce n'est pas très lisible!
  198. # format()
  199. Solution: utiliser un "template" et la méthode `format()`
  200. \vfill
  201. ```python
  202. >>> nom = "Ford"
  203. >>> résultat = 42
  204. >>> template = "Bonjour, {}. La réponse est: {}"
  205. >>> message = template.format(nom, résultat)
  206. >>> message
  207. 'Bonjour, Ford. La réponse est: 42.'
  208. ```
  209. # format() avancé
  210. On peut aussi nommer les remplacements:
  211. ```python
  212. template = "Bonjour, {nom}. La réponse est: {résultat}"
  213. template.format(nom="Ford", résultat=42)
  214. ```
  215. # format() avancé
  216. On peut aussi faire des alignements et du "padding":
  217. \vfill
  218. ```python
  219. template = "{name:>10}: {score:03}"
  220. print(template.format(name="Alice", score=42))
  221. print(template.format(name="Bob", score=5))
  222. ```
  223. ```
  224. Alice: 042
  225. Bob: 005
  226. ```
  227. # Explications
  228. Le texte dans les accolades après le `:` est un mini-langage de spécification de format:
  229. * `>10` signifie: "aligner a droite, taille maximale 10"
  230. * `03` signifie: "rajouter des zéros en début de nombre jusquà atteindre 3 chiffres".
  231. Plus de précisions dans la documentation:
  232. \url{https://docs.python.org/fr/3/library/string.html#format-specification-mini-language}.