teaching:progappchim:notions_fondamentales

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
teaching:progappchim:notions_fondamentales [2021/02/13 18:08] – [Variables locales et globales] villersdteaching:progappchim:notions_fondamentales [2022/12/05 22:53] (Version actuelle) – [Les ensembles] villersd
Ligne 73: Ligne 73:
  
 Les instruction if peuvent souvent être remplacées par une alternative plus lisible, plus générale. Cf. par exemple [[https://medium.com/swlh/3-alternatives-to-if-statements-to-make-your-python-code-more-readable-91a9991fb353|3 Alternatives to If Statements That Make your Code More Readable]] (Jonny Jackson, Medium, 24/09/2020) Les instruction if peuvent souvent être remplacées par une alternative plus lisible, plus générale. Cf. par exemple [[https://medium.com/swlh/3-alternatives-to-if-statements-to-make-your-python-code-more-readable-91a9991fb353|3 Alternatives to If Statements That Make your Code More Readable]] (Jonny Jackson, Medium, 24/09/2020)
 +
 +Dans quelques cas, il est intéressant d'écrire les instructions conditionnelles sur une seule ligne de code. //Cf.// [[https://towardsdatascience.com/python-if-else-statement-in-one-line-ternary-operator-explained-eca2be64b7cc|Python If-Else Statement in One Line — Ternary Operator Explained - Single-line conditionals in Python? Here’s when to and when NOT to use them]] Dario Radečić, Medium, 11/01/2022
 +
 +
  
 ==== Structures répétitives ==== ==== Structures répétitives ====
Ligne 95: Ligne 99:
   * [[https://medium.com/analytics-vidhya/looping-techniques-in-python-3bbf907b8dfa|Looping Techniques in Python - Let’s learn about looping techniques using functions like enumerate, zip, sorted, reversed in python]] Indhumathy Chelliah; Medium, 30/07/2020   * [[https://medium.com/analytics-vidhya/looping-techniques-in-python-3bbf907b8dfa|Looping Techniques in Python - Let’s learn about looping techniques using functions like enumerate, zip, sorted, reversed in python]] Indhumathy Chelliah; Medium, 30/07/2020
   * [[https://medium.com/better-programming/how-to-use-for-loops-better-in-python-1dfbc3d9e91f|How To Use For Loops Better in Python - A few functions that can improve your looping logic]] Yong Cui, Medium, Jan 8, 2020   * [[https://medium.com/better-programming/how-to-use-for-loops-better-in-python-1dfbc3d9e91f|How To Use For Loops Better in Python - A few functions that can improve your looping logic]] Yong Cui, Medium, Jan 8, 2020
 +  * [[https://medium.com/techtofreedom/the-art-of-writing-loops-in-python-68e9869e4ed4|The Art of Writing Loops in Python - Simple is better than complex]] Yang Zhou, Medium, 03/05/2021
 +  * [[https://towardsdatascience.com/the-art-of-speeding-up-python-loop-4970715717c|The Art of Speeding Up Python Loop]] Casey Cheng, Oct 2022, Towards Data Science
 +
  
 ---- ----
Ligne 201: Ligne 208:
 </code> </code>
  
-=== Applications à la détection de palindromes et anagrammes ===+=== Applications à la détection de palindromesanagrammes et pangrammes ===
  
  
Ligne 267: Ligne 274:
 </code> </code>
  
 +<code python  string_pangrammes-01.py>
 +#!/usr/bin/env python3
 +# -*- coding: utf-8 -*-
 +"""
 +Created on Mon May  9 11:54:40 2022
 +
 +@author: villersd
 +
 +Test d'une chaîne pour connaître le nombre de lettres de l'apahabet utilisées
 +et si elles le sont toutes (pangramme).
 +ref : https://fr.wikipedia.org/wiki/Pangramme
 +
 +"""
 +import string
 +print('ASCII letters : ', string.ascii_lowercase)
 +
 +# test string :
 +ts = "Portez ce vieux whisky au juge blond qui fume"
 +
 +# dict count strategy
 +letter_count_dict = dict( (key, ts.lower().count(key)) for key in string.ascii_lowercase )
 +print(letter_count_dict)
 +
 +# list count strategy
 +letter_count_list = [ts.lower().count(key) for key in string.ascii_lowercase]
 +print(letter_count_list)
 +
 +# using all()
 +print(all(letter_count_list))
 +
 +# one-liner : 
 +print(all([ts.lower().count(key) for key in string.ascii_lowercase]))
 +print("All ASCII letters : ", all(["Portez ce vieux whisky au juge blond qui fume".lower().count(key) for key in string.ascii_lowercase]))
 +</code>
 +
 +Pour une technique de détection utilisant les nombres premiers : [[https://mobile.twitter.com/fermatslibrary/status/1385957963429515266]] (programmer et comparer !)
 +
 +=== Chaînes préfixées ===
 +Les chaînes pêuvent être préfixées, pour tenir compte de types et d'utilisations particulières :
 +
 +^Prefix  ^Utilisation  ^Exemple  ^
 +|None  |chaîne de caractère habituelle  |"Hello world !"  |
 +|r  |raw string (utilisant plusieurs caractères \ s'échappement)  |print(r"C:\Users\johndoe\documents" |
 +|b  |chaîne binaire  |b"byte string"  |
 +|u  |chaîne unicode  |u"Unicode string"  |
 +|f  |chaîne de formatage fstring  |print(f"My cool string is called {name.upper()}." |
  
 === Références === === Références ===
Ligne 286: Ligne 339:
   * [[https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not|les opérateurs booléens]]   * [[https://docs.python.org/3/library/stdtypes.html#boolean-operations-and-or-not|les opérateurs booléens]]
   * [[https://docs.python.org/3/library/stdtypes.html#comparisons|les opérateurs de comparaison]]   * [[https://docs.python.org/3/library/stdtypes.html#comparisons|les opérateurs de comparaison]]
 +    * Les 6 opérateurs ==, !=, <, >, <=, >= sont destinés à comparer des valeurs d'objets (cf. les instructions conditionnelles,...)
 +    * Les opérateurs **is** et **is not** sont destinés à comparer l'identité d'objets, en particulier des objets uniques (singletons) du langage, comme **None**
  
 ==== Les listes ==== ==== Les listes ====
Ligne 311: Ligne 366:
  
   * //range(start, stop, step)// avec des arguments entiers renvoie une liste d'entiers commençant par //start//, incrémentés chaque fois de la valeur //step//, jusque la valeur //stop// exclue. FIXME : → generator depuis python 3 !   * //range(start, stop, step)// avec des arguments entiers renvoie une liste d'entiers commençant par //start//, incrémentés chaque fois de la valeur //step//, jusque la valeur //stop// exclue. FIXME : → generator depuis python 3 !
-  * La fonction [[https://docs.python.org/2/library/functions.html#enumerate|enumerate]] permet de parcourir les éléments d'une liste en même temps que leur indice, bien plus pratiquement qu'en passant par l'utilisation de range : +  * **La fonction [[https://docs.python.org/2/library/functions.html#enumerate|enumerate]] permet de parcourir les éléments d'une liste en même temps que leur indice, bien plus pratiquement qu'en passant par l'utilisation de range** 
  
 <code python> <code python>
Ligne 335: Ligne 390:
   * [[https://www.datacamp.com/community/tutorials/python-list-comprehension|Python List Comprehension Tutorial]]   * [[https://www.datacamp.com/community/tutorials/python-list-comprehension|Python List Comprehension Tutorial]]
   * list comprehension,... : [[https://tgits.github.io/post/notes_apprentissage_python_comprehension/|Notes d'apprentissage de Python : les compréhensions]]   * list comprehension,... : [[https://tgits.github.io/post/notes_apprentissage_python_comprehension/|Notes d'apprentissage de Python : les compréhensions]]
 +  * [[https://towardsdatascience.com/reverse-python-list-ad10ad408021|How To Reverse Python Lists More Efficiently - Efficient reversal of lists in Python]] Giorgos Myrianthous, Medium, 07/10/2022
 +
  
 ==== Les tuples ==== ==== Les tuples ====
Ligne 393: Ligne 450:
 </code> </code>
  
 +Références complémentaires :
 +  * [[https://stackoverflow.com/questions/2541752/best-way-to-find-the-intersection-of-multiple-sets|Best way to find the intersection of multiple sets?]]
 ==== D'autres types ==== ==== D'autres types ====
 Des types "haute-performance" sont aussi intégrés à Python, via le module "collections" à importer : Des types "haute-performance" sont aussi intégrés à Python, via le module "collections" à importer :
Ligne 410: Ligne 469:
     * [[https://levelup.gitconnected.com/introducing-high-performance-datatypes-in-python-with-the-collections-library-3d8c334827a5|Introducing high-performance datatypes in Python with the collections library]] George Seif, Medium, Oct 15, 2019     * [[https://levelup.gitconnected.com/introducing-high-performance-datatypes-in-python-with-the-collections-library-3d8c334827a5|Introducing high-performance datatypes in Python with the collections library]] George Seif, Medium, Oct 15, 2019
     * [[https://medium.com/better-programming/your-one-stop-guide-to-collections-in-python-4c0b36243561|Your One-Stop Guide to Collections in Python - Make your code awesome using high-order containers]] Felix Antony, Medium, 21/01/2021     * [[https://medium.com/better-programming/your-one-stop-guide-to-collections-in-python-4c0b36243561|Your One-Stop Guide to Collections in Python - Make your code awesome using high-order containers]] Felix Antony, Medium, 21/01/2021
 +    * [[https://towardsdatascience.com/write-ultra-concise-code-with-python-collections-ab79f03bb54|Write Ultra-Concise Code with Python collections | by Thomas Hikaru Clark | Oct, 2021 | Towards Data Science]] Thomas Hikaru Clark, Medium, 11/10/2021
 +
  
 Des types non intégrés par défaut dans Python peuvent facilement être implémentés, en utilisant les types répandus. C'est pas exemple le cas des [[https://fr.wikipedia.org/wiki/Arbre_enracin%C3%A9|arbres]] (informatique, théorie des graphes) : Des types non intégrés par défaut dans Python peuvent facilement être implémentés, en utilisant les types répandus. C'est pas exemple le cas des [[https://fr.wikipedia.org/wiki/Arbre_enracin%C3%A9|arbres]] (informatique, théorie des graphes) :
Ligne 562: Ligne 623:
   * Les arguments d'une fonction peuvent être transmis via un tuple en préfixant le nom du tuple par le symbole * (on utilise en général l'identifiant "*args" pour le tuple)   * Les arguments d'une fonction peuvent être transmis via un tuple en préfixant le nom du tuple par le symbole * (on utilise en général l'identifiant "*args" pour le tuple)
   * Les arguments d'une fonction peuvent être transmis via un dictionnaire dont les clés correspondent aux arguments nommés dans la définition de la fonction, en préfixant le nom du dictionnaire par les %%**%% (on utilise en général l'identifiant "%%**%%kwargs" pour le dictionnaire)   * Les arguments d'une fonction peuvent être transmis via un dictionnaire dont les clés correspondent aux arguments nommés dans la définition de la fonction, en préfixant le nom du dictionnaire par les %%**%% (on utilise en général l'identifiant "%%**%%kwargs" pour le dictionnaire)
 +  * cf. [[https://towardsdatascience.com/args-kwargs-python-d9c71b220970|*args and **kwargs in Python - Discussing the difference between positional and keyword arguments and how to use *args and **kwargs in Python]] Giorgos Myrianthous, Towards Data Science, Jun 22 2022
  
 === Passage par tuple === === Passage par tuple ===
Ligne 635: Ligne 697:
   * [[https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html|The Definitive Guide to Python import Statements]]   * [[https://chrisyeh96.github.io/2017/08/08/definitive-guide-python-imports.html|The Definitive Guide to Python import Statements]]
   * [[https://realpython.com/absolute-vs-relative-python-imports/|Absolute vs Relative Imports in Python]]   * [[https://realpython.com/absolute-vs-relative-python-imports/|Absolute vs Relative Imports in Python]]
 +  * [[https://medium.com/dev-genius/importing-packages-in-python-fb3f4a64ed14|Importing Packages in Python - Exploring different ways to import packages in Python]] Indhumathy Chelliah, Medium, Oct 24, 2020
 +  * [[https://medium.com/techtofreedom/3-key-skills-for-handling-modules-in-python-d644c5e5682|3 Key Skills for Handling Modules in Python]] by Yang Zhou, TechToFreedom, Mar, 2021, Medium
 +
   * ...   * ...
  
Ligne 682: Ligne 747:
 → [[print_format|Impressions avec la méthode .print()]] → [[print_format|Impressions avec la méthode .print()]]
  
-FIXME : cf. [[https://datawhatnow.com/things-you-are-probably-not-using-in-python-3-but-should/]] (f-strings vs format)+FIXME **intégrer f-string !**: cf.  
 +  * [[https://datawhatnow.com/things-you-are-probably-not-using-in-python-3-but-should/]] (f-strings vs format) 
 +  * [[https://python.plainenglish.io/become-a-master-of-string-formatting-in-python3-252334a8269a|Become a Master of String Formatting in Python3]] by Maxence LQ, Python in Plain English, 25/05/2021 
  
 Références : Références :
Ligne 701: Ligne 769:
 Une fois l'utilisation achevée du fichier, il est important de fermer le fichier par la commande "f.close()" des erreurs peuvent subvenir sur le système de fichier si ce n'est pas fait correctement pour les fichiers en écriture surtout. Une fois l'utilisation achevée du fichier, il est important de fermer le fichier par la commande "f.close()" des erreurs peuvent subvenir sur le système de fichier si ce n'est pas fait correctement pour les fichiers en écriture surtout.
  
-Il est recommandé d'ouvrir le fichier en utilisant la commande "with", qui garantit la fermeture du fichier après exécution du code indenté, même en cas d'erreur : +**Il est recommandé d'ouvrir le fichier en utilisant la commande "with", qui garantit la fermeture du fichier après exécution du code indenté, même en cas d'erreur** 
  
 <code python> <code python>
Ligne 714: Ligne 782:
   * [[https://medium.com/better-programming/a-cheat-sheet-on-reading-and-writing-files-in-python-e78297adf413|A Cheat Sheet on Reading and Writing Files in Python - Quick reference on how to read and write files]] Yong Cui, Medium, 13/01/2020   * [[https://medium.com/better-programming/a-cheat-sheet-on-reading-and-writing-files-in-python-e78297adf413|A Cheat Sheet on Reading and Writing Files in Python - Quick reference on how to read and write files]] Yong Cui, Medium, 13/01/2020
   * [[https://medium.com/techtofreedom/file-handling-in-python-daee4586a64|File Handling in Python]] Yang Zhou, Medium, 25/04/2020   * [[https://medium.com/techtofreedom/file-handling-in-python-daee4586a64|File Handling in Python]] Yang Zhou, Medium, 25/04/2020
 +  * [[https://medium.com/code-85/how-to-read-and-write-files-in-python-b2ca7bb2c3f6|How To Read and Write Files in Python - A beginner’s guide to file I/O]] Jonathan Hsu, Medium, Apr 18, 2020
  
  
Ligne 722: Ligne 791:
   * Try ... Except :   * Try ... Except :
     * [[https://medium.com/better-programming/how-to-start-using-try-statements-in-python-5043fe69058d]]     * [[https://medium.com/better-programming/how-to-start-using-try-statements-in-python-5043fe69058d]]
 +    * [[https://medium.com/@niklas_lang/exception-handling-in-python-8cc8f69f16ad|Exception Handling in Python. Understanding how to use Python Try… ]] by Niklas Lang, October 2022, Towards Data Science
   * https://realpython.com/python-keyerror/   * https://realpython.com/python-keyerror/
   * ...   * ...
Ligne 740: Ligne 810:
 </code> </code>
  
-Les mots-clés du langage n'utilisent que les caractères du jeu historique ASCII. Un programme Python peut utiliser des chaînes de caractère utilisant un codage sur plus d'un octet (unicode). Python 3 utilisant des techniques différentes de Python 2 pour cela, et vu l'obsolescence progressive de cette dernière branche, les traitements particuliers de codage/décodage ne seront pas explicités. Sinon, //cf.// [[http://www.pythoncentral.io/python-unicode-encode-decode-strings-python-2x/|cette référence]].+Les mots-clés du langage n'utilisent que les caractères du jeu historique ASCII. Un programme Python peut utiliser des chaînes de caractère utilisant un codage sur plus d'un octet (unicode). Python 3 utilisant des techniques différentes de Python 2 pour cela, et vu l'obsolescence de la branche 2, les traitements particuliers de codage/décodage ne seront pas explicités. 
 + 
 +==== Références ==== 
 + 
 +  * [[http://www.pythoncentral.io/python-unicode-encode-decode-strings-python-2x/]] (2013) 
 +  * [[https://realpython.com/courses/python-unicode/|Unicode in Python: Working With Character Encodings (9 Lessons)]], Real Python, Christopher Trudeau (2020) 
 + 
  
 ===== La complexité algorithmique ===== ===== La complexité algorithmique =====
Ligne 841: Ligne 918:
 ==== Conseils divers ==== ==== Conseils divers ====
   * [[https://levelup.gitconnected.com/10-python-tips-for-better-code-1bbffde3b44d|10 Python Tips For Better Code]] (Abhay Parashar, Medium, 17/12/2020)   * [[https://levelup.gitconnected.com/10-python-tips-for-better-code-1bbffde3b44d|10 Python Tips For Better Code]] (Abhay Parashar, Medium, 17/12/2020)
 +  * [[https://somacdivad.medium.com/3-tips-for-writing-pythonic-code-b090956a6107|3 Tips For Writing Pythonic Code]] David Amos, Medium, 17/03/2022
 +  * [[https://realpython.com/learning-paths/writing-pythonic-code/|Write More Pythonic Code - Learning Path ⋅ Skills: Best Practices, Writing Idiomatic Python]] (Real Python)
  • teaching/progappchim/notions_fondamentales.1613236126.txt.gz
  • Dernière modification : 2021/02/13 18:08
  • de villersd