En pratique
De TARENTINO
Aller à la navigationAller à la rechercheArray
Print
Lien: la modularite
(Opérateurs:Magenta) (Méthodes:Green) (Fonctions:Red)
Python En pratique Python Niveau 1 Python Niveau 2 Python Niveau 3 Premiers programmes Graphismes Sauvegarde Shell/Python
7/03/2026
En pratique
- Appliquons maintenant la théorie à la pratique.
- Tout n'est pas encore intégré
Infos utiles
- Connaitre la version de Python
1 import sys
2 print(sys.version_info)
Index des modules d'extension Python
Exercices
Python Niveau 1 (Dominique)
Sommes de 2 nombres
1 # PROGRAMME sommeNombres
2 #VAR
3 nombre1 : int
4 nombre2 : int
5 somme : int
6 #DEBUT
7 nombre1 = int(input("Saisir le premier nombre : "))
8 nombre2 = int(input("Saisir le deuxième nombre : "))
9 somme = nombre1 + nombre2
10 print("La somme des 2 nombres est : " , somme)
11 #FIN
Ascenceur 01
1 # Variables
2 PorteCabineEstOuverte:bool
3 lesEtagesEstES:[bool]=[true,
4 true,
5 false,
6 true]
7 #lesEtagesEstES[1]=false
8 EntrainementEtatDepl:str # Arreté
9 EtageCourant:int
10 EtageAppel:int
11 # Debut
12 EntrainementEtatDepl="Arreté"
13 EtageCourant=1
14 #if (EntrainementEtatDepl=="Arreté") :
15 EtageAppel=int(input("De quel étage appelez vous ? "))
16 # si EtageCourant < EtageAppel And EntrainementEtatDepl=Arreté and PorteCabineEstOuverte=false
17 if (EtageAppel > EtageCourant) :
18 # descente
19 print("Faire monter l'entrainement de la cabine !")
20 print("La cabine est en montée et ouverte False à l'étage ", EtageCourant)
21 else :
22 if (EtageAppel < EtageCourant) :
23 # si EtageCourant < EtageAppel And EntrainementEtatDepl=Arreté and PorteCabineEstOuverte=true
24 # Montée
25 print("Faire descendre l'entrainement de la cabine !")
26 print("La cabine est en descente et ouverte False à l'étage ", EtageCourant)
27 else :
28 print("Déjà au bon étage !!!! Faire ouvrir les portes")
29 # fin de si
30 # fin de si
31 print("La cabine est ",EntrainementEtatDepl, " et ouverte à l'étage ", EtageCourant)
32 # Fin
Ascenceur 02
1 """"
2 NAME : ascenseur.py
3 Description : Programme de pilotage d'un ascenseur - V1
4 """
5 # PROGRAMME ascenseur
6 #
7 # TYPES
8 # Nous n'utilisons que des types natifs du langage (int, str ...), il n'est donc pas nécessaire de définir des types de données : ils existent
9 #
10 # VAR
11 etatEntrainement : str = "ARRETE" # Déclaration d'une donnée variable de type string et initialisation
12 # Un entrainement arrêté
13 porteCabineEstOuverte : bool = False # Déclaration d'une donnée variable de type booléen et initialisation
14 # Une porte de cabine ouverte
15
16
17 etageCourantCabine : int = 1 # Déclaration d'une donnée variable de type entier et initialisation
18 # Une cabine est à l'étge 1
19 etageDAppel : int = -1 # Déclaration d'une donnée
20 # variable de type entier et initialisation
21 # Aucun étage appelé (valeur -1)
22 lesEtagesEstES : [bool]=[True,True,False,True]
23
24 n : int=0
25
26 #
27 # DEBUT
28 print(" Debut du programme 3")
29 while n<4 :
30 print("L'etage " , n , " est " ,lesEtagesEstES[n])
31 n=n+1
32 print(" La cabine est", etatEntrainement, "et ouverte", porteCabineEstOuverte, "à l'étage", etageCourantCabine)
33
34 # L'usager appelle l'ascenseur
35 etageDAppel = int(input("De quel étage appelez-vous? "))
36 if (lesEtagesEstES[etageDAppel]==True) :
37
38 if (etageDAppel > etageCourantCabine) :
39 print("FAIRE MONTER L'ENTRAINEMENT DE LA CABINE")
40 etatEntrainement = "EN_MONTEE"
41 else :
42 if (etageDAppel < etageCourantCabine) :
43 print("FAIRE DESCENDRE L'ENTRAINEMENT DE LA CABINE")
44 etatEntrainement = "EN_DESCENTE"
45 else :
46 #La cabine se tient déjà à l'étage demandé : il faut juste ouvrir la porte
47 print("FAIRE OUVRIR LA PORTE DE LA CABINE")
48 porteCabineEstOuverte = True
49 print(" La cabine est", etatEntrainement, "et ouverte", porteCabineEstOuverte, "à l'étage", etageCourantCabine)
50
51 # Saisie de l'étage auquel arrive la cabine
52 if ( etageCourantCabine != etageDAppel) :
53 etageCourantCabine = int(input("La cabine arrive à quel étage? "))
54 if (etageCourantCabine == etageDAppel) :
55 print("FAIRE ARRETER L'ENTRAINEMENT")
56 etatEntrainement = "ARRETE"
57 print("FAIRE OUVRIR LA PORTE DE LA CABINE")
58 porteCabineEstOuverte = True
59 print(" La cabine est", etatEntrainement, "et ouverte", porteCabineEstOuverte, "à l'étage",
60 etageCourantCabine)
61
62 # Saisie de l'étage auquel arrive la cabine
63 if ( etageCourantCabine != etageDAppel) :
64 etageCourantCabine = int(input("La cabine arrive à quel étage? "))
65 if (etageCourantCabine == etageDAppel) :
66 print("FAIRE ARRETER L'ENTRAINEMENT")
67 etatEntrainement = "ARRETE"
68 print ("FAIRE OUVRIR LA PORTE DE LA CABINE")
69 porteCabineEstOuverte = True
70 print(" La cabine est", etatEntrainement, "et ouverte", porteCabineEstOuverte, "à l'étage",
71 etageCourantCabine)
72
73 # Saisie de l'étage auquel arrive la cabine
74 if ( etageCourantCabine != etageDAppel) :
75 etageCourantCabine = int(input("La cabine arrive à quel étage? "))
76 if (etageCourantCabine == etageDAppel) :
77 print("FAIRE ARRETER L'ENTRAINEMENT")
78 etatEntrainement = "ARRETE"
79 print("FAIRE OUVRIR LA PORTE DE LA CABINE")
80 porteCabineEstOuverte = True
81 print(" La cabine est", etatEntrainement, "et ouverte", porteCabineEstOuverte, "à l'étage",
82 etageCourantCabine)
83 else :
84 print("etage FERME")
85 print(" Fin du programme")
86 #
87 # FIN
Ascenceur 03
1 """"
2 NAME : ascenseur.py
3 Description : Programme de pilotage d'un ascenseur - V2 - Tableaux, structures, boucles
4 """
5 #
6 # PROGRAMME ascenseur
7 # TYPES
8 from enum import Enum # Truc syntaxique que l'on ne comprend pas encore
9 class EnumEtatEnt (Enum) : # Définition d'un type énumération
10 ARRETE = 1
11 EN_MONTEE = 2
12 EN_DESCENTE = 3
13
14 class EnumEtatPorte (Enum) :
15 FERME = 1
16 OUVERT = 2
17
18 class EtatCabine (Enum) :
19 ARRETE_FERME = 1
20 ARRETE_OUVERT = 2
21 EN_DESCENTE_FERME = 3
22 EN_MONTEE_FERME = 4
23
24 #Constante NB_ETAGES = 4 - Le nombre d'étages de l'ascenseur est 4, RDC, étage 0, inclus - Il y a donc 3 étages proprement dits
25 #Constante NUM_PORTE_CABINE = 4 - Le numéro de la porte de cabine est 4 (les premiers numéros correspondent à des portes d'étage)
26
27 from dataclasses import dataclass # Truc syntaxique que l'on ne comprend pas encore
28 @dataclass # Autre truc syntaxique ...
29 class Cabine : # Définition d'un type structure Cabine
30 etat : EtatCabine
31 etageCourant : int
32 numPorte: int
33
34 @dataclass
35 class Etage : # Définition d'un type structure Etage
36 estES : bool
37 estEteint : bool
38 numPorte : int
39 #
40 # VAR
41
42 def init() :
43 print(" L'entrainement est", etatEntrainement)
44 print(" La porte de la cabine est dans l'état ", lesEtatPortes[laCabine.numPorte])
45 print(" La cabine est", laCabine.etat, "à l'étage ", laCabine.etageCourant)
46
47 etatEntrainement : EnumEtatEnt = EnumEtatEnt.ARRETE # Déclaration d'une donnée variable de type énumération et initialisation -
48 # 1 entrainement, arrêté
49 lesEtatPortes : [EnumEtatPorte] = [EnumEtatPorte.FERME, EnumEtatPorte.FERME,EnumEtatPorte.FERME,EnumEtatPorte.FERME,EnumEtatPorte.FERME] # Déclaration d'une donnée variable de type tableau d'énumération et initialisation
50 # 5 portes fermées - 4 portes d'étage et 1 porte de cabine (la dernière)
51 laCabine : Cabine = Cabine(EtatCabine.ARRETE_FERME, 1, 4) # Déclation d'une donnée variable de type structure et initialisation
52 # 1 cabine, arrêté fermée, à l'étage 1 et avec la porte 4
53 lesEtages : [Etage] = [Etage(True,True,0), Etage(True,True,1), Etage(False,True,2), Etage(True,True,3)] # Déclaration d'une donnée variable de type tableau de 4 booléens et initialisation
54 # 4 étages, chaque étage, en service, éteint, avec une porte de son numéro
55 etageDAppel : int = -1 # Déclaration d'une donnée variable de type entier et initialisation
56 # Aucun étage appelé (valeur -1)
57 #
58 # DEBUT
59 print(" Début du programme 9")
60
61 # Affichage état de l'ascenseur
62 # Affichage état complet de la cabine
63 print(" L'entrainement est", etatEntrainement)
64 print(" La porte de la cabine est dans l'état ", lesEtatPortes[laCabine.numPorte])
65 print(" La cabine est", laCabine.etat, "à l'étage ", laCabine.etageCourant)
66
67 #Affichage état complet des étages
68 """""
69 numEtage = 0
70 while numEtage < 4 :# NB_ETAGES
71 print(" L'étage ", numEtage, "est es ", lesEtages[numEtage].estES, ", éteint ", lesEtages[numEtage].estEteint,
72 "numéro de porte ", lesEtages[numEtage].numPorte,
73 "dans l'état ", lesEtatPortes[lesEtages[numEtage].numPorte])
74 numEtage = numEtage + 1
75 """
76 for numEtage in range(0,4) :
77 print(" L'étage ", numEtage, "est es ", lesEtages[numEtage].estES, ", éteint ", lesEtages[numEtage].estEteint,
78 "numéro de porte ", lesEtages[numEtage].numPorte,
79 "dans l'état ", lesEtatPortes[lesEtages[numEtage].numPorte])
80 # L'usager appelle l'ascenseur
81 etageDAppel = int(input("De quel étage appelez-vous? "))
82 if lesEtages[etageDAppel].estES :
83 if (etageDAppel > laCabine.etageCourant) :
84 print("FAIRE MONTER L'ENTRAINEMENT DE LA CABINE")
85 etatEntrainement = EnumEtatEnt.EN_MONTEE
86 laCabine.etat = EtatCabine.EN_MONTEE_FERME
87 else :
88 if (etageDAppel < laCabine.etageCourant) :
89 print("FAIRE DESCENDRE L'ENTRAINEMENT DE LA CABINE")
90 etatEntrainement = EnumEtatEnt.EN_DESCENTE
91 laCabine.etat = EtatCabine.EN_DESCENTE_FERME
92 else :
93 #La cabine se tient déjà à l'étage demandé : il faut juste ouvrir les portes
94 print("FAIRE OUVRIR LA PORTE NUMERO : ", laCabine.numPorte)
95 lesEtatPortes[laCabine.numPorte] = EnumEtatPorte.OUVERT
96 print("FAIRE OUVRIR LA PORTE NUMERO : ", lesEtages[etageDAppel].numPorte)
97 lesEtatPortes[lesEtages[etageDAppel].numPorte] = EnumEtatPorte.OUVERT
98 laCabine.etat = EtatCabine.ARRETE_OUVERT
99 # Affichage état complet de la cabine
100 print(" L'entrainement est", etatEntrainement)
101 print(" La porte de la cabine est dans l'état ", lesEtatPortes[laCabine.numPorte])
102 print(" La cabine est", laCabine.etat, "à l'étage ", laCabine.etageCourant)
103 while ( laCabine.etageCourant != etageDAppel) : # La cabine n'est pas à l'étage d'appel
104 # Saisie de l'étage auquel arrive la cabine
105 laCabine.etageCourant = int(input("La cabine arrive à quel étage? "))
106 if (laCabine.etageCourant == etageDAppel) :
107 print("FAIRE ARRETER L'ENTRAINEMENT")
108 etatEntrainement = EnumEtatEnt.ARRETE
109 print("FAIRE OUVRIR LA PORTE NUMERO : ", laCabine.numPorte)
110 lesEtatPortes[laCabine.numPorte] = EnumEtatPorte.OUVERT
111 print("FAIRE OUVRIR LA PORTE NUMERO : ", lesEtages[etageDAppel].numPorte)
112 lesEtatPortes[lesEtages[etageDAppel].numPorte] = EnumEtatPorte.OUVERT
113 laCabine.etat = EtatCabine.ARRETE_OUVERT
114 # Affichage état complet de la cabine
115 print(" L'entrainement est", etatEntrainement)
116 print(" La porte de la cabine est dans l'état ", lesEtatPortes[laCabine.numPorte])
117 print(" La cabine est", laCabine.etat, "à l'étage ", laCabine.etageCourant)
118 else :
119 print(" L'appel ne peut être pris en compte car l'étage n'est pas en service")
120
121 print(" Fin du programme")
122 #
123 # FIN
Ascenceur 04
1 """"
2 NAME : ascenseur.py
3 Description : Programme "ascenseur", programme de pilotage d'un ascenseur - V3 - Sous-programmes
4 """
5 # PROGRAMME ascenseur
6 #
7 # TYPES
8 from enum import Enum # Truc syntaxique que l'on ne comprend pas encore
9 class EnumEtatEnt (Enum) : # Définition d'un type énumération
10 ARRETE = 1
11 EN_MONTEE = 2
12 EN_DESCENTE = 3
13
14 class EnumEtatPorte (Enum) :
15 FERME = 1
16 OUVERT = 2
17
18 class EtatCabine (Enum) :
19 ARRETE_FERME = 1
20 ARRETE_OUVERT = 2
21 EN_DESCENTE_FERME = 3
22 EN_MONTEE_FERME = 4
23
24 #Constante NB_ETAGES = 4 - Le nombre d'étages de l'ascenseur est 4, RDC, étage 0, inclus - Il y a donc 3 étages proprement dits
25 #Constante NUM_PORTE_CABINE = 4 - Le numéro de la porte de cabine est 4 (les premiers numéros correspondent à des portes d'étage)
26
27 from dataclasses import dataclass # Truc syntaxique que l'on ne comprend pas encore
28 @dataclass # Autre truc syntaxique ...
29 class Cabine : # Définition d'un type structure Cabine
30 etat : EtatCabine
31 etageCourant : int
32 numPorte: int
33
34 @dataclass
35 class Etage : # Définition d'un type structure Etage
36 estES : bool
37 estEteint : bool
38 numPorte : int
39 #
40 # VAR
41 etatEntrainement : EnumEtatEnt = EnumEtatEnt.ARRETE # Déclaration d'une donnée variable de type énumération et initialisation -
42 # 1 entrainement, arrêté
43 lesEtatPortes : [EnumEtatPorte] = [EnumEtatPorte.FERME, EnumEtatPorte.FERME,EnumEtatPorte.FERME,EnumEtatPorte.FERME,EnumEtatPorte.FERME] # Déclaration d'une donnée variable de type tableau d'énumération et initialisation
44 # 5 portes fermées - 4 portes d'étage et 1 porte de cabine (la dernière)
45 laCabine : Cabine = Cabine(EtatCabine.ARRETE_FERME, 1, 4) # Déclation d'une donnée variable de type structure et initialisation
46 # 1 cabine, arrêté fermée, à l'étage 1 et avec la porte 4
47 lesEtages : [Etage] = [Etage(True,True,0), Etage(True,True,1), Etage(False,True,2), Etage(True,True,3)] # Déclaration d'une donnée variable de type tableau de 4 booléens et initialisation
48 # 4 étages, chaque étage, en service, éteint, avec une porte de son numéro
49 etageDAppel : int = -1 # Déclaration d'une donnée variable de type entier et initialisation
50 # Aucun étage appelé (valeur -1)
51 #
52 # SOUS-PROGRAMME afficherEtatCompletCabine
53 def afficherEtatCompletCabine() :
54 # DEBUT
55 print(" L'entrainement est", etatEntrainement)
56 print(" La porte de la cabine est dans l'état ", lesEtatPortes[laCabine.numPorte])
57 print(" La cabine est", laCabine.etat, "à l'étage ", laCabine.etageCourant)
58 # FIN
59 # FIN SOUS-PROGRAMME
60 #
61 # SOUS-PROGRAMME calculerEtatCabine - retourne une valeur de type EtatCabine
62 def calculerEtatCabine() :
63 # VAR LOC
64 result : EtatCabine
65 # DEBUT
66 if (etatEntrainement == EnumEtatEnt.ARRETE ) :
67 if (lesEtatPortes[laCabine.numPorte] == EnumEtatPorte.FERME) :
68 result = EtatCabine.ARRETE_FERME
69 else :
70 result = EtatCabine.ARRETE_OUVERT
71 elif (etatEntrainement == EnumEtatEnt.EN_DESCENTE ) :
72 result = EtatCabine.EN_DESCENTE_FERME
73 else :
74 result = EtatCabine.EN_MONTEE_FERME
75 return result
76 # FIN
77 # FIN SOUS-PROGRAMME
78
79 # DEBUT
80 print(" Début du programme 10")
81 # Affichage état de l'ascenseur
82 # Affichage état complet de la cabine
83 afficherEtatCompletCabine()
84 #Affichage état complet des étages
85 for numEtage in range(0,4) :
86 print(" L'étage ", numEtage, "est es ", lesEtages[numEtage].estES, ", éteint ", lesEtages[numEtage].estEteint,
87 "numéro de porte ", lesEtages[numEtage].numPorte,
88 "dans l'état ", lesEtatPortes[lesEtages[numEtage].numPorte])
89 # L'usager appelle l'ascenseur
90 etageDAppel = int(input('De quel étage appelez-vous? '))
91 if lesEtages[etageDAppel].estES :
92 if (etageDAppel > laCabine.etageCourant) :
93 print("FAIRE MONTER L'ENTRAINEMENT DE LA CABINE")
94 etatEntrainement = EnumEtatEnt.EN_MONTEE
95 laCabine.etat = calculerEtatCabine()
96 else :
97 if (etageDAppel < laCabine.etageCourant) :
98 print("FAIRE DESCENDRE L'ENTRAINEMENT DE LA CABINE")
99 etatEntrainement = EnumEtatEnt.EN_DESCENTE
100 laCabine.etat = calculerEtatCabine()
101 else :
102 #La cabine se tient déjà à l'étage demandé : il faut juste ouvrir les portes
103 print("FAIRE OUVRIR LA PORTE NUMERO : ", laCabine.numPorte)
104 lesEtatPortes[laCabine.numPorte] = EnumEtatPorte.OUVERT
105 print("FAIRE OUVRIR LA PORTE NUMERO : ", lesEtages[etageDAppel].numPorte)
106 lesEtatPortes[lesEtages[etageDAppel].numPorte] = EnumEtatPorte.OUVERT
107 laCabine.etat = calculerEtatCabine()
108 # Affichage état complet de la cabine
109 afficherEtatCompletCabine()
110 while ( laCabine.etageCourant != etageDAppel) : # La cabine n'est pas à l'étage d'appel
111 # Saisie de l'étage auquel arrive la cabine
112 laCabine.etageCourant = int(input('La cabine arrive à quel étage? '))
113 if (laCabine.etageCourant == etageDAppel) :
114 print("FAIRE ARRETER L'ENTRAINEMENT")
115 etatEntrainement = EnumEtatEnt.ARRETE
116 print("FAIRE OUVRIR LA PORTE NUMERO : ", laCabine.numPorte)
117 lesEtatPortes[laCabine.numPorte] = EnumEtatPorte.OUVERT
118 print("FAIRE OUVRIR LA PORTE NUMERO : ", lesEtages[etageDAppel].numPorte)
119 lesEtatPortes[lesEtages[etageDAppel].numPorte] = EnumEtatPorte.OUVERT
120 laCabine.etat = calculerEtatCabine()
121 # Affichage état complet de la cabine
122 afficherEtatCompletCabine()
123 else :
124 print(" l'appel ne peut être pris en compte car l'étage n'est pas en service")
125
126 print(" Fin du programme")
127 #
128 # FIN
Python Niveau 2 (Alex)
Exercice Hello Word
- Sans commentaire, si tu n'y arrives pas alors laisses tomber Python....
1 #!/usr/bin/env python3
2 print("Hello, world ! bientôt l'été")
Hello, world ! bientôt l'été
- Analyse:
- Non trop facile !
Exercice Hello Word compatible Python 2 et Python 3
1 #!/usr/bin/env python
2 # -*- coding: utf-8 -*-
3 from __future__ import print_function
4 print("hello, world ! bientôt l'été")
Hello, world ! bientôt l'été
- Analyse:
- Il existe plusieurs versions de Python, je ne parlerai ici que de la version 2 et 3 car elles ont de principales différences.
- Le changement le plus radical étant surement de transformer le print en fonction.
Python 2: print "bonjour"
Python 3: print("bonjour")
- Mais aussi:
Python 2 Python 3
print "Bonjour" → print("Bonjour")
print "Bonjour", variable1 → print("Bonjour", variable1)
print "\n".join([x, y]) → print(x, y, sep="\n")
print >> sys.stderr, "erreur" → print("Erreur", file=sys.stderr)
print "une ligne ", → print("une ligne", end="")
Exceptions
Python 2 Python 3
raise IOError, "file error" → raise IOError("file error")
raise "Erreur 404" → raise Exception("Erreur 404!")
raise TypeError, msg, tb → raise TypeError.with_traceback(tb)
Changement de nom de modules
Python 2 Python 3 _builtin__ → builtins ConfigParser → configparser copy_reg → copyreg cPickle → pickle Queue → queue repr → reprlib SocketServer → socketserver Tkinter → tkinter _winreg → winreg thread → _thread dummy_thread → _dummy_thread markupbase → _markupbase
Réorganisation
Python 2 Python 3 xrange() → range() reduce() → functools.reduce() intern() → sys.intern() unichr() → chr() basestring() → str() long() → int() itertools.izip() → zip() itertools.imap() → map() itertools.ifilter() → filter() itertools.ifilterfalse() → itertools.filterfalse() cookielib → http.cookiejar Cookie → http.cookies htmlentitydefs → html.entities HTMLParser → html.parser httplib → http.client Dialog → tkinter.dialog FileDialog → tkinter.FileDialog ScrolledText → tkinter.scolledtext SimpleDialog → tkinter.simpledialog Tix → tkinter.tix Tkconstants → tkinter.constants Tkdnd → tkinter.dnd tkColorChooser → tkinter.colorchooser tkCommonDialog → tkinter.commondialog tkFileDialog → tkinter.filedialog tkFont → tkinter.font tkMessageBox → tkinter.messagebox tkSimpleDialog → tkinter.simpledialog robotparser → urllib.robotparser urlparse → urllib.parse cStringIO.StringIO() → io.StringIO UserString → collections.UserString UserList → collections.UserList
Nombres
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 nb_entier = 42
4 print(type(nb_entier))
5 nb_long = 300000000000
6 print(type(nb_long))
7 nb_complexe = 2+4j
8 print(type(nb_complexe))
9 # Changement dynamique de type
10 for nb in range(20):
11 nb2 = nb ** nb
12 print(nb2, type(nb2))
13 # Modulo
14 print("9 % 5 =", 9 % 5)
15 # Puissance
16 print("2 ** 4 =", 2 ** 4)
17 print('=' * 20)
18 # Constructeurs
19 nb = int("42")
20 print(nb, type(nb))
21 nb = float("42.123")
22 print(nb, type(nb))
23 nb = complex("2+5j")
24 print(nb, type(nb))
25 print('=' * 20)
26 print(hex(456))
27 print(oct(456))
28 print(bin(456))
29 print('=' * 20)
30 print(chr(65))
31 print(ord('A'))
- Analyse:
Chaine
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 ch = "Une chaine double quote peut contenir des ' "
4 ch2 = 'Une chaine simple quote peut contenir des " '
5 ch3 = """Une chaine
6 qui s'etend
7 sur
8 plusieurs lignes"""
9 ch4 = "on peut mettre antislash pour afficher une \" dans une chaine double quote"
10 print(ch, type(ch))
11 print(ch2, type(ch2))
12 print(ch3, type(ch3))
13 print(ch4, type(ch4))
14 print('=' * 20)
15 # Unicode
16 ch_sans_unicode = "été"
17 ch_avec_unicode = "été"
18 print(ch_sans_unicode, type(ch_sans_unicode))
19 print(ch_avec_unicode, type(ch_avec_unicode))
20 print("Taille de la chaine ch_sans_unicode:", len(ch_sans_unicode))
21 print("Taille de la chaine ch_avec_unicode:", len(ch_avec_unicode))
22 print('=' * 20)
23 # Chaine raw
24 ch_sans_raw = 'une chaine\tavec\ndes caractères spéciaux'
25 ch_avec_raw = r'une chaine\tavec\ndes caractères spéciaux'
26 print(ch_sans_raw, type(ch_sans_raw))
27 print(ch_avec_raw, type(ch_avec_raw))
28 print('=' * 20)
29 ch = "bonjour tout le monde"
30 print("ch:", ch)
31 # Indicage
32 print("ch[2]:", ch[2])
33 print("ch[-2]:", ch[-2])
34 # Tranches de valeurs
35 print("ch[3:5]:", ch[3:5])
36 print("ch[-8:-2]:", ch[-8:-2])
37 print("ch[3:-2]:", ch[3:-2])
38 print("ch[3:]:", ch[3:])
39 print("ch[:-2]:", ch[:-2])
40 # Multiplication d'une chaine par un entier
41 ch2 = 'hello' * 4
42 print(ch2)
43 # On peut itérer sur une séquence
44 for car in ch:
45 print(car)
46 # Concaténation
47 ch3 = ch + ch2
48 print(ch3)
49 # Appartenance
50 print("'xyz' in 'bonjour' ?", 'xyz' in 'bonjour')
51 print("'njo' in 'bonjour' ?", 'njo' in 'bonjour')
52 print('=' * 20)
53 # Masque d'affichage
54 notes = "Eleve: %-10s Age: %2d Note: %5.2f"
55 print("Masque:", notes)
56 print("Note Bart:", notes % ('Bart', 10, 5.55))
57 # Masque d'affectation
58 note_lisa = notes % ('Lisa', 12, 18.42)
59 print("note_lisa:", note_lisa)
60 print('=' * 20)
61 liste = [ ('Bart', 10, 1.23),
62 ('Lisa', 12, 19.99),
63 ('Homer', 42, 0.1)
64 ]
65 for prenom, age, note in liste:
66 print(notes % (prenom, age, note))
67 print('=' * 20)
68 for var in liste:
69 print(var, type(var))
70 #print(notes % (var[0], var[1], var[2]))
71 print(notes % var)
72 # Test d'égalité : ==
73 ch = 'hello'
74 ch2 = 'hello'
75 print("ch == ch2 ?", ch == ch2)
76 # S'agit-il du même objet en mémoire : is
77 print("ch is ch2 ?", ch is ch2)
78 print('=' * 20)
79 # La classe chaine de caractères fournit un ensemble de méthodes
80 print("ch.upper():", ch.upper())
81 print("ch.center(40):", ch.center(40,'*'))
82 print('=' * 20)
83 # split
84 ch = "bonjour tout le monde"
85 print("ch.split()", ch.split())
86 print("ch.split(' ')", ch.split(' '))
87 print("ch.split('o')", ch.split('o'))
88 print('=' * 20)
89 # replace
90 ch2 = ch.replace('o', 'X')
91 print("ch2:", ch2)
92 print("ch (non modifiée):", ch)
93 ch2 = ch.replace('jour', 'soir')
94 print("ch2:", ch2)
95 print('=' * 20)
96 # find
97 print("'ou' apparait a la position:", ch.find('ou'))
98 print('=' * 20)
99 # format
100 print("info: {0} {1} {2} {1} {0}".format('a', 'b', 'c'))
101 print('=' * 20)
102 # Espace de noms du programme principal
103 print(dir())
104 print('=' * 20)
105 # Attributs et méthodes d'une classe d'objet, ex. une chaine
106 print(dir(''))
107 print('=' * 20)
108 # Les chaines documentaires
109 def fct():
110 "Ceci est la documentation de ma fonction"
111 pass
112 print("Doc de la fonction fct():", fct.__doc__)
113 print('=' * 20)
114 print("Documentation de la classe str():", str.__doc__)
115 print('=' * 20)
116 print("Documentation de la méthode split de la classe str():", str.split.__doc__)
117 print('=' * 20)
118 print("Documentation de la méthode find de la classe str():", str.find.__doc__)
Python Niveau 3 (Jean François)
Loto
- Écrire un programme qui réalise un tirage de Loto. Ce dernier est composé de:
- 5 boules parmi 49 boules numérotées de 1 à 49
- 1 boule “chance” parmi 10 boules numérotées de 1 à 10
1 # loto_01.py
2 import random
3 nb_boules=49
4 boules = [ x for x in range(1,nb_boules+1) ]
5 tirage = []
6 for boule in range(5):
7 une_boule = boules[ random.randint(1,len( boules )) - 1 ]
8 tirage.append( une_boule )
9 boules.remove(une_boule)
10 chance = random.randint(1,10)
11 print(tirage, chance)
12 tirage.sort()
13 print(tirage)
- Reprendre le programme de Loto précédent.
- Utiliser une Classe “Loto” avec un constructeur qui génère un tirage.
Un tirage est composé de : - Un numéro de tirage - Les 5 boules - Le numéro Chance
- Ajouter une variable de classe qui mémorise les tirages ainsi qu’une méthode qui renvoie un tirage en fonction du numéro du tirage.
- Créer une référence au dernier tirage appelé “dernierTirage” (ce n’est donc pas une instanciation)
- Ajouter de la documentation et afficher celle-ci dans la console (introspection)
- Ajouter un morceau de code qui peut générer une exception:
- On demande un numéro de tirage et on affiche le tirage correspondant.
1 # loto_02.py
2 # v2: on utilise une Classe
3 """ Un module pour gerer des tirages de Loto """
4 import random
5
6 class Loto:
7 """ Permet d'instancier des tirages de Loto """
8 nb_boules=49
9 les_tirages = []
10
11 def __init__(self, num_tirage):
12 """ Cree un tirage [num, les 5 boules, numero change]) """
13 tirage_5_boules = []
14 boules = [ x for x in range(1,Loto.nb_boules+1) ]
15 for boule in range(5):
16 une_boule = boules[ random.randint(1,len( boules )) - 1 ]
17 tirage_5_boules.append( une_boule )
18 boules.remove(une_boule)
19
20 chance = random.randint(1,10)
21 tirage_5_boules .sort()
22 self.num = num_tirage
23 self.cinqBoules = tirage_5_boules
24 self.chance = chance
25 Loto.les_tirages.append( self )
26
27 def __str__(self):
28 """ conversion d'un tirage en chaine """
29 ch = "Numero: " + str(self.num) + " ,5 boules: "
30 for i in range(5): ch += str( self.cinqBoules[i] ) + " - "
31 ch += " ,Numero chance: "+ str(self.chance)
32 return ch
33
34 @classmethod
35 def getUnTirage(cls, num ):
36 """ Exemple de methode de classe """
37 for t in cls.les_tirages:
38 if t.num == num: return t
39 return None
40
41 if __name__ == "__main__":
42 num = 100
43 for i in range(5):
44 un_tirage = Loto(num+i)
45 le_dernier_tirage = un_tirage
46 for t in Loto.les_tirages:
47 print( t.num, t.cinqBoules, t.chance)
48
49 print("Dernier: %s\n" % (str(le_dernier_tirage) ))
50 try:
51 num = int( input("Numero de tirage ? ") )
52 except:
53 print("ERREUR: saisie incorrect")
54 else:
55 print("Tirage 103: %s\n" % (str( Loto.getUnTirage( num ) ) ) )
Probabilité course lièvre/tortue
- Main
1 import lievre.py
2 nb_coup:int=1000000
3 i:int=0
4 while i < nb_coup:
5 lievre.py
6 i=i+1
- lievre2.py
1 ###### lievre2.py: le lievre et la tortue
2 from random import *
3 total= 0
4 unGagnant = False
5 gagnant = None
6 while not unGagnant:
7 de = randint(1,6)
8 print ("Valeur du lance: ", de )
9 total = total + de
10 if de == 6 :
11 gagnant = "Lievre"
12 unGagnant = True
13 elif total >= 6:
14 gagnant = "Tortue"
15 unGagnant = True
16 print ("Gagnant: ", gagnant )
- Tortue.py
1 from random import *
2 lievre:int=0
3 i:int=1000000
4 dep=i
5 r:int=0
6 def golievre():
7 total= 0
8 while True:
9 de = randint(1,6)
10 if de == 6 :
11 r=1
12 break
13 total = total + de
14 if total >= 6:
15 r=0
16 break
17 return r
18 # START
19 while i > 0:
20 retour=golievre()
21 #print(retour)
22 if retour==1:
23 lievre+=1
24 i-=1
25 lievre_gagne=lievre
26 tortue_gagne=dep-lievre
27 pourcent=100*lievre_gagne/(tortue_gagne+lievre_gagne)
28 print(lievre, 'sur 1000000', pourcent)
- Analyse:
Premiers programmes
Quizz
- Python 2
Création d'un programme Quizz
|
Conversion en Python3
1 #!/usr/bin/python3
2 # -*- coding: utf-8 -*-
3 from random import choice
4 #from string import maketrans
5 accents="éèçêàôùû"
6 asciis="eeceaouu"
7 conversion=str.maketrans(accents, asciis)
8 adieu = ['fin', 'stop', 'bye', 'ciao']
9 reponse = 'X'
10 questions=['Allemagne:Berlin',
11 'Autriche:Vienne',
12 'Belgique:Bruxelle',
13 'Bulgarie:Sofia',
14 'Chypre:Nicosie',
15 'Danemark:Copenhague']
16 print('Donner la capitale du pays....')
17 print('Répondre "fin", "bye", ou "ciao" pour arrêter')
18 while reponse not in adieu:
19 quest=choice(questions)
20 reponse=input(quest.split(':')[0]+'? ').lower()
21 if reponse not in adieu:
22 if reponse.translate(conversion)==quest.split(':')[1].lower():
23 print(':)')
24 else:
25 print("Faux, c'est",quest.split(':')[1])
Structures Conditionnelles
Déterminer si une année saisie par l'utilisateur est bissextile. Il s'agit d'un sujet très prisé des enseignants en informatique quand il s'agit d'expliquer les conditions. Mille pardons, donc, à ceux qui ont déjà fait cet exercice dans un autre langage mais je trouve que ce petit programme reprend assez de thèmes abordés dans ce chapitre pour être réellement intéressant. Les règles qui déterminent si une année est bissextile ou non.
Une année est dite bissextile si c'est un multiple de 4, sauf si c'est un multiple de 100. Toutefois, elle est considérée comme bissextile si c'est un multiple de 400. Si une année n'est pas multiple de 4, on s'arrête là, elle n'est pas bissextile. Si elle est multiple de 4, on regarde si elle est multiple de 100. Si c'est le cas, on regarde si elle est multiple de 400. Si c'est le cas, l'année est bissextile. Sinon, elle n'est pas bissextile. Sinon, elle est bissextile.
1 digraph G {
2 subgraph cluster_0 {
3 style=filled;
4 color=lightgrey;
5 node [style=filled,color=white];
6 a0 -> test_multiple4
7 test_multiple4 -> test_multiple100 [label="oui"]
8 test_multiple100 -> end_no [label="non"; color="red"]
9 test_multiple100 -> test_multiple400 [label="oui"]
10 test_multiple400 -> end_yes [label="oui"]
11 test_multiple400 -> end_no [label="non"; color="red"]
12 label = "algorythme";
13 }
14 subgraph cluster_1 {
15 node [style=filled]
16 label = "variables"
17 b0 -> int
18 var_multiple4 -> bool
19 var_multiple100 -> bool
20 var_multiple400 -> bool
21 on [label="O/N"]
22 on -> bool
23 var_multiple4 -> on [ color="blue" ]
24 var_multiple100 -> on [ color="blue" ]
25 var_multiple400 -> on [ color="blue" ]
26 color=blue
27 }
28 a0 [color=yellow; label="Demander l'année"]
29 b0 [label="annee"]
30 test_multiple4 [shape=Mdiamond; color=cyan; label="Est ce un multiple de 4?"]
31 test_multiple100 [shape=Mdiamond; color=cyan; label="Est ce un multiple de 100?"]
32 test_multiple400 [shape=Mdiamond; color=cyan; label="Est ce un multiple de 400?"]
33 var_multiple4 [label="multiple4"]
34 start [style=filled; shape=Mdiamond; color=bisque; label="Déterminer si une année\nsaisie par l'utilisateur\nest bissextile."];
35 int [style=filled; shape=polygon; color="chocolate1"; label="int"]
36 bool [style=filled; shape=polygon; color="chocolate1"; label="boolean"]
37 end_no [style=filled; shape=Msquare; color=red; label="non"]
38 end_yes [style=filled; shape=Msquare; color=chartreuse; label="Oui"]
39 start -> a0
40 a0 -> b0 [color="blue"]
41 test_multiple4 -> var_multiple4 [color="blue"]
42 test_multiple100 -> var_multiple100 [color="blue"]
43 test_multiple400 -> var_multiple400 [color="blue"]
44 test_multiple4 -> end_no [label="non"; color="red"]
45 }
- Ma solution:
1 #!/usr/bin/python3
2 # -*- coding: utf-8 -*-
3 # Variables
4 annee:int
5 var_multiple100:bool
6 multiple4:bool
7 var_multiple400:bool
8 on:bool
9 # Debut
10 annee=int(input("Saisir une année\n"))
11 multiple4 = annee % 4
12 multiple400 = annee % 400
13 multiple100 = annee % 100
14 if multiple4==0 and multiple100!=0 or multiple400==0:
15 print("Bisextile")
16 else:
17 print("Non Bisextile")
- Correction:
1 # Programme testant si une année, saisie par l'utilisateur,
2 # est bissextile ou non
3 annee = input("Saisissez une année : ") # On attend que l'utilisateur saisisse l'année qu'il désire tester
4 annee = int(annee) # Risque d'erreur si l'utilisateur n'a pas saisi un nombre
5 bissextile = False # On crée un booléen qui vaut vrai ou faux
6 # selon que l'année est bissextile ou non
7 if annee % 400 == 0:
8 bissextile = True
9 elif annee % 100 == 0:
10 bissextile = False
11 elif annee % 4 == 0:
12 bissextile = True
13 else:
14 bissextile = False
15 if bissextile: # Si l'année est bissextile
16 print("L'année saisie est bissextile.")
17 else:
18 print("L'année saisie n'est pas bissextile.")
La modularité
- Créer un module qui sera appellé dans un programme principal.
- multiply.py (Module)
1 """module multiply contenant la fonction table"""
2 def table(nb, max=10):
3 """Fonction affichant la table de multiplication par nb de 1 * nb jusqu'à max * nb"""
4 i = 0
5 while i < max:
6 print(i + 1, "*", nb, "=", (i + 1) * nb)
7 i += 1
- test.py (Programme principal)
1 #!/usr/bin/python3
2 # -*- coding: utf-8 -*-
3 import os, time
4 from multiply import table
5 # test de la fonction table
6 table(3, 20)
7 #os.system("pause")
8 time.sleep(10)
- test.py
- On envoie la valeur 3 dans nb de table
- On envoie la valeur 20 dans max de table
- si max n'a pas de valeur, il sera initialisé par défaut à 10
Signature d'une fonction
- On entend par « signature de fonction » les éléments qui permettent au langage d'identifier ladite fonction.
- En Python comme vous avez pu le voir, on ne précise pas les types des paramètres.
- La signature d'une fonction est tout simplement son nom.
- On ne peut définir deux fonctions du même nom sinon l'ancienne définition est écrasée par la nouvelle.
L'instruction return
1 def carre(valeur):
2 return valeur * valeur
- L'instruction return signifie qu'on va renvoyer la valeur, pour pouvoir la récupérer ensuite et la stocker dans une variable par exemple.
- Cette instruction arrête le déroulement de la fonction, le code situé après le return ne s'exécutera pas.
Les fonctions lambda
- mot-clé: lambda
exemple:
1 >>> lambda x: x * x
2 <function <lambda> at 0x00BA1B70>
3 >>>
Appeler une fonction lambda
1 >>> f = lambda x: x * x
2 >>> f(5)
3 25
4 >>> f(-18)
5 324
6 >>>
autre exemple:
1 >>> lambda x, y: x + y
Résumé
Une fonction est une portion de code contenant des instructions, que l'on va pouvoir réutiliser facilement. Découper son programme en fonctions permet une meilleure organisation. Les fonctions peuvent recevoir des informations en entrée et renvoyer une information grâce au mot-clé return. Les fonctions se définissent de la façon suivante : def nom_fonction(parametre1, parametre2, parametreN):
- Quelques règles:
- On peut mettre un module dns le programme source avec def
- On peut l'importer depuis un autre fichier contenu dans le même répertoire en précisant le nom du fichier (sans l'extension.py).
- Python va lire (ou créer si il n'existe pas) un fichier.pyc.
- À partir de la version 3.2, ce fichier se trouve dans un dossier__pycache__.
- Ce fichier est généré par Python et contient le code compilé du module.
Rendre autonomes les modules appelés
- Dans l'exemple sur la modularité, il y a deux programmes.
- Un principal, et un qui contient une fonction.
- Reprenons le module multiply.py
1 """module multiply contenant la fonction table"""
2 def table(nb, max=10):
3 """Fonction affichant la table de multiplication par nb de 1 * nb jusqu'à max * nb"""
4 i = 0
5 while i < max:
6 print(i + 1, "*", nb, "=", (i + 1) * nb)
7 i += 1
- Ce module définit une seule fonction,table, qu'il pourrait être bon de tester.
- Changement effectué:
1 #!/usr/bin/python3
2 """module multiply contenant la fonction table"""
3
4 import os
5
6 def table(nb, max=10):
7 """Fonction affichant la table de multiplication par nb de 1 * nb jusqu'à max * nb"""
8 i = 0
9 while i < max:
10 print(i + 1, "*", nb, "=", (i + 1) * nb)
11 i += 1
12
13 # test de la fonction table
14 if __name__ == "__main__":
15 table(4)
16 os.system("pause")
- Explications:
- Le module multiply.py est devenu indépendant avec la variable __name__
Les packages
- Les modules sont un des moyens de regrouper plusieurs fonctions.
- Les packages sont un moyen de regrouper plusieurs des modules.
Créer ses propres packages
- Il faut commencez par créer, dans le même dossier que le programme Python, un répertoire portant le nom du package.
- Dans le répertoire:
- mettre les modules et les fichiers à l'extension.py
- créer des sous-packages de la même façon, en créant un répertoire dans le package
- __init__.py (Optionnel depuis la version 3.3 de python)
Création d'un programme
1 #!/usr/bin/python3
2 # -*- coding: utf-8 -*-
3 import os # On importe le module os qui dispose de variables
4 # et de fonctions utiles pour dialoguer avec votre
5 # système d'exploitation
Graphismes
TK1
1 #!/usr/bin/python3
2 # -*- coding: utf-8 -*-
3 # script bonjour.py
4 from tkinter import *
5 # Création de la fenêtre principale (main window)
6 Mafenetre = Tk()
7 # Création d'un widget Label (texte 'Bonjour tout le monde !')
8 Label1 = Label(Mafenetre, text = 'Bonjour tout le monde !', fg = 'red')
9 # Positionnement du widget avec la méthode pack()
10 Label1.pack()
11 # Création d'un widget Button (bouton Quitter)
12 Bouton1 = Button(Mafenetre, text = 'Quitter', command = Mafenetre.destroy)
13 Bouton1.pack()
14 # Lancement du gestionnaire d'événements
15 Mafenetre.mainloop()
TK2
1 #!/usr/bin/python3
2 # script de.py
3 #(C) Fabrice Sincère
4 from tkinter import *
5 import random
6 def NouveauLance():
7 nb = random.randint(1,6)
8 Texte.set('Résultat -> ' + str(nb))
9 # Création de la fenêtre principale (main window)
10 Mafenetre = Tk()
11 Mafenetre.title('Dé à 6 faces')
12 Mafenetre.geometry('300x100+400+400')
13 # Création d'un widget Button (bouton Lancer)
14 BoutonLancer = Button(Mafenetre, text ='Lancer', command = NouveauLance)
15 # Positionnement du widget avec la méthode pack()
16 BoutonLancer.pack(side = LEFT, padx = 5, pady = 5)
17 # Création d'un widget Button (bouton Quitter)
18 BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
19 BoutonQuitter.pack(side = LEFT, padx = 5, pady = 5)
20 Texte = StringVar()
21 NouveauLance()
22 # Création d'un widget Label (texte 'Résultat -> x')
23 LabelResultat = Label(Mafenetre, textvariable = Texte, fg ='red', bg ='white')
24 LabelResultat.pack(side = LEFT, padx = 5, pady = 5)
25 Mafenetre.mainloop()
TK3
1 #!/usr/bin/python3
2 # script frames.py
3 #(C) Fabrice Sincère
4 from tkinter import *
5 # Création de la fenêtre principale
6 Mafenetre = Tk()
7 Mafenetre.title('Frame widget')
8 Mafenetre['bg']='bisque' # couleur de fond
9 # création d'un widget Frame dans la fenêtre principale
10 Frame1 = Frame(Mafenetre,borderwidth=2,relief=GROOVE)
11 Frame1.pack(side=LEFT,padx=10,pady=10)
12 # création d'un second widget Frame dans la fenêtre principale
13 Frame2 = Frame(Mafenetre,borderwidth=2,relief=GROOVE)
14 Frame2.pack(side=LEFT,padx=10,pady=10)
15 # création d'un widget Frame... dans un widget Frame
16 # le widget Frame1 est le parent du widget Frame3
17 # le parent du widget Frame1 est le widget Mafenetre (fenêtre principale)
18 Frame3 = Frame(Frame1,bg="white",borderwidth=2,relief=GROOVE)
19 Frame3.pack(side=LEFT,padx=10,pady=10)
20 # création d'un widget Label et d'un widget Button dans un widget Frame
21 Label(Frame1,text="RDV dentiste samedi à 15h").pack(padx=10,pady=10)
22 Button(Frame1,text="Effacer",fg='navy',command=Frame1.destroy).pack(padx=10,pady=10)
23 Label(Frame2,text="Réviser le contrôle d'info").pack(padx=10,pady=10)
24 Button(Frame2,text="Effacer",fg='navy',command=Frame2.destroy).pack(padx=10,pady=10)
25 Label(Frame3,text="RDV dentiste à 10h",bg="white").pack(padx=10,pady=10)
26 Button(Frame3,text="Effacer",fg='navy',command=Frame3.destroy).pack(padx=10,pady=10)
27 Mafenetre.mainloop()
TK4
1 #!/usr/bin/python3
2 # script mot_de_passe.py
3 #(C) Fabrice Sincère
4 from tkinter import *
5 from tkinter.messagebox import * # boîte de dialogue
6 def Verification():
7 if Motdepasse.get() == 'python27':
8 # le mot de passe est bon : on affiche une boîte de dialogue puis on ferme la fenêtre
9 showinfo('Résultat','Mot de passe correct.\nAu revoir !')
10 Mafenetre.destroy()
11 else:
12 # le mot de passe est incorrect : on affiche une boîte de dialogue
13 showwarning('Résultat','Mot de passe incorrect.\nVeuillez recommencer !')
14 Motdepasse.set('')
15 # Création de la fenêtre principale (main window)
16 Mafenetre = Tk()
17 Mafenetre.title('Identification requise')
18 # Création d'un widget Label (texte 'Mot de passe')
19 Label1 = Label(Mafenetre, text = 'Mot de passe ')
20 Label1.pack(side = LEFT, padx = 5, pady = 5)
21 # Création d'un widget Entry (champ de saisie)
22 Motdepasse= StringVar()
23 Champ = Entry(Mafenetre, textvariable= Motdepasse, show='*', bg ='bisque', fg='maroon')
24 Champ.focus_set()
25 Champ.pack(side = LEFT, padx = 5, pady = 5)
26 # Création d'un widget Button (bouton Valider)
27 Bouton = Button(Mafenetre, text ='Valider', command = Verification)
28 Bouton.pack(side = LEFT, padx = 5, pady = 5)
29 Mafenetre.mainloop()
TK5
1 #!/usr/bin/python3
2 # script spinbox.py
3 #(C) Fabrice Sincère
4 from tkinter import *
5 def carre():
6 """ Calcul du carré """
7 Resultat.set("Carré = "+str(float(Valeur.get())**2))
8 # Création de la fenêtre principale (main window)
9 Mafenetre = Tk()
10 Mafenetre.title("Spinbox widget")
11 Valeur = StringVar()
12 Valeur.set(2.0)
13 # Création d'un widget Spinbox
14 boite = Spinbox(Mafenetre,from_=0,to=10,increment=0.5,textvariable=Valeur,width=5,command=carre)
15 boite.pack(padx=30,pady=10)
16 # Création d'un widget Label
17 Resultat = StringVar()
18 carre()
19 Label(Mafenetre,textvariable=Resultat).pack(padx=30,pady=10)
20 Mafenetre.mainloop()
TK6
1 #!/usr/bin/python3
2 # script scale.py
3 #(C) Fabrice Sincère
4 from tkinter import *
5 def maj(nouvelleValeur):
6 # nouvelle valeur en argument
7 print(nouvelleValeur)
8 def plus():
9 Valeur.set(str(int(Valeur.get())+10))
10 print(Valeur.get())
11 def moins():
12 Valeur.set(str(int(Valeur.get())-10))
13 print(Valeur.get())
14 # Création de la fenêtre principale (main window)
15 Mafenetre = Tk()
16 Mafenetre.title("Scale widget")
17 Valeur = StringVar()
18 Valeur.set(50)
19 # Création d'un widget Scale
20 echelle = Scale(Mafenetre,from_=-100,to=100,resolution=10,orient=HORIZONTAL,length=300,width=20,label="Offset",tickinterval=20,variable=Valeur,command=maj)
21 echelle.pack(padx=10,pady=10)
22 # Création d'un widget Button (bouton +)
23 Button(Mafenetre,text="+",command=plus).pack(padx=10,pady=10)
24 # Création d'un widget Button (bouton -)
25 Button(Mafenetre,text="-",command=moins).pack(padx=10,pady=10)
26 Mafenetre.mainloop()
TK7
1 #!/usr/bin/python3
2 # script cercle.py
3 #(C) Fabrice Sincère
4 from tkinter import *
5 import random
6 def Cercle():
7 """ Dessine un cercle de centre (x,y) et de rayon r """
8 x = random.randint(0,Largeur)
9 y = random.randint(0,Hauteur)
10 r = 20
11 Canevas.create_oval(x-r, y-r, x+r, y+r, outline='blue', fill='blue')
12 def Effacer():
13 """ Efface la zone graphique """
14 Canevas.delete(ALL)
15 # Création de la fenêtre principale (main window)
16 Mafenetre = Tk()
17 Mafenetre.title('Cercle')
18 # Création d'un widget Canvas (zone graphique)
19 Largeur = 480
20 Hauteur = 320
21 Canevas = Canvas(Mafenetre, width = Largeur, height =Hauteur, bg ='white')
22 Canevas.pack(padx =5, pady =5)
23 # Création d'un widget Button (bouton Go)
24 BoutonGo = Button(Mafenetre, text ='Go', command = Cercle)
25 BoutonGo.pack(side = LEFT, padx = 10, pady = 10)
26 # Création d'un widget Button (bouton Effacer)
27 BoutonEffacer = Button(Mafenetre, text ='Effacer', command = Effacer)
28 BoutonEffacer.pack(side = LEFT, padx = 5, pady = 5)
29 # Création d'un widget Button (bouton Quitter)
30 BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
31 BoutonQuitter.pack(side = LEFT, padx = 5, pady = 5)
32 Mafenetre.mainloop()
TK8
1 #!/usr/bin/python3
2 # script cible.py
3 #(C) Fabrice Sincère
4 from tkinter import *
5 import random
6 def Cercle():
7 """ Dessine un cercle de centre (x,y) et de rayon r """
8 x = random.randint(0,Largeur)
9 y = random.randint(0,Hauteur)
10 r = 10
11 # on dessine un cercle dans la zone graphique
12 item = Canevas.create_oval(x-r, y-r, x+r, y+r, outline='black', fill='black')
13 print("Création du cercle (item" , item ,")")
14 # affichage de tous les items de Canevas
15 print(Canevas.find_all())
16 def Undo():
17 """ Efface le dernier cercle"""
18 if len(Canevas.find_all()) > 1:
19 item = Canevas.find_all()[-1]
20 # on efface le cercle
21 Canevas.delete(item)
22 print("Suppression du cercle (item" , item ,")")
23 # affichage de tous les items de Canevas
24 print(Canevas.find_all())
25 def EffacerTout():
26 """ Efface tous les cercles"""
27 while len(Canevas.find_all()) > 1:
28 Undo()
29 # Création de la fenêtre principale (main window)
30 Mafenetre = Tk()
31 Mafenetre.title('Cible')
32 # Image de fond
33 photo = PhotoImage(file="tk_cible.gif")
34 # Création d'un widget Canvas (zone graphique)
35 Largeur = 550
36 Hauteur = 550
37 Canevas = Canvas(Mafenetre,width = Largeur, height =Hauteur)
38 item = Canevas.create_image(0,0,anchor=NW, image=photo)
39 print("Image de fond (item",item,")")
40 Canevas.pack()
41 # Création d'un widget Button
42 BoutonGo = Button(Mafenetre, text ='Tirer', command = Cercle)
43 BoutonGo.pack(side = LEFT, padx = 10, pady = 10)
44 # Création d'un widget Button
45 BoutonEffacer = Button(Mafenetre, text ='Effacer le dernier tir', command = Undo)
46 BoutonEffacer.pack(side = LEFT, padx = 10, pady = 10)
47 # Création d'un widget Button
48 BoutonEffacerTout = Button(Mafenetre, text ='Effacer tout', command = EffacerTout)
49 BoutonEffacerTout.pack(side = LEFT, padx = 10, pady = 10)
50 # Création d'un widget Button (bouton Quitter)
51 BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
52 BoutonQuitter.pack(side = LEFT, padx = 10, pady = 10)
53 Mafenetre.mainloop()
Sauvegarde
- Je travaille sur un système Linux, je réinstalle quelques fois mon système.
- J'ai besoin pour cela de créer une sauvegarde.
Cahier des charges
- En utilisant au maximum Python, et de façon sécurisée.
- voici les différentes parties à sauvegarder sur un autre support:
- /etc
- /var
- /home
- /root
- Établir la liste de tous les programmes installés pour les réinstaller.
- Sauvegarder les crontab.
Shell / Python
- J'ai créé au cours de toutes ces années Linux, plusieurs centaines de scripts shell, des plus rudimentaires aux plus complexes.
- Un bon exercice sera de les retranscrire tous en Python.
- Je commencerai par les plus simples, il y a du travail.....
Gestion Système
Intro
- Le module os est une bibliothèque dédié aux besoins de gestion de fichiers et de dossiers.
- Pour python un chemin (ou path ), c'est une chaine de caractères, il existe donc des méthodes pour la manipuler:
1 >>> import os.path
2 >>> help(os.path)
abspath(path) → Retourne un chemin absolu basename(p) → Retourne le dernier élément d'un chemin commonprefix(list) → Retourne le chemin commun le plus long d'une liste de chemins dirname(p) → Retourne le dossier parent de l'élément exists(path) → Test si un chemin existe getaTime(filename) → Retourne la date du dernier accès au fichier [os.stat()] getctime(filename) → Retourne la date du dernier changement de métadonnées du fichier getmTime(filename) → Retourne la date de la dernière modification du fichier getsize(filename) → Retourne la taille d'un fichier (en octets) isabs(s) → Test si un chemin est absolu isdir(s) → Test si le chemin est un dossier isfile(path) → Test si le chemin est un fichier régulier islink(path) → Test si le chemin est un lien symbolique ismount(path) → Test si le chemin est un point de montage join(path, s) → Ajoute un élément au chemin passé en paramètre normcase(s) → Normalise la casse d'un chemin normpath(path) → Normalise le chemin, élimine les doubles barres obliques, etc. realpath(filename) → Retourne le chemin canonique du nom de fichier spécifié (élimine les liens symboliques) samefile(f1, f2) → Test si deux chemins font référence au même fichier réel sameopenfile(f1, f2) → Test si deux objets de fichiers ouverts font référence au même fichier split(p) → Fractionne un chemin d'accès. Retourne un tuple
1 >>> import os
2 >>> path = "/home/olivier/scripts/cgi-bin/action.py"
3 >>> os.path.dirname(path)
4 '/home/olivier/scripts/cgi-bin'
5 >>> os.path.basename(path)
6 'action.py'
7 >>> os.path.join(path, "func")
8 '/home/olivier/scripts/cgi-bin/action.py/func'
9 >>> os.path.split(path)
10 ('/home/olivier/scripts/cgi-bin', 'action.py')
11 >>> os.path.abspath(".")
12 '/home/olivier'
Fichiers
- Commande Linux: ls -rtl
| Linux | Python |
|---|---|
| Nom: rtl | Nom: rtl.py |
| #!/bin/sh | #!/usr/bin/python3.8 |
| ls -rtl --color | import os |
| os.system('ls -rtl --color') |








