Python - Apprendre à programmer en Python
Éditée le : 2020-12-20
A compter de la version 2021.01 tous les appels à
la bibliothèque use se feront par go.
Apprendre à programmer en Python
Notre propos est de voir rapidement et succinctement comment élaborer des programmes en Python
Parce que ...:
c'est à date (fin 2020) le language à la mode
c'est un language freeweare dès son origine
soutenu par une grande communauté
c'est un language interprété comme javascript ou visual basic
il est facile à debugger (interpréteur)
il est également possible de le pré-compiler comme java
il est possible de créer des programmes exécutables indépendant de votre installation Python, comme en visual basic
il est multi-plateforme, windows, unix, lunix, mac, os, android, iOS...
l'utilisation de bibliothèques spécifiques
reste toutefois nécessaire pour chaque environnement.
les scripts Python sont de plus en plus utilisés sur les serveurs web à l'instar de php
le langage est plutôt naturel, proche du langage humain, quoique!
il est possible d'y adjoindre de nombreuses bibliothèques et de créer ses propres bibliothèques.
...
Pouvoir rapidement et simplement programmer de petits utilitaires et les distribuer à nos amis.
Tout au long de cet article nous allons nous appuyer sur l'ancien site du zero, https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python
Le site de https://openclassrooms.com/fr se veut très pédagogique et nous guidera au travers multiples exemples sur la façon de programmer en Python.
Pour notre part notre objectif est de tester rapidement les possibilités d'un développement en Python.
Notre article ne cherche pas vraiment la pédagogie mais plutôt d'aller à l'essentiel pour mettre en place un environnement de travail avec Python.
Nous sommes sous windows 10
Python s'installe de maière classique une fois récupérer la dernière version sur le web
Lors de l'installation choisir personnalisé, ne pas accepter l'installation par défaut
Ceci pour 2 raisons
Une fois l'installation de Python terminée chercher dans votre ordinateur
un fichier cmd.exe, copier le, et coller sa copie dans le dossier d'installation
de Python
Ne pas couper coller le fichier cmd.exe ou coller un raccourci;
c'est bien une copie du fichier cmd.exe qu'il faut copier dans le dossier d'installation
de Python
Un fois ce cmd.exe copier dans le dossier d'installation de Python, lancer ce fichier depuis le dossier d'installation de Python.
cela ouvre une fenêtre Dos (console Dos) avec pour dossier par défaut votre dossier d'installation de Python (soit c:\Python pour nous)
Depuis cette fenêtre taper
puis
normalement la fenêtre vous répond en spécifiant
le numéro de version de Python si Python est effectivement installé
le numéro de version de pip si la bibliothèque pip est installée; elle est généralement fournie par défaut avec Python
Depuis le dossier d'installation de Python, pour mémoire pour nous c'est c:\Python
lancer une copie de cmd.exe que vous aurez préalablement copier dans ce dossier
Dans les exemples suivant theBibliotheque est le nom de la bibliothèque à installer, mettre à jour ou déinstaller
Ces codes suppose que Python soit installer avec la création d'une variable d'environnement, très fortement recommandé!
pip install theBibliotheque
pip install theBibliotheque -upgrade
pip uninstall theBibliotheque
Cette bibliothèque permet de générer un fichier exe à partir d'un fichier py, voire d'un fichier d'installation en msi
Pour installer la bibliothèque cx_freeze faire depuis votre console Dos
--upgrade
Pour vérifier que cx_Freeze est bien installé, faire
Si cx_Freeze est bien installé, vous obtiendrez le n° de version
Pour concevoir vos programmes sous Python vous avez accès à 2 types de console:
La bibliothèque wmi permet de gérer vos disques (disk dur ou USB, voire carte SD)sous Windows uniquement .
Pour les autres système d'exploitation il vous faudra une bibliothèque spécifique à chacun de ces système d'exploitation!
Pour tester son installation, lancer dans votre console Python ces quelques lignes:
Elle doit alors lors de son exécution le nom de votre sustème d'exploitation
Cette bibliothèque est une bibliothèque Graphique; elle permet de créer et gérer des fenêtres, menus, barres d'icone sous plusieurs OS
Pour tester son installation, depuis votre console msDos sous le dossier d'installation de Python (c:\Python\cmd.exe)
La bibliothèque pyperclip permet une gestion simplifiée du presse-papier (copier coller) en mode texte
Pour l'installer faire
Son utilisation reste des plus simple et permet de plus de tester son installation correcte.
Nous avons testé avec un tableur, fonctionne bien dans les 2 sens,
récupère la valeur texte du presse-papier
ou permet un
collage du presse-papier dans une cellule du texte; dito avec les éditeurs
de texte à notre disposition.
Pour autant cette bibliothèque ne permet pas à priori d'action graphique avec le presse-papier.
Comme son nom l'indique vous pourrez saisir dans ce module vos commandes.
Une fois ouvert ce module présente les lignes suivantes:
Vous devez saisir votre ligne de commande après les >>>
comme ceci:
Si vous appuyer sur entrée vous obtenez:
L'interpréteur de commande a écrit dans sa console le résultat de votre ligne de commande, à savoir hello
et attend une nouvelle instruction >>>
Ce dispositif est très pratique pour tester de petites lignes de commandes, mais il ne conviendra pas pour l'écriture d'un programme plus ambitieux
D'autre part il ne permet pas de sauvegarde du code source de votre programme.
Il n'est possible de copier coller les lignes de commande que une
par une; pas de coller de plusieurs lignes de commande simultanément.
Si vous l'ouvrez directement sans appel à un fichier *.py vous obtenez un fonctionnement identique à l'interpréteur de commande.
Pour modifier ce comportement:
Un peu fastidieux.
Vous pouvez via le bloc note de windows créer un fichier "essai.py"
et l'ouvrir dans la console IDLE,
ainsi vous arrivez directement à
l'étape 8 de notre précédente liste
cet éditeur fonctionne comme le bloc note de windows en plus puissant toutefois.
Dans son installation rechercher le fichier "shortcuts.xml"
voici notre fichier "shortcuts.xml"
Nous allons nous intéresser aux lignes relatives à Python à savoir:
<Command name="---Python-------" Ctrl="yes" Alt="yes" Shift="yes" Key="">""</Command>
<Command name="Launch in Python" Ctrl="yes" Alt="yes" Shift="yes" Key="80">powershell.exe -noexit -command . \"$(FULL_CURRENT_PATH)\"</Command>
<Command name="Launch in Python B" Ctrl="yes" Alt="yes" Shift="yes" Key="80">"$(FULL_CURRENT_PATH)"</Command>
<Command name="Console IDLE Python" Ctrl="yes" Alt="yes" Shift="yes" Key="67">C:\Python\pythonw.exe "C:\Python\Lib\idlelib\idle.pyw" "$(FULL_CURRENT_PATH)" </Command>
<Command name="Console IDLE Python PowerShell" Ctrl="yes" Alt="yes" Shift="yes" Key="67">powershell.exe "C:\Python\Lib\idlelib\idle.pyw" "$(FULL_CURRENT_PATH)" </Command>
La première ligne ne sert à rien, juste à indiquer que les lignes suivantes concernent Python
la deuxième ligne "Launch in Python" lance notre fichier py en cours dans la console python
la troisième ligne "Launch in Python B" a le même
effet si py est associé au programme python
son action est donc identique
à un double click sur le fichier.py
la quatrième ligne "Console IDLE Python" ouvre la console
IDLE avec le fichier py en cours d'édition dans notepad++
le menu
run permet alors de l'éxécuter.
la 5ième ligne a le même effet que la 4ième, mais elle enregistre le fichier py avant l'appel de la console python IDLE
le principe est le suivant:
"$(FULL_CURRENT_PATH)" est une variable d'environnement de notepad++ qui fournit le chemin complet du fichier en cours d'édition sous notepad++
cette instruction est précédée du code appelant du programme à exécuter et auquel on doit transmettre le fichier en cours d'édition.
key est un code fournissant un raccourci clavier pour lancer cet ordre.
Le fichier shortcuts.xml vient modifier le menu Execution de notepad++ qui est configurable via ce biais.
Le fichier shortcuts.xml ne doit pas être modifier
avec notepad++, mais plutôt avec le bloc note de windows pour éviter
tout conflit.
En effet shortcuts.xml vient modifier les
menu de notepad++ !
Insérer ces lignes dans votre fichier shortcuts.xml
au
besoin modifier le code appelant du programme à exécuter
selon votre propre installation de Python
Vous pouvez vous aider des raccourcis
créés lors de l'installation de Python
Une fois ces modifications effectuées vous êtes prêt à
travailler avec Python et notepad++
Vous bénéficier ainsi de
la puissance de l'éditeur notepad++
Vous pouvez tester votre programme
py directement dans la console ou encore via la console IDLE (la 4ième
ligne ou 5ième ligne)
cette dernière option est la plus pertinente car elle permet
de modifier votre fichier py en cours de test et de récupérer
les modifications dans notepad++
avant de lancer votre fichier py dans la console Python,
penser à l'enregistrer.
Sous Notepad++ aller dans le menu "Modules d'extension", puis "gestionnaire des modules d'extension"
aller dans l'onglet disponible
Installer le module "AutoSave"
Puis revenir dans le menu "Modules d'extension", AutoSave apparaît dans ce menu, cliquez sur ces options et cocher la case "Notepadd++loses focus"
sélectionner "current file only"...
Pour Python il est recommandé de remplacer les tabulations par des espaces (4 espaces pour une tabulation)
Pour ce faire aller dans le menu "Paramètres", puis le sous menu "Préférences"
Vérifier que à droite dans la partie Tabulation, Python soit bien avec Taille:4 et insérer des espaces.
une fois votre fichier shortcuts.xml modifier, enregistrer le et fermer notepad; reouvrez notepad++
avant de lancer votre fichier py dans la console Python,
penser à l'enregistrer.
Si vous lancer la
console IDLE, vous pouvez modifier directement votre fichier py
et retrouver
ces modifications dans notepad++
Même si cette méthode demande plus de préparation suite
à la modification du fichier shortcuts.xml
cette
méthode est ensuite la plus rapide et la plus puissante
Nous préconisons donc l'utilisation de notepad++
En fait ces précautions ne sont pas spécifiques à notepad++, mais à tous les éditeurs de textes externes ainsi qu'à la console Python.
La console IDLE ouvre le fichier py et permet de le lancer.
Par contre un double click sur un fichier py appelle la console Python, et non pas la console IDLE
le fichier est alors instantanément exécuté lors de ce double click.
ceci peut être très rapide et la console python se ferme sans que l'utilisateur ne voit quoi que ce soit.
Pour éviter ceci nous pouvons par exemple demander à notre programme de marquer une pause
Pour cela il faut utiliser par exemple:
ou encore demande à l'utilisateur de compléter une saisie via une boite de dialogue.
Ces quelques lignes vont constituer un squelette de base pour nos futurs fichiers Python.
Elles tiennent compte de nos précédentes remarques.
En bleu une description du rôle de ce fichier Python, les fonctions intégrées... En fait c'est un commentaire d'un type particulier.
en rouge l'encodage des caractères accentués
en rose les imports des bibliothèques
en noir vos lignes de commandes
en vert la mise en pause du programme qui demande l'appui sur une lettre
pour continuer,
ce qui vous laisse le temps de visualiser le résultat
de votre code
en orange et commençant par # les commentaires
Ces lignes seront la base de notre fichier Trame.py
Python permet de créer un fichier.exe sous windows ou tout autre exécutable sous unix...
Pour cela il faut utiliser la bibliothèque cxfreeze
Ensuite dans votre dossier de travail, celui qui contient vos fichiers.py, copier coller un fichier cmd.exe
lancer ce fichier cmd.exe depuis votre dossier de travail
Nous avons plusieurs options pour générer un exe
Pour tester tout cela Download exemaker.7z
Ce zip contient tous les fichiers nécessaires au test, notamment le fichier setup.py qui permet
partie entière d'une division: 10//3 =>3
modulo, reste d'une division: 10%3 => 1 et non pas 0,33...; en fait 10 = 3*3 +1; reste donc 1
échapement du caractère ' ou "
v = 'j\'aime'
v
= "je cite \"vous êtes...\" dans ce texte"
l'échappement
se fait via un anti-slash ALTGR+8 \
Permutation de variables
a,b = b,a # a prend la valeur de b et
inversement
x=y=3 # affecte la valeur 3 à x et à y
écriture d'une variable sur plusieurs lignes
a + b \
+
c => a+b+c avec un anti-slash pour sauter à la ligne suivante
Type d'une variable
type(a) => int, float, str
Conditions
if a>0:
#
elif a = 0: #
on peut mettre plusieurs elif
#
else:
# sera toujours en fin de
condition, équivallent à default value en quelque sorte!
opérateurs de comparaison
<; >; <=; >=; ==;
!=
= est une affectation de valeur; == est une comparaison entre 2 valeurs
comme en javascript
Booleen True False toujours
la première lettre en majuscule; autrement erreur python
opérateurs and; or; not; is not
a >= 2
and a <= 8 signifie que a appartient à l'intervalle [2, 8]
a <
2 or a > 8 signifie que a n'appartient pas à l'intervalle [2, 8]
not
a = 5 est équivallent à a != 5 # soit si a différent de
5; on préfère la dernière écriture qui s'adapte
mieux à certains type de variables, donc a != 5 de préférence
majeur
is not True # littéralement la variable nommée majeur n'est pas
vraie, ne contient pas vrai, son résultat n'est pas vrai, donc est False
demander une saisie utilisateur
a = input("faite
votre saisie")
a sera toujours de type str; donc type(a) => str
Transformer le type d'une variable exemple type str en int
ou float
a = input("faite votre saisie") # on saisie 5
a = int(a)
# pour obtenir le nombre entier 5
Les boucles en python
la boucle while
...
i = 0
while i<= 10:
#
i
+=1 # incrémenter i de 1 à chaque passage dans la boucle
Il faut penser à incrémenter (faire varier) la valeur de
i pour ne pas tomber dans une boucle infinie!
On peut aussi utiliser les
mot clef break et continue dans une boucle while
Boucle
while et mot clef break en python
while 1: # 1 est toujours vrai -> boucle infinie
lettre = input("Tapez 'Q' pour quitter : ")
if lettre == "Q":
print("Fin de la boucle")
break
break
mais fin à la boucle
Le mot-clé break arrête une boucle quelle que soit la condition de la boucle.
Python sort immédiatement de la boucle et
exécute le code qui suit la boucle, s'il y en a.
Boucle while et mot clef continue en python
i = 1
while i < 20: # Tant que i est inférieure à 20
if i % 3 == 0:
i += 4 # On ajoute 4 à i
print("On incrémente i de 4. i est maintenant égale à", i)
continue # On retourne au while sans exécuter les autres
lignes
Partie 1 :
print("La variable i =", i)
i += 1 # Dans le cas classique on ajoute juste 1 à i
Le mot-clé continue permet de
poursuivre une boucle, en repartant directement à la ligne du while ou
du for.
la boucle for in elts
chaine =
"une lettre"
for lettre in chaine:
print(lettre)
Définir une fonction en python
Méthode classique
avec def fonction
def maFonction(param, param2="vous"):
# "vous" est la valeur par défaut de param2, donc si param2
est omis, param2 vaut "vous"
print(param)
return
param2
maVariable= maFonction("bonjour", "toi") #
maVariable contient "toi"
nous aurions pu écrire également
maVariable
= maFonction(param="bonjour", param2="toi") #définit
le / les paramètres directement dans l'appel de la fonction!
L'instruction return signifie qu'on va retourner la valeur, pour pouvoir
la stocker dans une variable.
return arrête le déroulement de la fonction, le code situé après le return ne s'exécutera pas.
Avec return, on peut retourner plusieurs valeurs que l'on sépare par des virgules;
on
peut capturer ces valeurs dans des variables
également séparées par des virgules!
Autre solution
pour définir une fonction, plus compacte, lambda, mais moins
souple au niveau des options
myFonction = lambda x,
y : x*x # retourne le carré
de x
myFonction(4) # retourne 16
Python distingue 2 types d'écriture de commentaires et 4 significations
pour ces commentaires;
la 3ième signification correspond à
l'emploi sous Python de la commande help()
la 4ième
forme permet curieusement de définir le codage des caractères
accentués
les 2 types d'écriture sont:
""" commentaires """
# commentaires
Considérons le code suivant
Nous avons marqué en orange tous les commentaires quelque soit leur type d'écriture
# permet d'écrire un commentaire sur une ligne ou après une ligne de commande, venant ainsi documenter cette ligne de commande
""" ... """ permet d'écrire des commentaires sur plusieurs lignes
En fait l'aide est le premier commentaire du fichier ou de la fonction
écrit entre les guillemets
avant toute lignes de code
exemples:
""" help for file a help texte """ import claudecnx.useIt2021_01 as go # module externe de claudecnx; namespace = go import itertools # module interne, voir <class 'generator'> |
Aide sur un fichier.py appel avec: help("fichier") # aide sur le "fichier.py" |
""" module externe de claudecnx D:\\python\\ExemplesPython\\use_it\\go_2021_01.py
Python 3 suppose que votre code source - c'est-à-dire chaque fichier .py - est encodé en UTF-8 par défaut """ import os # module interne; os.system("pause") import collections.abc # module interne, collections.abc.Iterable |
Aide sur un fichier.py importé help(go)
ou directement sur le fichier help("claudecnx.useIt2021_01") # aide sur un fichier.py contenu dans un sous-dossier |
def isIterable(elt): # indique si un elt est iterable, enumerable; as booleen """ help() pour isIterable() hors de ce module: help(go.isIterable) # go as namespace :param elt: indique si un elt est iterable, enumerable; as booleen True or False import collections.abc # module interne, collections.abc.Iterable """ if isinstance(elt, collections.abc.Iterable): |
Aide sur une fonction Aide sur une fonction dans le fichier importé comme namespace help(go.isIterable) ou directement depuis le fichier help("claudecnx.useIt2021_01.isIterable") # aide sur une fonction contenue dans le sous-dossier Dans le code du fichier faire help(isIterable) # depuis le code source du fichier contenant la fonction
|
Les textes en vert apparaîtront comme une aide lors de l'appel de help()
Pour appeler une aide sur un fichier, un module tapez la commande help("module") ou module est le nom du fichier sans son extension.
help("nom_du_fichier") # si votre fichier s'appelle "nom_du_fichier.py";
le nom du fichier sans son extension doit être passé as String
à la fonction help()
Vous verrez alors apparaître la documentation mise à disposition
par le programmeur située dans les premières lignes du fichier
sous
forme de commentaire
Dans notre cas il s'agit des lignes en gras, italique, souligné et orange en tête du fichier
seul le premier commentaire avant toute ligne de commande est pris en
compte par la commande help()
Ce commentaire peut être de la forme
""" commentaires """ ou # commentaires
La forme
""" commentaires
permet d'écrire sur plusieurs lignes
"""; mais le premier """ doit être impérativement
suivi d'une lettre pour être pris en compte par la commande help()
suggestions, prenez l'habitude
de mettre votre documentation dès la première ligne du fichier
sur plusieurs lignes, privilégier la forme """ commentaires
"""
Rappel: help() attend une String comme paramètre; cette String est le nom du fichier, du module sans son extension.
En language Python nous utiliserons indifféremment le terme module pour désigner un fichier python (extension py)
Lorsque par exmple vous utiliser la ligne
vous définissez pour le moduule additionnel importé un namespace, ici nommé go
Pour obtenir l'aide sur ce module externe faire
Ici on passe un object et non plus une String à help()
soit la fonction isIterable() définie dans un fichier.py importé via import claudecnx.fichier as go
claudecnx est le sous-dossier contenant le fichier.py
go est le nom du namespace attribué lors de l'import
help(go.isIterable) # aide sur la fonction isIterable
help("essai05_iterator_generator") # aide sur un fichier, ici essai05_iterator_generator.py help("claudecnx.useIt2021_01") # aide sur un fichier.py contenu dans un sous-dossier help(go.isIterable) # aide sur la fonction isIterable du namespace go help(go) # aide sur le namespace nommé go help("claudecnx.useIt2021_01.isIterable") # aide sur une fonction contenue dans le sous-dossier help(isIterable) # depuis le code source du fichier contenant la fonction |
help() peut aussi être intégrée dans votre code comme ceci
""" import claudecnx.useIt2021_01 as go # module externe de claudecnx; namespace = go def myf02(): # pour exemple help(myf02) # depuis le code du fichier tab = [1, 2, 3, 4, 5, 6, 7]
help("test_help") # aide sur un fichier, ici test_help.py help("claudecnx.useIt2021_01") # aide sur un fichier.py contenu dans un sous-dossier help(go.isIterable) # aide sur la fonction isIterable du namespace go help(go) # aide sur le namespace nommé go help("claudecnx.useIt2021_01.isIterable") # aide sur une fonction contenue dans le sous-dossier
""" |
Python permet une gestion relativement simple des bibliothèques.
Ces bibliothèques se présentent généralement sous forme de fichiers *.py
Dans tous les cas l'intégration, l'import d'une bibliothèque à votre programme sera identique.
le terme d'import permet d'ajouter une bibliothèque à votre programme, de la rendre disponible pour votre code.
il y a 2 manières de procéder à un import de bibliothèque externe à votre programme.
soit en écrivant
La première méthode importe toutes les fonctions de la bibliothèque.
La deuxième méthode offre la possibilité de n'importer qu'une seule fonction de la bibliothèque en procédant comme suit:
from os import system # ne va importer que la fonction system du module os
Avec la 2ième méthode on peut également écrire:
from os import * # importera toutes les fonctions du module os comme le fait l'expression import os
Le choix sur la manière d'importer vos bibliothèques n'est pas neutre sur l'écriture de la suite de votre code
import os # import de toutes les fonctions de la bibliothèque python Operating System intégrée à Python
la fonction sera appelée comme suit
os.system("pause")
on fait donc obligatoirement référence à la bibliothèque suivi du nom de la fonction à appeler, le tout étant séparé par un point
from os import * # import de toutes les fonctions de la bibliothèque python Operating System intégrée à Python
la fonction sera appelée comme suit:
system("pause")
Avec la 2ième méthode on ne précise plus l'origine de la fonction.
Cela peut être pratique, code plus court, mais on risque également de ne plus savoir la provenance de la fonction ainsi ajoutée par la bibliothèque
Une bibliothèque est en fait un fichier Python *.py
Le concept de bibliothèque suppose un fichier maitre en Python
et un autre fichier Python qui contiendra les fonctions de notre bibliothèque
A ce stade nous avons un choix à faire en matière d'organisation de notre code
ici aussi ce choix aura un impact sur votre code et ce choix va dépendre également de votre manière d'importer les bibliothèques
Examinons le fichier maitre.py suivant, c'est lui qui importe nos bibliothèques
exemple de fichier biblio01.py
""" Module additionnel en Python
ajoute la fonction tableAddition(n, max) ou n est le nombre dont on souhaite voir la table d'addition max est la valeur à ajouter à n, par défaut de 1 à 10, peut être omis
ajoute la fonction tableMultiplication(n, max) ou n est le nombre dont on souhaite voir la table de multiplication max est la valeur à multiplier à n, par défaut de 1 à 10, peut être omis
encodage utf-8 """
# -*- coding: utf-8 -*-
import os
def tableAddition(nb, max=10): """Fonction affichant la table d'addition de nb de nb + 1 jusqu'à nb + max par défaut max vaut ici 10 """ i = 0 while i < max: print(nb, "+", i + 1, "=", (i + 1) + nb) i += 1
# test de la fonction tableAddition en local if __name__ == "__main__": tableAddition(4) os.system("pause")
def tableMultiplication(nb, max=10): """Fonction affichant la table de multiplication de nb nb * 1 jusqu'à nb * max par défaut max vaut ici 10 """ i = 0 while i < max: print(nb, "*", i + 1, "=", (i + 1) * nb) i += 1
# test de la fonction tableMultiplication en local if __name__ == "__main__": tableMultiplication(4) os.system("pause")
|
exemple de fichier Biblio/biblio02.py
""" fichiers de biblio Python dans un sous-dossier
ajoute la table de soustraction tableSoustraction(nb, max=10) où n est le nombre à soustraire max la valeur à soustraire de nb
encodage utf-8 """
# -*- coding: utf-8 -*-
import os # import des fonctions de la bibliothèque python Operating System intégrée à Python #import random # import fonctions hasard, aléatoire, intégrée à Python #import math # import fonctions mathématique intégrée à Python
# votre code ici def tableSoustraction(nb, max=10): """Fonction affichant la table de sosutraction de nb nb - 1 jusqu'à nb - max par défaut max vaut ici 10 """ i = 0 while i < max: print(nb, "-", i + 1, "=", nb - (i + 1) ) i += 1
# test de la fonction tableSoustraction en local if __name__ == "__main__": tableSoustraction(4) os.system("pause")
|
Examinons maintenant cette trame pour créer un fichier de bibliothèque
les lignes en rouge vous permettrons de tester votre fonction en local
sans
avoir à importer la bibliothèque dans un fichier maitre
mais
en l'exécutant directement dans la console Python ou la console IDLE
Python.
l'appel de la fonction se fera directement avec son nom quelque soit la position du fichier biblio.py par rapport à maitre.py
maFonction()
l'appel de la fonction fera apparaître l'arborescence de votre fichier biblio.py par rapport au fichier maitre.py
biblio.maFonction()
où biblio correspond au fichier biblio.py
Biblio.biblio.maFonction()
où Biblio est le nom du sous dossier en question
et biblio le nom
du fichier biblio.py
bien respecter les majuscules et minuscules (la casse) dans l'appel de vos fonctions
En
effet Python étant multi systèmes certains operating System respecte
la casse contrairement à Windows
Donc si vous voulez éviter des erreurs en fonction du système d'exploitation, il faut respecter la casse des dossiers, fichiers et bien sûr dans le nom de vos fonctions
Un fichier de bibliothèque est un fichier normal en Python
Toutefois si nous voulons tester directement une fonction de ce fichier cela peut se réserver un peu difficile
soit on crée un fichier maitre.py qui importe la bibliothèque et l'on teste la fonction dans le fichier maitre
mais nous avons aussi la possibilité de tester la dite fonction directement dans le fichier biblio.py
pour cela procéder comme suit
Pour tester localement vos fonctions, c'est à dire sans document maitre
il suffit de rajouter ces lignes (ici en rouge)
maFonction sera remplacé par le nom de la fonction à tester, pensez également à adapter les paramètres!
Ainsi vous pouvez tester vos fonctions de bibliothèque directement via la console (IDLE) Python
Python 3 suppose que votre code source est encodé en UTF-8
par défaut .
Pour les versions antérieures et ou pour éviter les erreurs avec les accents il est conseillé d'ajouter dans votre fichier la ligne
# -*- coding: utf8 -*-
Comme ceci
Pour autant sous Python version 3 nous n'avons pas détecté de problèmes avec les accents même si cette ligne est omise
que ce soit avec un caractère accentué dans le nom de la variable ou dans son contenu.
En fait Python 3 considère par défaut que l'encodage des caractères est utf-8
""" Gestion des caractères accentués sous Python sous python3 encodage utf-8 par défaut """ # -*- coding: utf-8 -*- import os # import des fonctions de la bibliothèque python Operating System intégrée à Python # votre code ici print("pour gérer les caractères accentués sous Python") print(" # -*- coding: utf-8 -*- ") os.system("pause") # propose une pause et demande d'appuyer sur n'importe qu'elle touche pour poursuivre.
|
Elles sont de plusieurs sortes, catégories
Les variables peuvent être de plusieurs types: str, int, float,bool, list, tuple, type ...
Pour connaître le type d'une variable faire:
pour obtenir cette information sous forme d'une String, de type str, écrire plutôt
Certaines variables sont Iterables, enumérables, comme les list, les tuples, les String ...
nous pouvons donc lister, énumérer leurs composants lors d'une itération
La manière la plus classique de réaliser cette itération est:
Ainsi "ma chaine" deviendra "m,a,c,h,a,i,n,e"
L'itération fonctionne pour les object de type list, tuple, String
via les itérations
il est possible dans de nombreux cas de convertir un type donné en une
String
Source inspiration
https://www.google.com/search?client=firefox-b-d&q=tuple+tjours+iterable%3F
http://sametmax.com/les-trucmuchables-en-python/
https://openclassrooms.com/forum/sujet/tuple-liste-dico-difference
le type string renvoie str lors d'un appel à type(variable); c'est une chaine de caractères
maChaine = "une chaine" # est de type str
le type str permet une utilisation avec la méthode print
print(machaine)
print(machaine + " est OK")
print(machaine, " est OK")
Apparemment la méthode print n'accepte que les types str, à l'exception du type bool
le type str est iterable; son itération renvoie chacune des lettres, une par une.
type(variable) renvoie int; c'est un entier
n=1 # est de type int
c'est l'absence de . indiquant une décimale qui détermine le type int ou float
ainsi
n=1 # est de type int
mais
n=1.0 # est de type float
pourtant la vleur est toujours 1!
sous python l'indicateur des décimales est toujours le point . système anglo saxon
n'est pas iterable
retourne une erreur avec print()
pour l'afficher avec print() il faut le convertir en str comme ceci
chaine = str(n) # où n est de type int
la fonction type() retourne float
n=1.0 # et de type float car il y a la présence du point . indicateur des décimales dans le système anglo saxon
n'est pas itérable
print() retourne une erreur avec le type float
conversion en str: chaine = str(n) # où n est un float
c'est un boolen, True, False; la fonction type() renvoie bool
sous python True et False commence toujours avec une majuscule, autrement erreur!
n'est pas itérable
print() fonctionne, bien que le type ne soit pas str (apparemment c'est la seule exception pour la méthode print() qui n'accepte que des str)
La conversion de bool vers int et inversement donne pour résultat
n'importe quel nombre transformé en bool donne True sauf 0 qui donne False; dito pour 0.0 qui donne aussi False, etc
True transformé en nombre donne 1
False transformé en nombre donne 0
c'est ce qui ressemble le plus à un tableau, à un array en javascript
déjà ressemblance dans sa forme, son écriture
le type list est itérable comme ceci:
print(list) retourne une erreur si on essaie de le concaténer avec un autre type; il faut le convertir en str par exemple; voir la méthode ci-dessus avec itération
Pour la conversion en str on peut aussi utilser:
Pour plus d'informations vous pouvez consulter
source inspiration
https://openclassrooms.com/fr/courses/1206331-utilisation-avancee-des-listes-en-python
https://python.doctor/page-apprendre-listes-list-tableaux-tableaux-liste-array-python-cours-debutant
############ convert list to str tab = [1, 2, 3, 4, 5, 6] # as list, type()
renvoie list separateur = ", " # ou encore chaine = "%s" % tab #
les crochets apparaissent dans la chaine de caractères ########## Conversion list <=> str chaine = "Olivier:ENGEL:Strasbourg" arr = list(chaine) arr = [i for i in chaine if i!=" "] separateur = ":" # c'est le séparateur
présent dans chaine! separateur = ":" # c'est le séparateur qui sera
appliqué dans chaine print(" avec '%s' % arr list =>str ", "%s" % arr ) # convert list to str |
l'expression str(e) for e in tab dans la fonction join() permet de traiter simultanément divers type de valeurs, de données par exemple de str et int
la variable separateur peut être constituée de plusieurs caractères
l'expression"%s" % tab fait également apparaître les crochets [] encadrants les valeurs du list
tab = [1, 2, 3, 4, 5, 6] # as list, type() renvoie list for x in tab: animaux = ['girafe', 'tigre', 'singe', 'souris'] for animal in animaux[1:3]:
for i in range(4):
for i in range(0,3):
for i, animal in enumerate(animaux):
|
################### Inversion du contenu d'un list print("###### Inversion du contenu d'un list") tab2 = list( reversed(tab) ) #
inversion avec création d'une nouvelle liste - <class
'list_reverseiterator'> # ou encore # ou encore |
Nous voyons ici plusieurs méthodes pour inverser les valeurs dans un list
newTab = tab[::-1] est la plus utilisée; elle ne modifie pas tab
newTab = list(reverse(tab)) retourne un nouvel object list; tab n'est pas
modifié;
reverse(tab) retourne lui un object list_reverseiterator
qui est iterable
tab.reverse() inverse la valeur de tab et retourne none, object NoneType
########## lier 2 itérables tab3 = list(zip('AZERTY', (100, 300, 600)))
# lier deux itérables |
Au passage nous noterons que l'expression zip() est de type zip et iterable
elle est facilement convertie en list via list( zip() )
############ trier un list print(" Trier un list") tab = ["b", "1", "3", "abc",
"2", "a", "c", "ab", "bc"] tab5 = sorted( tab ) #
tri et génère une nouvelle liste a = tab.sort() # tri
et modifie la list |
Plusieurs méthodes ici aussi
newTab = sorted(tab) retourne une nouvelle list triée, tab n'est
pas modifiée
toutes les valeurs doivent être de même type, autrement risque
d'erreurs
tab.sort() trie et modifie tab; la valeur retournée est none, <class 'NoneType'>
########### accès aux elt du list print("accés aux elt du list") tab = ["b", "1", "3", "abc",
"2", "a", "c", "ab", "bc"] print("avec tab[1] ", strC( tab[1] ) ) # l'index 1 soit la valeur "1" print("avec tab[-1] ", strC( tab[-1] ) ) # renvoie la dernière occurence, ici "bc"; -2 l'avant-dernière valeur; etc... print("avec tab[:] ", strC( tab[:] ) ) # Affiche toutes les occurences: ["b", "1", "3", "abc", "2", "a", "c", "ab", "bc"] print("avec tab[2:4] ", strC( tab[2:4] ) ) # affiche les elt entre les index 2 inclus et 4 exclu (index 3 inclu donc); ['3', 'abc'] print("avec tab[:4] ", strC( tab[:4] ) ) # de l'index 0 à 3 inclus ['b', '1', '3', 'abc'], soit les 4 premières valeurs print("avec tab[4:] ", strC( tab[4:] ) ) # de l'index 4 inclu juqu'à la fin du list; les 4 premières valeurs sont ignorées; ['2', 'a', 'c', 'ab', 'bc'] |
La aussi de multiples écritures sont possibles qui renvoient
tantôt un autre object list, cas où plusieurs elts sont retournés,
ou alors un object ou valeur unique
voir également les opérations sur les ensembles qui permettent des opérations comme l'union, l'intersection, la différence, le ou exclusif
############# ajout d'elt dans un object list print("#### ajout d'elt dans un object list") tab = [1, 2, 3, 4, 5, 6] # tab.append("fin") #
ajoute un elt à la fin tab.insert(0,'debut') #
ajoute "debut" à la position 0, soit en début
du list tab.insert(2,'c') #
ajoute "c" à l'index 2, soit en 3ième position tab.insert(tab.index('c')+1,'d') #
insère à la position index de la valeur +1 ####### somme multiplication print("## somme multiplication ") x = [1, 2, 3, 4] x.extend(y) # ajouter, concatener, agrandir
une liste avec une autre liste z = x + y # ajouter, concatener,
agrandir une liste avec une autre liste x = [1, 2] |
Plusieurs méthodes donc, append() ou insert()
append(valeur) ajoute en fin de list
insert(position, valeur) ajoute ou plutôt insère un elt à la position indiquée
noter également le mot clef index qui retourne la position d'une valeur dans le list
Pour mémoire l'index 0 est la première position dans le list
extend() ou + permettent d'additionner 2 object list pour en créer un 3ième
* permet de "multiplier" 2 object list entre eux
############# supprimer un elt print("#### supprimer un elt") tab = ['debut', 1, 'c', 'd', 2, 3, 4, 5, 6, 'fin'] tab.remove("d") #
supprime la première valeur "d" rencontrée del tab[2] # supprime
l'élément situé à l'index 2 (3ième
position donc) |
Plusieurs méthodes
remove(valeur) qui permet de supprimer la première occurrence valeur rencontrée
del tab(2) qui supprime l'élément, la valeur située ici à l'index2 soit en 3ième position dans tab
Attention les list commencent à la position 0; donc [2]
sera en réalité le 3ième elt
source d'inspiration:
https://openclassrooms.com/fr/courses/1206331-utilisation-avancee-des-listes-en-python
######## les ensembles (set) Union, Intersection,
Différence OU exclusif tab1 = [1, 2, 3, 4, 5, 6, "a", "b", "c"] #convert object list en object set print("avec ens1 & ens2 ", strC( ens1 & ens2 ) ) # {2, 3, 4, 'b', 'a'} Intersection, car ce sont les seuls à être en même temps dans ens1 et ens2 print("avec ens1 | ens3 ", strC( ens1 | ens3 ) ) # {1, 2, 3, 4, 5, 6, 'c', 7, 8, 9, 'b', 'a'}, les deux réunis, Union, OU Inclusif print("avec ens1 & ens3 ", strC( ens1 & ens3 ) ) # {6, 'a'}, même raison que deux lignes au dessus print("avec ens1 ^ ens3 ", strC( ens1 ^ ens3 ) ) # {1, 2, 3, 4, 5, 7, 8, 9, 'c', 'b'}, OU Exclusif, l'union moins les éléments communs print("avec ens1 - ens2 ", strC( ens1 - ens2 ) ) # {1, 'c', 5, 6}, on enlève les éléments de ens2, Différence ######### convert object set en object list ens = ens1 & ens2 # for test |
ici on utilise les object set pour faire des opérations sur les object list
en premier lieu il faut convertir un object list en object set
myset = set(mylist)
puis on peut traiter les opérations sur les ensembles comme l'union, l'intersection, la diffrénce ou exclusif
ces opérations nous donne un nouvel object set
pour le convertir en object list faire
mylist = list(myset)
nota: les object set tout comme les object list sont iterables
Obtenir toutes les combinaisons possibles des valeurs de 2 object list
########### Multiplexage object list from itertools import product tab1 = ['a', 'b'] tab3 = list( product(tab1,
tab2) ) # afficher tous les cas possibles
d'une liste elle-même composée de liste; Multiplexage |
les object itertools.product sont itérables
les object itertools.product se transforme facilement en object list
Permet de créer facilement un object list de depth, dimension 2
############## vérifier l'existence
d'une valeur tab = ["b", "a", "3", "abc",
"2", "a", "c", "a", "bc"] print( tab.count("a") ) # connaitre le nombre d'occurences d'une valeur dans une liste; donc il existe print( "a" in tab ) # savoir si un élément est dans une liste; renvoie True or False print( tab.index("a") ) # position de la valeur "a" dans le list; première occurrence rencontrée |
Plusieurs méthodes sont ici présentées
chacune
à sa manière permet de savoir si une valeur existe, est présente
dans l'object list
############### identifiant de l'object
list tab = ["b", "a", "3", "abc",
"2", "a", "c", "a", "bc"] print( id(tab) ) # identificateur unique de l'object tab: 2293464768768 |
############## nbr d'elts, de valeurs dans
un object list tab = ["b", "a", "3", "abc",
"2", "a", "c", "a", "bc"] n= len(tab) # nombre d'éléments
dans tab |
on peut réaliser soit une copie dépendante (toute modification de l'un des list impacte le 2nd et inversement)
ou des copies indépendantes, les modifications de l'un des object list ne se répercutent pas sur les autres object list.
########### copier un object list tab = ["b", "a", "3", "abc",
"2", "a", "c", "a", "bc"] tab8 = tab # copy
tab dans tab8 - c'est une copie dépendante tab9 = tab[:] #
copy indépendante de liste dans liste9 import copy #
module interne - copie indépendante |
Plusiers types de copies
une copie dépendante où toute modification de l'un des list impacte le 2ième
une copie indépendante, les modifications n'impacte que l'object list modifié
notez deepcopy() du module interne copy
permet de faire des copies indépendantes sur des object complexes
cette
fonction nécessite l'import du module interne copy
########### générer rapidement
un list r = range(10) # La fonction range génère
une liste composée d'une simple suite arithmétique. print("avec [0] * 5 ", strC([0] * 5 ) ) # [0, 0, 0, 0, 0] |
ce ne sont que des méthodes parmi d'autre.
# fonctions communes pour applicatif avec map ou filter ou reduce def carre(x): def carreOptionnel(x, opt=1): return x ** 2 # x ** 2 = x puissance 2; opt est optionnel de sorte que carreOptionnel(7) fonctionnera def petit_carre(x): return x ** 2 < 16 # nombres dont les carrés sont inférieurs à 16. def puissance(x, exponent): return x ** exponent def pair(x): return not bool(x % 2) def addition(x, y): return x + y def produit(x, y): return x * y def appcarre(element, liste): return liste + [element ** 2] # ne fonctionne pas avec reduce en Python version 3 ########### fonction qui exécute une autre fonction print("### fonction qui exécute une autre fonction") def appliquer_fonction(fonc, valeur): print( appliquer_fonction(carre, 3, 2) ) #
Affiche 9, c'est à dire mettre_au_carre(3) |
la fonction appliquer_fonction() telle quelle ne peut pas appeler addition()
en
effet addition() attend 2 paramètres.
Pour y remedier nous pourrions modifier appliquer_fonction() et carre() comme suit
########### fonction qui exécute une autre fonction print("### fonction qui exécute une autre fonction") def appliquer_fonction(fonc, valeur, opt=1): print( appliquer_fonction(carreOptionnel, 3, 2) ) # Affiche 9, c'est à dire mettre_au_carre(3) print( appliquer_fonction(addition, 5, 8) ) # affiche 13 |
Nous utilisons ici la possibilité de Python d'avoir des paramètres optionnel pour les fonctions.
Ce chapitre bien qu'ayant à priori peu à voir avec les
object list va nous permettre d'aborder
le concept des fonctions prototype
applicables aux object list
########### fonction prototype de map |
############ fonction prototype de filter |
########### fonction prototype de reduce |
########## application de map tab = [1, 2, 3, 4, 5] a_map = map(carre, tab) #
Affiche [1, 4, 9, 16, 25], c'est à dire le carré de
chaque élément print("avec map(pair, tab) ", strC( map(pair, tab) ) ) # Affiche [False, True, False, True, False], c'est à dire si le nombre est pair. print("avec mapProto(carre, tab) ", strC( mapProto(carre, tab) ) ) # Affiche [1, 4, 9, 16, 25], c'est à dire le carré de chaque élément print("avec mapProto(pair, tab) ", strC( mapProto(pair, tab) ) ) # Affiche [False, True, False, True, False], c'est à dire si le nombre est pair. |
Nous pouvons constater à l'éxécution du code que mapProto() et map() retourne bien les mêmes valeurs
########### application de filter tab = [1, 2, 3, 4, 5] a_filter = filter(petit_carre, tab)
# Affiche [1, 2, 3], c'est à
dire les nombres dont les carrés sont inférieurs à
16. print("avec filter(pair, tab) ", strC( filter(pair, tab) ) ) # Affiche [2, 4], c'est à dire les nombres pairs de la liste. print("avec filterProto(petit_carre, tab) ", strC( filterProto(petit_carre, tab) ) ) # Affiche [1, 2, 3], c'est à dire les nombres dont les carrés sont inférieurs à 16. print("avec filterProto(pair, tab) ", strC( filterProto(pair, tab) ) ) # Affiche [2, 4], c'est à dire les nombres pairs de la liste. |
Nous pouvons constater à l'éxécution du code que filterProto() et filter() retourne bien les mêmes valeurs
########## application de reduce from functools import reduce #
pour python 3 tab = [1, 2, 3] print("avec reduce(addition, tab, 0) ", strC( reduce(addition, tab, 0) ) ) # Équivaut à ((0 + 1) + 2) + 3 print("reduce(produit, tab, 1) ", strC( reduce(produit, tab, 1) ) ) # Équivaut à ((1 * 1) * 2) * 3 # print( reduce(appcarre,
[1, 2, 3], []) ) # Équivaut
à map(carre, [1, 2, 3]) ;) print("avec reduceProto(addition, tab, 0) ", strC( reduceProto(addition, tab, 0) ) ) # Équivaut à ((0 + 1) + 2) + 3 => 6 print("avec reduceProto(produit, tab, 1) ", strC( reduceProto(produit, tab, 1) ) ) # Équivaut à ((1 * 1) * 2) * 3 => 6 print("avec reduceProto(appcarre, tab, []) ", strC(
reduceProto(appcarre, tab, []) ) ) #
Équivaut à map(carre, [1, 2, 3]) ;) =>
[9, 4, 1] print( isWhat( reduce(addition, tab,
0) ) ) |
De nos essais il ressort que la fonction reduceProto() est plus "souple" et permissive que reduce
D'autre part reduce() nécessite l'import d'un module interne comme functools ou encore six.moves pour fonctionner
reduceProto() ne nécessite aucun module interne ou externe, la fonction se suffit à elle-même.
########### utilisation des list comprehensions
avec les object list print("### utilisation des list comprehensions avec les object list") tab = [1, 2, 3, 4, 5, 6, 7] print("Affiche les carrés des éléments") print("Affiche les nombres pairs") print("Affiche les carrés des nombres pairs (combinaison
des deux)") |
Ne nécessite pas d'import de module particulier, forme d'écriture
un peu plus compacte,
mais pas forcément plus facile à lire
Prenons la ligne de code suivante:
[x ** 2 for x in tab if x ** 2 % 2 == 0]
elles se lit de la façon suivante
x**2 Mettre x à la puissance 2 (donc x²)
for x in tab Nous indique les éléments x sur lesquels agir, ici tous les éléments de tab, tab est un object list
if x**2 %2 ==0 Spécifie
la condition, le filtre pour que x soit pris en compte dans la réponse;
ici x puissance 2 est pair
nous aurions pu également écrire
x % 2 == 0 comme condition ou filtre
En résumé:
opération, calcul, formule, sur x
définit ce qui est x, en général x est un elt de tab, object list
conditions ou filtre à appliquer, sur x ou le calcul effectué sur x, à préciser sur quoi porte le test .
liste 2ème partie - fonctions communes
""" tester les list [a, b] """ import claudecnx.useIt2021_01 as go # module externe claudecnx as namespace go import copy # module interne; copy.deepcopy()
obj01 = [1, 2, 3, 2.5, "a", "per"] obj02 = [1, 2, 3, 2.5] obj03 = ["a", "per"]
""" all()""" print(" all() ") bValeur = all(obj01) print( bValeur ) # True """ all() returns True if all elements of the set are true (or if the set is empty). """
""" any()""" print(" any() ")
bValeur = any( obj01 ) print( bValeur ) # True """ any() Returns True if any element of the set is true. If the set is empty, returns False. """
""" enumerate()""" print(" enumerate() ")
obj = enumerate(obj01)
print( type(obj) ) # <class 'enumerate'> print( go.typeIs(obj) ) # enumerate print( go.isWhat(obj) ) # {} est de type enumerate - iterable? True print( go.strc(obj) ) # {}
obj04 = copy.deepcopy(obj) print( type(obj) ) # <class 'enumerate'> print( obj ) # <enumerate object at 0x00000242929B5DC0> print("enumerate as dict ", dict(obj04) ) # {0: 1, 1: 2, 2: 3, 3: 'per', 4: 'a'}; vide obj02 obj04 = copy.deepcopy(obj) print("enumerate as list ", list(obj04) ) # [(0, 1), (1, 2), (2, 3), (3, 'a'), (4, 'per')]; # l'ordre reste aléatoire, vide obj """ enumerate() Returns an enumerate object. It contains the index and value for all the items of the set as a pair. attention l'application de list() ou dict() sur cet object enumerate vide cet objet il faut donc utiliser copy.deepcopy() pour obtenir une copie indépendante de l'objet enumerate need to import: import copy # module interne; copy.deepcopy() """
""" len() nombre d'éléments dans un object""" print(" len() nombre d'éléments dans un object")
print( len(obj01) ) # """ len() Returns the length (the number of items) in the set. """
""" max() le plus grand item""" print("max() le plus grand item")
print( max(obj02) ) # 3 print( max(obj03) ) # "per" try: print( max(obj01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished") """ max() Returns the largest item in the set. on ne peut pas mélanger des str avec des int """
""" min() le plus petit item""" print("min() le plus petit item")
print( min(obj02) ) # 1 print( min(obj03) ) # "a" try: print( min(obj01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished") """ min() Returns the smallest item in the set. on ne peut pas mélanger des str avec des int """
""" sorted()""" print(" sorted()")
list02 = sorted( obj02 ) print( list02 ) # [1, 2, 2.5, 3] list03 = sorted( obj03 ) print( list03 ) # ['a', 'per']
try: print( sorted(obj01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
""" sorted() Returns a new sorted list from elements in the set(does not sort the set itself). on ne peut pas mélanger des str avec des int ou float """
""" sum()""" print(" sum() ")
valeur02 = sum( obj02 ) print( valeur02 ) # 8.5
try: print( sum(obj03) ) # Something is not defined '>' Something is not defined unsupported operand type(s) for +: 'float' and 'str' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
try: print( sum(obj01) ) # Something is not defined '>' Something is not defined unsupported operand type(s) for +: 'float' and 'str' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
""" sum() Returns the sum of all elements in the set. on ne peut pas mélanger des str avec des int ou float; error ne sait pas faire une somme de str; error """
""" source inspiration https://www.programiz.com/python-programming/set """
|
Un tuple permet de créer une collection ordonnée de plusieurs éléments.
on ne peut pas modifier les tuples une fois qu’ils ont été créés; On dit qu’un tuple n’est pas mutable.
On le définit avec des parenthèses.
tp01 = (1,2,3)
mais on peut aussi écrire:
a, b = 1, 2
c'est équivallent à:
(a, b) = (1, 2)
tp01 = (10, 20)
x, y = tp01
implique que
x=10
y=20
""" tester les tuple tuple object n'est pas modifiable, immutable """ # import claudecnx.useIt2021_01 as go # module externe claudecnx as namespace go
tp01 = (3, 4, 7) """ print( type(tp01) ) # <class 'tuple'> print( go.typeIs(tp01) ) # tuple print( go.isWhat(tp01) ) # (3,4,7) est de type tuple - iterable? True print( go.strc(tp01) ) # (3,4,7) """ print() """ Créer un tuple - formes d'écriture""" print("Créer un tuple #formes d'écriture") tp01 = (3, 4, 7) tp02 = () tp03 = 1, 2, 3 # parenthèses non obligatoires, mais conseillées a, b = 100, 200 # affectation multiple print( type( (a, b) ) ) # <class 'tuple'> tp04 = (a, b) print ( type(tp04) ) # <class 'tuple'> tp05 = tuple(("apple", "banana", "cherry")) # tuple() Constructor - note the double round-brackets tp06 = ("abc", 34, True, 40.25, "chaine") # tuple with strings, integers, float and boolean
print() """ Récupérer, obtenir les valeurs du tuple""" tp01 = (10, 20) x, y = tp01 # renvoie le couple x, y qui contient les valeurs respectives du tuple print(x) print(y) print() """ Créer une fonction qui renvoie un tuple""" print("Créer une fonction qui renvoie un tuple") # Il suffit d’indiquer ce tuple après return. def test01(): return 3, 4 # retourne plusieurs valeurs as tuple lors de l'appel d'une fonction a, b = test01() # a et b contiennent les valeurs du tupe (a, b) retourné par la fonction tes01() print(a) print(b) print() """ Parcourir, Itérer sur les éléments d’un tuple""" print("Itérer sur les éléments d’un tuple") tp02 = (1,2,3,4,5,6) for i in tp02: print(i) """ Itérer sur les éléments d’un tuple 1 2 3 4 5 6 """ print() """ Obtenir la valeur d’un élément du tuple""" print("Obtenir la valeur d’un élément du tuple") print( tp02[2] ) # 3 on peut accèder à la valeur d'un élément du tuple via son indice; indice = 0 => premier elt du tuple print() """ Créer un tuple avec un seul élément""" print("Créer un tuple qui contient un seul élément ") tp03 = (5,) # il faut mettre la virgule après ce seul et unique argument print( type(tp03) ) # <class 'tuple'> """ Récupérer, Obtenir la valeur d'un tuple à 1 seul élément""" print("Récupérer la valeur dans un tuple à 1 seul élément") valeur = tp03[0] # avec son indice; comme un seul elt, indice = 0 print( valeur ) # 5 valeur, = tp03 print( valeur ) # 5 list01 = [5] v, = list01 # fonctionne aussi pour les list print ( v ) # 5 print( type(v) ) # <class 'int'> print( type(v,) ) # <class 'int'> print() """ Nombre d'éléments dans un tuple""" print("Nombre d'éléments dans un tuple") print( len( tp02) ) # 6
""" source inspiration https://courspython.com/tuple.html """
|
tuple 2ème partie - fonctions communes
""" tester les tuple (a, b) tuple object n'est pas modifiable, immutable """
import claudecnx.useIt2021_01 as go # module externe claudecnx as namespace go import copy # module interne; copy.deepcopy() obj01 = (1, 2, 3, 2.5, "a", "per") obj02 = (1, 2, 3, 2.5) obj03 = ("a", "per") """ all()""" print(" all() ") bValeur = all(obj01) print( bValeur ) # True """ all() returns True if all elements of the set are true (or if the set is empty). """
""" any()""" print(" any() ")
bValeur = any( obj01 ) print( bValeur ) # True """ any() Returns True if any element of the set is true. If the set is empty, returns False. """
""" enumerate()""" print(" enumerate() ")
obj = enumerate(obj01)
print( type(obj) ) # <class 'enumerate'> print( go.typeIs(obj) ) # enumerate print( go.isWhat(obj) ) # {} est de type enumerate - iterable? True print( go.strc(obj) ) # {}
obj04 = copy.deepcopy(obj) print( type(obj) ) # <class 'enumerate'> print( obj ) # <enumerate object at 0x00000242929B5DC0> print("enumerate as dict ", dict(obj04) ) # {0: 1, 1: 2, 2: 3, 3: 'per', 4: 'a'}; vide obj02 obj04 = copy.deepcopy(obj) print("enumerate as list ", list(obj04) ) # [(0, 1), (1, 2), (2, 3), (3, 'a'), (4, 'per')]; # l'ordre reste aléatoire, vide obj """ enumerate() Returns an enumerate object. It contains the index and value for all the items of the set as a pair. attention l'application de list() ou dict() sur cet object enumerate vide cet objet il faut donc utiliser copy.deepcopy() pour obtenir une copie indépendante de l'objet enumerate need to import: import copy # module interne; copy.deepcopy() """
""" len() nombre d'éléments dans un object""" print(" len() nombre d'éléments dans un object")
print( len(obj01) ) # """ len() Returns the length (the number of items) in the set. """
""" max() le plus grand item""" print("max() le plus grand item")
print( max(obj02) ) # 3 print( max(obj03) ) # "per" try: print( max(obj01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished") """ max() Returns the largest item in the set. on ne peut pas mélanger des str avec des int """
""" min() le plus petit item""" print("min() le plus petit item")
print( min(obj02) ) # 1 print( min(obj03) ) # "a" try: print( min(obj01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished") """ min() Returns the smallest item in the set. on ne peut pas mélanger des str avec des int """
""" sorted()""" print(" sorted()")
list02 = sorted( obj02 ) print( list02 ) # [1, 2, 2.5, 3] list03 = sorted( obj03 ) print( list03 ) # ['a', 'per']
try: print( sorted(obj01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
""" sorted() Returns a new sorted list from elements in the set(does not sort the set itself). on ne peut pas mélanger des str avec des int ou float """
""" sum()""" print(" sum() ") valeur02 = sum( obj02 ) print( valeur02 ) # 8.5
try: print( sum(obj03) ) # Something is not defined '>' Something is not defined unsupported operand type(s) for +: 'float' and 'str' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
try: print( sum(obj01) ) # Something is not defined '>' Something is not defined unsupported operand type(s) for +: 'float' and 'str' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
""" sum() Returns the sum of all elements in the purple on ne peut pas mélanger des str avec des int ou float; error ne sait pas faire une somme de str; error """
""" source inspiration https://www.programiz.com/python-programming/set """
|
les set() ou ensemble présente quelques avantages
Tous les principes sur la théorie des ensembles s'appliquent aux set(), union, intersection...
un set() ne contient pas de doublons,
chaque valeur est unique ;
tout
doublon est supprimé pour ne laisser qu'une seule valeur unique
Aussi pour obtenir les valeurs uniques d'un list par exemple il suffit de le transformer en set, puis de revenir au list
""" tester les set {a, b} set object n'est pas modifiable, immutable, unchangeable Once a set is created, you cannot change its items, but you can add new items set object n'est pas ordonné, on ne sait pas dans quel ordre apparaissent les éléments set object Duplicates Not Allowed, conséquence du fait que set n'est pas modifiable pas de doublons, chaque valeur est unique """ import claudecnx.useIt2021_01 as go # module externe claudecnx as namespace go import copy # module interne; copy.deepcopy() set01 = {"pomme", "banane", "cerise"} """ print( type(set01) ) # <class 'set'> print( go.typeIs(set01) ) # set print( go.isWhat(set01) ) # {'pomme', 'cerise', 'banane'} est de type set - iterable? True print( go.strc(set01) ) # {'pomme', 'cerise', 'banane'} """
""" Créer un set""" print("Créer un set") set01 = {"abc", 34, True, 40.25, "male", ("a", "b"), "chaine"}# les set acceptent de multiples types de données # list, dict ne sont pas admis comme elt dans un set print(set01) set02 = set(("apple", "banana", "cherry")) # set() Constructor - note the double round-brackets print(set02) set03 = set([1, 2, 3, 2]) # création depuis un list, transforme list en set print(set03) # {1, 2, 3} les valeurs dupliquées sont ignorées dict04 = {} # dict vide, ce n'est pas un set print( type(set04) ) # <class 'dict'> set05 = set() # set vide print( type(set05) ) # <class 'set'> """ Longueur d'un set, nombre d'éléments""" print("Longueur d'un set, nombre d'éléments") print( len(set02) ) """ Duplicates Not Allowed unicité, unique""" print("Duplicates elt Not Allowed") set03 = {"apple", "banana", "cherry"} set03 = {"apple", "banana", "cherry", "apple"} print( set03 ) # {'cherry', 'apple', 'banana'}; apple n'apparaît qu'une seule fois print( len(set03) ) # 3 """ dans un set chaque elt est unique et ne peut pas être dupliqué toutefois cela ne génère pas d'erreur mais l'elt dupliqué n'apparaît qu'une seule fois de même l'elt dupliqué n'est pris qu'une seule fois en compte pour la longueur du set """
""" ajouter des elt""" print("ajouter des elt") set01 = { "a", "b"} set01.add("c") # {'c', 'a', 'b'} print( set01 ) list01 = [2, 3, 4] set01.update( list01 ) print( set01) # {2, 3, 4, 'c', 'a', 'b'} set02 = {10, 11, 12} list02 = [20, 21,22] set01.update( list02, set02 ) print( set01 ) # {2, 3, 4, 10, 11, 12, 20, 21, 22, 'c', 'a', 'b'} """ 2 méthodes pour ajouter des elt add() ajoute un seul elt add() Adds an element to the set update() ajoute plusieurs elt simultanéments update() Updates the set with the union of itself and others """
""" Supprimer retirer des elt""" print("Supprimer retirer des elt") set01 = {1, 2, 3, 4, 5, 6, "a"} valeur = 4 set01.discard(valeur) # discard() supprime une valeur print( set01) # {1, 2, 3, 5, 6} print ( set01.discard("b") ) # ne provoque pas d'erreur si valeur n'existe pas! """ discard() Removes an element from the set if it is a member. (Do nothing if the element is not in set); not raises a KeyError """ valeur = 2 set01.remove(valeur) # remove() supprime une valeur print( set01 ) # {1, 3, 5, 6} """ remove() Removes an element from the set. If the element is not a member, raises a KeyError """ try: print( set01.remove("b") ) # provoque une erreur si elt n'existe pas except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # Something is not defined 'b' except: print("Something else went wrong") finally: pass # print("The 'try except' is finished") """ clear() supprime tous les elts """ set01.clear() # clear() supprime tous les elts print( set01 ) # set() """ clear() Removes all elements from the set """
set01 = {"a", 1, 2, 3, "b"} valeur = set01.pop() # supprime un elt de manière aléatoire et retourne sa valeur print( valeur ) # 1 print( set01 ) # {2, 3, 'a', 'b'} """ Résumé pour suppr elt in a set
"""
""" Union de set()
""" print("Union de set()") set01 = {1,2,3} set02 = {3,4,5} set03 = set01 | set02 print( set03 ) # {1, 2, 3, 4, 5} set04 = set01.union(set02) print( set04 ) # {1, 2, 3, 4, 5} """ union() Returns the union of sets in a new set """ set08 = {1,2,3} set09 = {3,4,5} set08.update( set09 ) print("union with update() ", set08 ) # {1, 2, 3, 4, 5} """ Updates the set with the union of itself and others """
""" Intersection de set()
""" print("Intersection de set()") set01 = {1,2,3} set02 = {3,4,5} set03 = set01 & set02 print( set03 ) # {3} set04 = set01.intersection(set02) print( set04 ) # {3} """ intersection() Returns the intersection of two sets as a new set """ set08 = {1,2,3} set09 = {3,4,5} set08.intersection_update( set09 ) # {3} print("intersection_update() with update() ", set08 ) """ Updates the set with the intersection of itself and another """
""" Difference de set()
""" print("Difference de set()") set01 = {1,2,3} set02 = {3,4,5} set03 = set01-set02 # elt dans set01 seulement et non compris dans set02 print( set03 ) # {1, 2} set04 = set01.difference(set02) print( set04 ) # {1, 2} """ difference() Returns the difference of two or more sets as a new set """ set08 = {1,2,3} set09 = {3,4,5} set08.difference_update( set09 ) # {1, 2} print("difference_update() with update() ", set08 ) """ difference_update() Removes all elements of another set from this set """
""" Symmetric Difference de set()
""" print(" Symmetric Difference de set()") set01 = {1,2,3} set02 = {3,4,5} set03 = set01^set02 print( set03 ) # {1, 2, 4, 5} set04 = set01.symmetric_difference(set02) print( set04 ) # {1, 2, 4, 5} """ Symmetric Difference de A et B est un set() constitué des elements de A et B mais pas des éléments commun à A et B (excluding the intersection). """ set08 = {1,2,3} set09 = {3,4,5} set08.symmetric_difference_update( set09 ) print("difference_update() with update() ", set08 ) # {1, 2, 4, 5} """ symmetric_difference_update() Updates a set with the symmetric difference of itself and another """
""" Copie d'un set()""" print("Copie d'un set()") set01 = {1,2,3} set02 = set01.copy() # copie indépendante du set() set01.add("a") print( set01 ) # {'a', 1, 2, 3} print( set02 ) # {1, 2, 3} """ copy() Returns a copy of the set """
""" isdisjoint()""" print("isdisjoint()") set01 = {1,2,3} set02 = {3,4,5} boolValeur = set01.isdisjoint( set02 ) print ( boolValeur ) # False """ isdisjoint() Returns True if two sets have a null intersection """
""" issubset()""" print("issubset() ") set01 = {1, 2, 3, 4, 5, 6} set02 = {3, 4, 5} boolValeur = set02.issubset(set01) print(boolValeur) # True; set02 est inclus dans set01 """ issubset() Returns True if another set contains this set """
""" issuperset()""" print("issuperset()") set01 = {1, 2, 3, 4, 5, 6} set02 = {3, 4, 5} boolValeur = set01.issuperset( set02 ) print( boolValeur ) # True, set01 contient set02 """ issuperset() Returns True if this set contains another set """
""" Contient elt, ne contient pas""" print("Contient elt") set01 = {"a", "b", "c"} print( "b" in set01 ) # True contient elt print("d" in set01 ) # False set02 = set("apple") print('a' in set02) # True print('p' in set02) # True print('p' not in set02) # False, ne contient pas
""" parcourir un set""" print("parcourir un set") set01 = {1, 2, 3, 4, 5, 6, "a", "per"} for elt in set01: print(elt) """ parcourir un set 1 2 3 4 5 6 per a """
"""source inspiration https://www.w3schools.com/python/python_sets.asp https://www.programiz.com/python-programming/set """
|
set 2ème partie - fonctions communes
""" tester les set {a, b} set object n'est pas modifiable, immutable, unchangeable Once a set is created, you cannot change its items, but you can add new items set object n'est pas ordonné, on ne sait pas dans quel ordre apparaissent les éléments set object Duplicates Not Allowed, conséquence du fait que set n'est pas modifiable """ import claudecnx.useIt2021_01 as go # module externe claudecnx as namespace go import copy # module interne; copy.deepcopy() """ all()""" print(" all() ") set01 = {1, 2, 3, 4, 5, 6, "a", "per"} bValeur = all(set01) print( bValeur ) # True """ all() returns True if all elements of the set are true (or if the set is empty). """
""" any()""" print(" any() ") set01 = {1, 2, 3, 4, 5, 6, "a", "per"} bValeur = any( set01 ) print( bValeur ) # True """ any() Returns True if any element of the set is true. If the set is empty, returns False. """
""" enumerate()""" print(" enumerate() ") set01 = {1, 2, 3, "a", "per"} obj = enumerate(set01)
print( type(obj) ) # <class 'enumerate'> print( go.typeIs(obj) ) # enumerate print( go.isWhat(obj) ) # {} est de type enumerate - iterable? True print( go.strc(obj) ) # {}
obj02 = copy.deepcopy(obj) print( type(obj) ) # <class 'enumerate'> print( obj ) # <enumerate object at 0x00000242929B5DC0> print( dict(obj02) ) # {0: 1, 1: 2, 2: 3, 3: 'per', 4: 'a'}; vide obj02 obj02 = copy.deepcopy(obj) print( list(obj02) ) # [(0, 1), (1, 2), (2, 3), (3, 'a'), (4, 'per')]; # l'ordre reste aléatoire, vide obj """ enumerate() Returns an enumerate object. It contains the index and value for all the items of the set as a pair. attention l'application de list() ou dict() sur cet object enumerate vide cet objet il faut donc utiliser copy.deepcopy() pour obtenir une copie indépendante de l'objet enumerate need to import: import copy # module interne; copy.deepcopy() """
""" len() nombre d'éléments dans un object""" print(" len() nombre d'éléments dans un object") set01 = {1, 2, 3, "a", "per"} print( len(set01) ) # """ len() Returns the length (the number of items) in the set. """
""" max() le plus grand item""" print("max() le plus grand item") set01 = {1, 2, 3, "a", "per"} set02 = {1, 2, 3, 2.5} set03 = {"a", "per"} print( max(set02) ) # 3 print( max(set03) ) # "per" try: print( max(set01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished") """ max() Returns the largest item in the set. on ne peut pas mélanger des str avec des int """
""" min() le plus petit item""" print("min() le plus petit item") set01 = {1, 2, 3, "a", "per"} set02 = {1, 2, 3, 2.5} set03 = {"a", "per"} print( min(set02) ) # 1 print( min(set03) ) # "a" try: print( min(set01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished") """ min() Returns the smallest item in the set. on ne peut pas mélanger des str avec des int """
""" sorted()""" print(" sorted()") set01 = {1, 2, 3, 2.5, "a", "per"} set02 = {1, 2, 3, 2.5} set03 = {"a", "per"} list02 = sorted( set02 ) # retourne un object list print( list02 ) # [1, 2, 2.5, 3] list03 = sorted( set03 ) print( list03 ) # ['a', 'per']
try: print( sorted(set01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
""" sorted() Returns a new sorted list from elements in the set(does not sort the set itself). on ne peut pas mélanger des str avec des int ou float """
""" sum()""" print(" sum() ") set01 = {1, 2, 3, 2.5, "a", "per"} set02 = {1, 2, 3, 2.5} set03 = {"a", "per"} valeur02 = sum( set02 ) print( valeur02 ) # 8.5
try: print( sum(set03) ) # Something is not defined '>' Something is not defined unsupported operand type(s) for +: 'float' and 'str' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
try: print( sum(set01) ) # Something is not defined '>' Something is not defined unsupported operand type(s) for +: 'float' and 'str' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
""" sum() Returns the sum of all elements in the set. on ne peut pas mélanger des str avec des int ou float; error ne sait pas faire une somme de str; error """
""" source inspiration https://www.programiz.com/python-programming/set """ |
Dans un object dictionnaire les données sont délimitées par des accolades { ...}
elles sont définies par paires
exemple:
mydict = {"mamifère": "Baleine", "poisson": "requin"}
mamifère et poisson sont dites key ou cle
Baleine et requin sont les valeurs respectives de chacune de ces cle
Dans un object dictionnaire, chaque elt est donc défini en précisant une clé au moyen d’une chaîne de caractères suivie de :
puis de la valeur associée
à cette cle
valeur = mydict["mamifere"] # retourne la valeur "Baleine"
Pour ajouter un élément à un dictionnaire, il suffit d’affecter une valeur pour la nouvelle clé.
mydict["oiseau"] = "Aigle"
il est posible de créer un dictionnaire vide
mydict02 = {}
puis d'y ajouter les paires key, item comme précédemment
mydict02["couleur"] = "verte"
""" """ |
print() for i in dico01.items(): print("Parcourir dict avec cle et valeur") |
print() dico01["Serpent"] = "Cobra" #
ajoute la paire Serpent, Cobra |
print() # Créer un dict vide, y ajouter des paires, méthode avec {}dico02 = {} #
dict vide print("Créer un dict vide, y ajouter des paires, méthode avec dict()") # Créer un dict vide, y ajouter des paires, méthode avec dict()dico03 = dict() #
new dict vide |
print() print( dico01["Serpent"] ) # Cobra
print("récupérer une valeur dans un dict") print( dico01.get("Serpent") ) # Cobra |
2 méthodes
valeur = dico[key] # key as str
valeur = dico.get(key) # key as str
Vérifier la présence d'une clé dans un dict
print() # print( dico01.hasKey("Serpent")
) # ne fonctionne plus sous Python3 print( 'Serpent' in dico01 ) # True |
print() list01 = list( dico01.items() ) print( list01) """ |
print("supprimer une entrée dans un dict") del dico01["Serpent"] print ( "%s" % dico01 ) # dict as str """ |
print("Récupérer les clés d'un dict") for cle in dico01.keys(): print(cle) """ |
print("Récupérer les valeurs d'un dict") for valeur in dico01.values(): print(valeur) """ récupérer les valeurs d'un dict Baleine Aigle Requin """ |
print("Récupérer les clés et les valeurs d'un dict") for cle,valeur in dico01.items(): print( cle, valeur ) """ récupérer les clés et les valeurs d'un dict Mammifère marin Baleine Oiseau Aigle Poisson Requin """ |
print("Utiliser des tuples comme clé dans un dict") dico04 = {} dico04[(3, 2)]=12 dico04[(4, 5)]=13 print( dico04 ) print("utile dans l'utilisation de coordonnées
! ") """ utiliser des tuples comme clé dans un dict {(3, 2): 12, (4, 5): 13} """ |
print("Créer une copie indépendante d'un dict") dico05 = dico01.copy() dico01["Oiseau"] = "Faucon" print(dico05) print(dico01) """ créer une copie indépendante d'un dict {'Mammifère marin': 'Baleine', 'Oiseau': 'Aigle', 'Poisson': 'Requin'} {'Mammifère marin': 'Baleine', 'Oiseau': 'Faucon', 'Poisson': 'Requin'} """ |
dico01.update(dico02) print(dico01) """ fusionner des dict {'Mammifère marin': 'Baleine', 'Oiseau': 'Faucon', 'Poisson': 'Requin', 'Mammifere': 'Chien'} """ |
Fusionner, ajouter ou concaténer des dict ensemble!
print("Compter les nombre d'éléments, de paires, dans un dict") print( len(dico01) ) # 4 paires après le update |
""" tester les dictionnaires """ import claudecnx.useIt2021_01 as go # module externe claudecnx as namespace go dico01 = {"Mammifère marin": "Baleine", "Oiseau": "Aigle", "Poisson": "Requin"} """ print( type(dico01) ) # <class 'dict'> print( go.typeIs(dico01) ) # dict print( go.isWhat(dico01) ) # {'Mammifère marin': 'Baleine', 'Oiseau': 'Aigle', 'Poisson': 'Requin'} est de type dict - iterable? True print( go.strc(dico01) ) # {'Mammifère marin': 'Baleine', 'Oiseau': 'Aigle', 'Poisson': 'Requin'} """ print() print("Parcourir un dictionnaire") for i in dico01.items(): print(i) """ Parcourir un dictionnaire ('Mammifère marin', 'Baleine') ('Oiseau', 'Aigle') ('Poisson', 'Requin') """ print("Parcourir dict avec cle et valeur") for key, value in dico01.items(): print("la cle est: ", key, "associée à la valeur ", value) """ Parcourir dict avec cle et valeur la cle est: Mammifère marin associée à la valeur Baleine la cle est: Oiseau associée à la valeur Aigle la cle est: Poisson associée à la valeur Requin """ print() print("Ajouter une paire à dict") dico01["Serpent"] = "Cobra" # ajoute la paire Serpent, Cobra print ( "%s" % dico01 ) # dict as str """ Ajouter une paire à dict {'Mammifère marin': 'Baleine', 'Oiseau': 'Aigle', 'Poisson': 'Requin', 'Serpent': 'Cobra'} """ print() print("Créer un dict vide, y ajouter des paires, méthode avec {}") dico02 = {} # dict vide dico02["Mammifere"] = "Chien" print ( "%s" % dico02 ) # dict as str """ Créer un dict vide, y ajouter des paires {'Mammifere': 'Chien'} """ print("Créer un dict vide, y ajouter des paires, méthode avec dict()") dico03 = dict() # new dict vide dico02["Mammifere"] = "Chien" print ( "%s" % dico03 ) # dict as str """ Créer un dict vide, y ajouter des paires {'Mammifere': 'Chien'} """ print() print("récupérer une valeur dans un dict") print( dico01["Serpent"] ) # Cobra
print("récupérer une valeur dans un dict") print( dico01.get("Serpent") ) # Cobra
print() print("vérifier la présence d'une clé dans un dict") # print( dico01.hasKey("Serpent") ) # ne fonctionne plus sous Python3 print( 'Serpent' in dico01 ) # True
print() print("Convertir dict en list") list01 = list( dico01.items() ) print( list01) """ Convertir dict en list [('Mammifère marin', 'Baleine'), ('Oiseau', 'Aigle'), ('Poisson', 'Requin'), ('Serpent', 'Cobra')] """ print() print("supprimer une entrée dans un dict") del dico01["Serpent"] print ( "%s" % dico01 ) # dict as str """ supprimer une entrée dans un dict {'Mammifère marin': 'Baleine', 'Oiseau': 'Aigle', 'Poisson': 'Requin'} """ print() print("récupérer les clés d'un dict") for cle in dico01.keys(): print(cle) """ récupérer les clés d'un dict Mammifère marin Oiseau Poisson """ print() print("récupérer les valeurs d'un dict") for valeur in dico01.values(): print(valeur) """ récupérer les valeurs d'un dict Baleine Aigle Requin """ print() print("récupérer les clés et les valeurs d'un dict") for cle,valeur in dico01.items(): print( cle, valeur ) """ récupérer les clés et les valeurs d'un dict Mammifère marin Baleine Oiseau Aigle Poisson Requin """ print() print("utiliser des tuples comme clé dans un dict") dico04 = {} dico04[(3, 2)]=12 dico04[(4, 5)]=13 print( dico04 ) print("utile dans l'utilisation de coordonnées ! ") """ utiliser des tuples comme clé dans un dict {(3, 2): 12, (4, 5): 13} """ print() print("créer une copie indépendante d'un dict") dico05 = dico01.copy() dico01["Oiseau"] = "Faucon" print(dico05) print(dico01) """ créer une copie indépendante d'un dict {'Mammifère marin': 'Baleine', 'Oiseau': 'Aigle', 'Poisson': 'Requin'} {'Mammifère marin': 'Baleine', 'Oiseau': 'Faucon', 'Poisson': 'Requin'} """ print() print(" fusionner des dict") dico01.update(dico02) print(dico01) """ fusionner des dict {'Mammifère marin': 'Baleine', 'Oiseau': 'Faucon', 'Poisson': 'Requin', 'Mammifere': 'Chien'} """ print() print("Compter les nombre d'éléments, de paires, dans un dict") print( len(dico01) ) # 4 paires après le update
|
dict 2nd partie
""" tester les dictionnaires {"key": "valeur"} les fonctions communes ci-dessous s'appliquent sur key uniquement """
import claudecnx.useIt2021_01 as go # module externe claudecnx as namespace go import copy # module interne; copy.deepcopy()
obj01 = {0:1, 1:2, 2:3, 3:2.5, 4:"a", 5:"per"} obj02 = {0:1, 1:2, 2:3, 3:2.5} obj03 = {4:"a", 5:"per"}
""" all()""" print(" all() ") bValeur = all(obj01) print( bValeur ) # false """ all() returns True if all elements of the set are true (or if the set is empty). """
""" any()""" print(" any() ")
bValeur = any( obj01 ) print( bValeur ) # True """ any() Returns True if any element of the set is true. If the set is empty, returns False. """
""" enumerate()""" print(" enumerate() ")
obj = enumerate(obj01)
print( type(obj) ) # <class 'enumerate'> print( go.typeIs(obj) ) # enumerate print( go.isWhat(obj) ) # {} est de type enumerate - iterable? True print( go.strc(obj) ) # {}
obj04 = copy.deepcopy(obj) print( type(obj) ) # <class 'enumerate'> print( obj ) # <enumerate object at 0x00000242929B5DC0> print("enumerate as dict ", dict(obj04) ) # {0: 1, 1: 2, 2: 3, 3: 'per', 4: 'a'}; vide obj02 obj04 = copy.deepcopy(obj) print("enumerate as list ", list(obj04) ) # [(0, 1), (1, 2), (2, 3), (3, 'a'), (4, 'per')]; # l'ordre reste aléatoire, vide obj """ enumerate() Returns an enumerate object. It contains the index and value for all the items of the set as a pair. attention l'application de list() ou dict() sur cet object enumerate vide cet objet il faut donc utiliser copy.deepcopy() pour obtenir une copie indépendante de l'objet enumerate need to import: import copy # module interne; copy.deepcopy() """
""" len() nombre d'éléments dans un object""" print(" len() nombre d'éléments dans un object")
print( len(obj01) ) # """ len() Returns the length (the number of items) in the set. """
""" max() le plus grand item""" print("max() le plus grand item")
print( max(obj02) ) # 3 print( max(obj03) ) # "per" try: print( max(obj01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished") """ max() Returns the largest item in the set. on ne peut pas mélanger des str avec des int """
""" min() le plus petit item""" print("min() le plus petit item")
print( min(obj02) ) # 1 print( min(obj03) ) # "a" try: print( min(obj01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished") """ min() Returns the smallest item in the set. on ne peut pas mélanger des str avec des int """
""" sorted()""" print(" sorted()")
list02 = sorted( obj02 ) print( list02 ) # [1, 2, 2.5, 3] list03 = sorted( obj03 ) print( list03 ) # ['a', 'per']
try: print( sorted(obj01) ) # Something is not defined '>' not supported between instances of 'str' and 'int' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
""" sorted() Returns a new sorted list from elements in the set(does not sort the set itself). on ne peut pas mélanger des str avec des int ou float """
""" sum()""" print(" sum() ")
valeur02 = sum( obj02 ) print( valeur02 ) # 8.5
try: print( sum(obj03) ) # Something is not defined '>' Something is not defined unsupported operand type(s) for +: 'float' and 'str' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
try: print( sum(obj01) ) # Something is not defined '>' Something is not defined unsupported operand type(s) for +: 'float' and 'str' except ZeroDivisionError as err: print('Handling ZeroDivisionError error:', err) except StopIteration as err: print('Handling StopIteration error: ', err) except (RuntimeError, TypeError, ValueError, NameError, KeyError) as err: print("Something is not defined", err) # except: print("Something else went wrong") finally: pass # print("The 'try except' is finished")
""" sum() Returns the sum of all elements in the set. on ne peut pas mélanger des str avec des int ou float; error ne sait pas faire une somme de str; error """
""" source inspiration https://www.programiz.com/python-programming/set """
|
source d'inspiration: https://courspython.com/dictionnaire.html
""" convertir les principaux type entre eux list tuple set dict """ import claudecnx.useIt2021_01 as go # module externe claudecnx as namespace go #import copy # module interne; copy.deepcopy() import itertools # convertir en dict si data not paires
list01 = [3, 4, 5, "a", "l"] tp01 = (1, 2, 3, "a", "tp") set01= {1, 2, 3, "a", "s"} dict01={"name": "briardind", "firstname":"claude", "age":75}
# convertir to listprint("convert to list") print("tuple to list ", list(tp01), " ", tp01 ) # tuple to list [1, 2, 3, 'a', 'tp'] (1, 2, 3, 'a', 'tp') print("set to list ", list(set01), " ", set01 ) # set to list [1, 2, 3, 'a', 's'] {1, 2, 3, 'a', 's'} print("dict to list ", list(dict01), " ", dict01 ) # dict to list ['name', 'firstname', 'age'] {'name': 'briardind', 'firstname': 'claude', 'age': 75}
# convert to tupleprint("convert to tuple") print("list to tuple ", tuple(list01), " " , list01) # list to tuple (3, 4, 5, 'a', 'l') [3, 4, 5, 'a', 'l'] print("set to tuple ", tuple(set01), " " , set01) # set to tuple (1, 2, 3, 'a', 's') {1, 2, 3, 'a', 's'} print("dict to tuple ", tuple(dict01), " " , dict01) # dict to tuple ('name', 'firstname', 'age') {'name': 'briardind', 'firstname': 'claude', 'age': 75}
# convert to setprint("convert to set") print("list to set ", set(list01), " " , list01) # list to set {3, 4, 5, 'l', 'a'} [3, 4, 5, 'a', 'l'] print("tuple to set ", set(tp01), " " , tp01) # tuple to set {1, 2, 3, 'tp', 'a'} (1, 2, 3, 'a', 'tp') print("dict to set ", set(dict01), " " , dict01) # dict to set {'name', 'age', 'firstname'} {'name': 'briardind', 'firstname': 'claude', 'age': 75}
# convert to dict#print("list to dict ", dict(list01), " " , list01) # TypeError: cannot convert dictionary update sequence element #0 to a sequence # print("tuple to dict ", dict(tp01), " " , tp01) # TypeError: cannot convert dictionary update sequence element #0 to a sequence # print("set to dict ", dict(set01), " " , dict01) # TypeError: cannot convert dictionary update sequence element #0 to a sequence
# convert to dict: cas de data non appairéeprint() print("convert to dict") print() # convert list to dict print("convert list to dict") iter01 = iter(list01) # converting list to iterable to avoid repetition dict_object01 = itertools.zip_longest(iter01, iter01, fillvalue=None) # converting the plain_list to dict dict01 = dict(dict_object01) # convert the zip_longest object to dict using `dict` print("list to dict converted ",dict01, " " , list01) # list to dict converted {3: 4, 5: 'a', 'l': None} [3, 4, 5, 'a', 'l']
# convert tuple to dict print("convert tuple to dict") iter01 = iter(tp01) # converting list to iterable to avoid repetition dict_object01 = itertools.zip_longest(iter01, iter01, fillvalue=None) # converting the plain_list to dict dict01 = dict(dict_object01) # convert the zip_longest object to dict using `dict` print("tuple to dict converted ",dict01, " " , tp01) # tuple to dict converted {1: 2, 3: 'a', 'tp': None} (1, 2, 3, 'a', 'tp')
# convert set to dict print ("convert set to dict") iter01 = iter(set01) # converting list to iterable to avoid repetition dict_object01 = itertools.zip_longest(iter01, iter01, fillvalue=None) # converting the plain_list to dict dict01 = dict(dict_object01) # convert the zip_longest object to dict using `dict` print("set to dict converted ", dict01, " " , set01) # set to dict converted {1: 2, 3: 's', 'a': None} {1, 2, 3, 's', 'a'}
# convert to dict: cas des paires; fonctionne avec [paires] (paires) {paire}print() print("cas des paires; fonctionne avec [paires] (paires) {paire}") print(" avec les paires la fonction dict() fonctionne!") list_of_tuples01 = [('a', 'A'), ('b', 'B'), ('c', 'C')] dict01 = dict(list_of_tuples01) print("convert list of tuple to dict ", dict01, " " , list_of_tuples01) # convert list of tuple to dict {'a': 'A', 'b': 'B', 'c': 'C'} [('a', 'A'), ('b', 'B'), ('c', 'C')]
list_of_list01 = [['a', 'A'], ['b', 'B'], ['c', 'C']] dict01 = dict(list_of_list01) print("convert list of list to dict ", dict01, " " , list_of_list01) # convert list of list to dict {'a': 'A', 'b': 'B', 'c': 'C'} [['a', 'A'], ['b', 'B'], ['c', 'C']]
list_of_set01 = [{'a', 'A'}, {'b', 'B'}, {'c', 'C'}] dict01 = dict(list_of_set01) print("convert list of set to dict ", dict01, " " , list_of_set01) # convert list of set to dict {'A': 'a', 'B': 'b', 'C': 'c'} [{'A', 'a'}, {'B', 'b'}, {'C', 'c'}]
|
Sous Python les conditions usuelles s'écrivent:
if, elif qui est une contraction de elseif et else
Pour l'heure pas d'instruction de type select case, mais une succession de elif
il est malgré tout possible d'écrire une instruction de type:
variable = condition ? valeur si vrai: valeur si faux;
il faut procéder comme suit:
en résumé, il faut écrire:
variable = "valeur si vrai" if condition else "valeur si faux"
valeur si vrai s'applique si condition est True
valeur si faux s'applique si condition = False
def myfonction(): |
def myfonction(): """ print("Bonjour") |
Pour plus de détails sur les aides et la fonction help()
def mafonction(valeur1, valeur2): calcul = mafonction(1, 3) |
def mafonction(valeur1, valeur2 = 5): calcul = mafonction(2) # renvoie 2+5 = 7 |
les valeurs définies par défaut sont toujours les derniers paramètres
Nous pouvons pré définir plusieurs paramètres à conditions de les mettre en fin de transmission dans l'ordre de passage des paramètres
les paramètres pré définis sont optionnels; si ils ne sont pas passés en paramètres c'est leur valeur par défaut qui est précise en compte par la fonction
il est possible de pré définir tous les paramètres
Dans ce cas le nombre d'arguments transmis n'est pas connus par la fonction
2 cas de figure peuvent se présenter, transmission dite par simple splat ou transmission avec double splat
print() def somme(*args): somme(1,2) x= [1,2,3]
def pgcd(*n): # calucl du Plus Grand Commun
dénominateur print("PGCD = ", pgcd(165,515,225,65)) # Plus Grand Commun dénominateur |
la syntaxe usuelle pour désigner un nombre variable d'arguments en simple splat est *args
pour autant args n'est pas un mot clef, nous pouvons très bien écrire *n, voir notre 2nd exemple dans la fonction pgcd()
pour autant c'est une convention usuelle que nous recommandons donc afin de faciliter la lecture de votre code
en fait l'important dans *args , c'est le symbole * (splat) qui indique que nos transmettons un nombre variable d'arguments à la fonction
les arguments sont transmis comme tuple ou list
voir la notation pour transmettre un object list comme liste variable d'arguments ex.: somme(*myList) # myList=[1,2,3]
alors que la transmission sous forme turple s'écrit simplement ex.: somme(1,2,3)
avec ce type de transmission nous pouvons accéder aux valeurs via un indice ex.: valeur = args[0]
nous pouvons connaître le nombre d'arguments passés len(args) , comme tjs en python indice varie de 0 à n-1 ou n est le nombre d'arguments transmis.
print() def myf04(**kwargs): chiffre = myf04(prenom="Pierre", age=29, sport="trail",
valeur1 = 10)
def myf05(**p): #
écrit a, b, c valeur = myf05(a = 1, b = 2, c = 5) def myf07(**kwargs): myDict = {"voiture": "Renault",
"camion": "Berliet"} |
a syntaxe usuelle pour désigner un nombre variable d'arguments en double splat est **kwargs
pour autant kwargs n'est pas un mot clef, nous pouvons très bien écrire **p, voir notre 2nd exemple dans la fonction myf05()
pour autant c'est une convention usuelle que nous recommandons donc afin de faciliter la lecture de votre code
en fait l'important dans **kwargs , c'est le double symbole ** (splat) qui indique que nos transmettons un nombre variable d'arguments à la fonction
ici la transmission se fait sous forme de paires key, item
ce type d'écriture est dit object dictionnaire
nous pouvons accéder à une valeur via sa key, comme ceci ex.: valeur = kwargs["nameKey"], le nom de la key est indiqué as str
nous pouvons savoir le nombre d'arguments transmis, le nombre de paires key, item, via len(kwargs), mais il ne semble pas possible d'exploiter ceci via un indice pour accéder aux éléments des paires, la seule possibilité de parcourir cet object semble être la boucle for in ...
notons également que si nous voulons transmettre un object dictionnaire
comme arguments, il faut le faire précéder d'une double splat comme
ceci:
myf07(**myDict) # transmission
d'un object dictionnaire comme arguments où myDict =
{"voiture": "Renault", "camion": "Berliet"}
remarquons dans ce cas la similitude avec la transmission d'un object list dans le cas d'une simple splat
Voir cet exemple ci-dessous
print() def myf06(*args , **kwargs):
# mélange de splat et double splat chiffre = myf06(48 , 52 , 63 , a
= 1, b = 2, c = 5) |
En fait la fonction fait elle-même le trie des arguments passés en simple splat avec ceux passés en double splat
def mydata(valeur1, valeur2): distance,angle,TX = mydata(distance,angle,TX) # appel de la fonction # exploitation des résultats |
Tout est dans la ligne
return(data1, data2)
voir notre code de test python
""" print() def myf01(a, b=10): print( myf01(2) ) print() def myf02(): # pour exemple help(myf02) print() def myf03(a, b): somme, produit = myf03(4, 6) print() ### fonctions avec nombre d'arguments variables print() def somme(*args): somme(1,2) x= [1,2,3]
def pgcd(*n): #
calucl du Plus Grand Commun dénominateur print("PGCD = ", pgcd(165,515,225,65)) # Plus Grand Commun dénominateur
print() def myf04(**kwargs): chiffre = myf04(prenom="Pierre", age=29, sport="trail",
valeur1 = 10)
def myf05(**p): #
écrit a, b, c valeur = myf05(a = 1, b = 2, c = 5)
def myf07(**kwargs): myDict = {"voiture": "Renault",
"camion": "Berliet"}
print() def myf06(*args , **kwargs):
# mélange de splat et double splat chiffre = myf06(48 , 52 , 63 , a
= 1, b = 2, c = 5)
|
source d'inspiration:
https://www.mathweb.fr/euclide/2019/04/13/python-et-fonction-a-nombre-variable-darguments/
|
|||||
|
|
|
|
|
|
Firefox: 52 et + |
Edge |
Chrome: 60 et + |
Opéra: 49 et + |
IE8 non testé |
Safari non testé |
Vous
pouvez charger la bibliothèque use
comme ceci entre vos balises <head>
<script src="../dossier/use.version.js"></script>
Dossier est le nom du répertoire où vous avez placé le fichier use;
et use.version.js le nom de ce fichier.
Pour nous contacter: claudecnx@blanquefort.net