En pratique
De TARENTINO
Array
Réferences: Doctor Python Pythonnerie sdz.tdct.org Python en ligne
Sommaire
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
1 #!/usr/bin/env python3
2 print("Hello, world ! bientôt l'été")
Hello, world ! bientôt l'été
Exercice Hello Word compatible Python 2 et Python 31 #!/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é
Python 2: print "bonjour"
Python 3: print("bonjour")
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="")
ExceptionsPython 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 modulesPython 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éorganisationPython 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'))
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
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)
Un tirage est composé de : - Un numéro de tirage - Les 5 boules - Le numéro Chance
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
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
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 )
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)
|
Premiers programmes
Quizz
Création d'un programme Quizz
|
Graphismes
TK1 1 # -*- coding: utf-8 -*-
2 # script bonjour.py
3 from tkinter import *
4 # Création de la fenêtre principale (main window)
5 Mafenetre = Tk()
6 # Création d'un widget Label (texte 'Bonjour tout le monde !')
7 Label1 = Label(Mafenetre, text = 'Bonjour tout le monde !', fg = 'red')
8 # Positionnement du widget avec la méthode pack()
9 Label1.pack()
10 # Création d'un widget Button (bouton Quitter)
11 Bouton1 = Button(Mafenetre, text = 'Quitter', command = Mafenetre.destroy)
12 Bouton1.pack()
13 # Lancement du gestionnaire d'événements
14 Mafenetre.mainloop()
TK2 1 # script de.py
2 #(C) Fabrice Sincère
3 from tkinter import *
4 import random
5 def NouveauLance():
6 nb = random.randint(1,6)
7 Texte.set('Résultat -> ' + str(nb))
8 # Création de la fenêtre principale (main window)
9 Mafenetre = Tk()
10 Mafenetre.title('Dé à 6 faces')
11 Mafenetre.geometry('300x100+400+400')
12 # Création d'un widget Button (bouton Lancer)
13 BoutonLancer = Button(Mafenetre, text ='Lancer', command = NouveauLance)
14 # Positionnement du widget avec la méthode pack()
15 BoutonLancer.pack(side = LEFT, padx = 5, pady = 5)
16 # Création d'un widget Button (bouton Quitter)
17 BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
18 BoutonQuitter.pack(side = LEFT, padx = 5, pady = 5)
19 Texte = StringVar()
20 NouveauLance()
21 # Création d'un widget Label (texte 'Résultat -> x')
22 LabelResultat = Label(Mafenetre, textvariable = Texte, fg ='red', bg ='white')
23 LabelResultat.pack(side = LEFT, padx = 5, pady = 5)
24 Mafenetre.mainloop()
TK3 1 # script frames.py
2 #(C) Fabrice Sincère
3 from tkinter import *
4 # Création de la fenêtre principale
5 Mafenetre = Tk()
6 Mafenetre.title('Frame widget')
7 Mafenetre['bg']='bisque' # couleur de fond
8 # création d'un widget Frame dans la fenêtre principale
9 Frame1 = Frame(Mafenetre,borderwidth=2,relief=GROOVE)
10 Frame1.pack(side=LEFT,padx=10,pady=10)
11 # création d'un second widget Frame dans la fenêtre principale
12 Frame2 = Frame(Mafenetre,borderwidth=2,relief=GROOVE)
13 Frame2.pack(side=LEFT,padx=10,pady=10)
14 # création d'un widget Frame... dans un widget Frame
15 # le widget Frame1 est le parent du widget Frame3
16 # le parent du widget Frame1 est le widget Mafenetre (fenêtre principale)
17 Frame3 = Frame(Frame1,bg="white",borderwidth=2,relief=GROOVE)
18 Frame3.pack(side=LEFT,padx=10,pady=10)
19 # création d'un widget Label et d'un widget Button dans un widget Frame
20 Label(Frame1,text="RDV dentiste samedi à 15h").pack(padx=10,pady=10)
21 Button(Frame1,text="Effacer",fg='navy',command=Frame1.destroy).pack(padx=10,pady=10)
22 Label(Frame2,text="Réviser le contrôle d'info").pack(padx=10,pady=10)
23 Button(Frame2,text="Effacer",fg='navy',command=Frame2.destroy).pack(padx=10,pady=10)
24 Label(Frame3,text="RDV dentiste à 10h",bg="white").pack(padx=10,pady=10)
25 Button(Frame3,text="Effacer",fg='navy',command=Frame3.destroy).pack(padx=10,pady=10)
26 Mafenetre.mainloop()
TK4 1 # script mot_de_passe.py
2 #(C) Fabrice Sincère
3 from tkinter import *
4 from tkinter.messagebox import * # boîte de dialogue
5 def Verification():
6 if Motdepasse.get() == 'python27':
7 # le mot de passe est bon : on affiche une boîte de dialogue puis on ferme la fenêtre
8 showinfo('Résultat','Mot de passe correct.\nAu revoir !')
9 Mafenetre.destroy()
10 else:
11 # le mot de passe est incorrect : on affiche une boîte de dialogue
12 showwarning('Résultat','Mot de passe incorrect.\nVeuillez recommencer !')
13 Motdepasse.set('')
14 # Création de la fenêtre principale (main window)
15 Mafenetre = Tk()
16 Mafenetre.title('Identification requise')
17 # Création d'un widget Label (texte 'Mot de passe')
18 Label1 = Label(Mafenetre, text = 'Mot de passe ')
19 Label1.pack(side = LEFT, padx = 5, pady = 5)
20 # Création d'un widget Entry (champ de saisie)
21 Motdepasse= StringVar()
22 Champ = Entry(Mafenetre, textvariable= Motdepasse, show='*', bg ='bisque', fg='maroon')
23 Champ.focus_set()
24 Champ.pack(side = LEFT, padx = 5, pady = 5)
25 # Création d'un widget Button (bouton Valider)
26 Bouton = Button(Mafenetre, text ='Valider', command = Verification)
27 Bouton.pack(side = LEFT, padx = 5, pady = 5)
28 Mafenetre.mainloop()
TK5 1 # script spinbox.py
2 #(C) Fabrice Sincère
3 from tkinter import *
4 def carre():
5 """ Calcul du carré """
6 Resultat.set("Carré = "+str(float(Valeur.get())**2))
7 # Création de la fenêtre principale (main window)
8 Mafenetre = Tk()
9 Mafenetre.title("Spinbox widget")
10 Valeur = StringVar()
11 Valeur.set(2.0)
12 # Création d'un widget Spinbox
13 boite = Spinbox(Mafenetre,from_=0,to=10,increment=0.5,textvariable=Valeur,width=5,command=carre)
14 boite.pack(padx=30,pady=10)
15 # Création d'un widget Label
16 Resultat = StringVar()
17 carre()
18 Label(Mafenetre,textvariable=Resultat).pack(padx=30,pady=10)
19 Mafenetre.mainloop()
TK6 1 # script scale.py
2 #(C) Fabrice Sincère
3 from tkinter import *
4 def maj(nouvelleValeur):
5 # nouvelle valeur en argument
6 print(nouvelleValeur)
7 def plus():
8 Valeur.set(str(int(Valeur.get())+10))
9 print(Valeur.get())
10 def moins():
11 Valeur.set(str(int(Valeur.get())-10))
12 print(Valeur.get())
13 # Création de la fenêtre principale (main window)
14 Mafenetre = Tk()
15 Mafenetre.title("Scale widget")
16 Valeur = StringVar()
17 Valeur.set(50)
18 # Création d'un widget Scale
19 echelle = Scale(Mafenetre,from_=-100,to=100,resolution=10,orient=HORIZONTAL,length=300,width=20,label="Offset",tickinterval=20,variable=Valeur,command=maj)
20 echelle.pack(padx=10,pady=10)
21 # Création d'un widget Button (bouton +)
22 Button(Mafenetre,text="+",command=plus).pack(padx=10,pady=10)
23 # Création d'un widget Button (bouton -)
24 Button(Mafenetre,text="-",command=moins).pack(padx=10,pady=10)
25 Mafenetre.mainloop()
TK7 1 # script cercle.py
2 #(C) Fabrice Sincère
3 from tkinter import *
4 import random
5 def Cercle():
6 """ Dessine un cercle de centre (x,y) et de rayon r """
7 x = random.randint(0,Largeur)
8 y = random.randint(0,Hauteur)
9 r = 20
10 Canevas.create_oval(x-r, y-r, x+r, y+r, outline='blue', fill='blue')
11 def Effacer():
12 """ Efface la zone graphique """
13 Canevas.delete(ALL)
14 # Création de la fenêtre principale (main window)
15 Mafenetre = Tk()
16 Mafenetre.title('Cercle')
17 # Création d'un widget Canvas (zone graphique)
18 Largeur = 480
19 Hauteur = 320
20 Canevas = Canvas(Mafenetre, width = Largeur, height =Hauteur, bg ='white')
21 Canevas.pack(padx =5, pady =5)
22 # Création d'un widget Button (bouton Go)
23 BoutonGo = Button(Mafenetre, text ='Go', command = Cercle)
24 BoutonGo.pack(side = LEFT, padx = 10, pady = 10)
25 # Création d'un widget Button (bouton Effacer)
26 BoutonEffacer = Button(Mafenetre, text ='Effacer', command = Effacer)
27 BoutonEffacer.pack(side = LEFT, padx = 5, pady = 5)
28 # Création d'un widget Button (bouton Quitter)
29 BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
30 BoutonQuitter.pack(side = LEFT, padx = 5, pady = 5)
31 Mafenetre.mainloop()
TK8 1 # script cible.py
2 #(C) Fabrice Sincère
3 from tkinter import *
4 import random
5 def Cercle():
6 """ Dessine un cercle de centre (x,y) et de rayon r """
7 x = random.randint(0,Largeur)
8 y = random.randint(0,Hauteur)
9 r = 10
10 # on dessine un cercle dans la zone graphique
11 item = Canevas.create_oval(x-r, y-r, x+r, y+r, outline='black', fill='black')
12 print("Création du cercle (item" , item ,")")
13 # affichage de tous les items de Canevas
14 print(Canevas.find_all())
15 def Undo():
16 """ Efface le dernier cercle"""
17 if len(Canevas.find_all()) > 1:
18 item = Canevas.find_all()[-1]
19 # on efface le cercle
20 Canevas.delete(item)
21 print("Suppression du cercle (item" , item ,")")
22 # affichage de tous les items de Canevas
23 print(Canevas.find_all())
24 def EffacerTout():
25 """ Efface tous les cercles"""
26 while len(Canevas.find_all()) > 1:
27 Undo()
28 # Création de la fenêtre principale (main window)
29 Mafenetre = Tk()
30 Mafenetre.title('Cible')
31 # Image de fond
32 photo = PhotoImage(file="tk_cible.gif")
33 # Création d'un widget Canvas (zone graphique)
34 Largeur = 550
35 Hauteur = 550
36 Canevas = Canvas(Mafenetre,width = Largeur, height =Hauteur)
37 item = Canevas.create_image(0,0,anchor=NW, image=photo)
38 print("Image de fond (item",item,")")
39 Canevas.pack()
40 # Création d'un widget Button
41 BoutonGo = Button(Mafenetre, text ='Tirer', command = Cercle)
42 BoutonGo.pack(side = LEFT, padx = 10, pady = 10)
43 # Création d'un widget Button
44 BoutonEffacer = Button(Mafenetre, text ='Effacer le dernier tir', command = Undo)
45 BoutonEffacer.pack(side = LEFT, padx = 10, pady = 10)
46 # Création d'un widget Button
47 BoutonEffacerTout = Button(Mafenetre, text ='Effacer tout', command = EffacerTout)
48 BoutonEffacerTout.pack(side = LEFT, padx = 10, pady = 10)
49 # Création d'un widget Button (bouton Quitter)
50 BoutonQuitter = Button(Mafenetre, text ='Quitter', command = Mafenetre.destroy)
51 BoutonQuitter.pack(side = LEFT, padx = 10, pady = 10)
52 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') |







