Initiation à la programmation ENSAE 1A

résumé

File: resume_utile.tex, line 25


import sys
print (sys.version)

File: resume_utile.tex, line 43


def fonction () :
     """fonction de 
     démonstration"""
     return 0
help (fonction)    # affiche fonction de 
                   # démonstration 

File: resume_utile.tex, line 66


va = <valeur>

File: resume_utile.tex, line 83


t = ()        # tuple vide
t = (2, "e")  # tuple de deux éléments
print (t[0])  # affiche le premier élément

File: resume_utile.tex, line 108


t [i:j]  # correspond à un sous-ensemble allant des indices i à j exclu
t [:j]   #  = t[0:j]
t [i:]   # = t [i: len (t)]

File: resume_utile.tex, line 116


st = "langage python"
st = 'langage python'           # idem
st = 'un guillement "'          # chaîne contenant un guillement
st = "un guillement \""         # chaîne contenant un guillement, il faut ajouter \
                                #     pour ne pas confondre avec l'autre guillement
st = st.upper ()                # mise en lettres majuscules
i  = st.find ("PYTHON")         # on cherche "PYTHON" dans st
print (i)                       # affiche 8  Version 3.x, écrire print (i),
                                #    pour la version 2.x, écrire print i
print (st.count ("PYTHON"))     # affiche 1  Version 3.x : idem print (...)
print (st.count ("PYTHON", 9))  # affiche 0  Version 3.x : idem print (...)

File: resume_utile.tex, line 189


x = 0.123456789
print ("%1.2f" % x)    # donne 0.12
s = "%2.2e %s" % (3.14159, "est une approximation de pi")
print (s)              # Version 2.x : print s

File: resume_utile.tex, line 203


a = [1,2]
b = a

File: resume_utile.tex, line 210


a = [1,2]
import copy
b = copy.copy (a)

File: resume_utile.tex, line 218


a = [1,2]
import copy
b = copy.deepcopy (a)

File: resume_utile.tex, line 231


x = [4,5]               # création d'une liste composée de deux entiers
x = ["un",1,"deux",2]   # création d'une liste composée deux chaînes de caractères
                        # et de deux entiers, l'ordre d'écriture est important
x = [3,]                # création d'une liste d'un élément, sans la virgule, 
                        # le résultat reste une liste
x = [ ]                 # crée une liste vide
x = list ()             # crée une liste vide

File: resume_utile.tex, line 368


x = range(0,5)                      # liste des entiers de 0 à 5 exclu
                                    # Version 3.x : range retourne un itérateur, il faut écrire
                                    #     x = list(range(0,5))
y = [ i for i in x if i % 2 == 0]   # sélection des éléments pairs
print (y)                           # affiche [0,2,4]		  Version 2.x : écrire print y
z = [ i+j for i in x for j in x]    # construit tous les nombres i+j possibles
print (z)                           # affiche [0, 1, 2, 3, 4, 1, 2, 3, 4, 5, 2, 3, 
                                    # 4, 5, 6, 3, 4, 5, 6, 7, 4, 5, 6, 7, 8]

File: resume_utile.tex, line 385


x = { "cle1":"valeur1", "cle2":"valeur2" }
print (x ["cle1"])        # affiche valeur1  Version 2.x : écrire print ...
x [(0,1)]  = "clé tuple"  # ajoute une nouvelle valeur dont la clé est (0,1)
                          #   les parenthèses sont superflues
y = { }                   # crée un dictionnaire vide
z = dict ()               # crée aussi un dictionnaire vide

File: resume_utile.tex, line 490


import numpy
a = numpy.array ( [0,1] )

File: resume_utile.tex, line 503


if x < 5 :
    x = x*2
    ...

File: resume_utile.tex, line 511


if x < 5 :
    x = x*2
    ...
else :
    x = x*3
    ...

File: resume_utile.tex, line 522


if x < 5 :  x=x*2
else :      x=x*3

File: resume_utile.tex, line 529


if   x < 5 :  x = x*2
elif x > 5 :  x = x*3
else       :  x = x*6

File: resume_utile.tex, line 537


if 5 < x and x < 10 :     # peut être écrit : if 5 < x < 10 :
    ...

File: resume_utile.tex, line 546


while condition :
    # lignes décalées
    # contenu de la boucle

File: resume_utile.tex, line 554


for i in range(0,n) :             # parcourt tous les entiers de 0 à n-1 inclus   
for i in xrange(0,n) :            # même chose mais en plus rapide  
                                  # Version 3.x : la fonction xrange n'existe plus, 
                                  #               et range équivaut à xrange
for i in range(n,0,-1) :          # parcourt tous les entiers de n à 1 inclus 
                                  #                  dans le sens décroissant   
for i in range(2,1000,3) :        # parcourt tous les entiers de 2 à 1000 de 3 en 3
                                  #                                     (2,5,8,...)
for e in li :                     # parcourt tous les éléments de la liste li
for cle,valeur in di.items () :   # parcourt tous les éléments du dictionnaire di

File: resume_utile.tex, line 573


l = [ 4, 5, 6 ]
s = 0
for i in range(0,len(l)) : 
    s += l[i]

File: resume_utile.tex, line 581


l = [ 4, 5, 6 ]
s = 0
for i,x in enumerate(l) :
    s += x

File: resume_utile.tex, line 591


l = [ 4, 5, 6 ]
g = [ 3,10,11 ]
s = 0
for i in range(0,len(l)) : 
    s += l[i] + g[i]

File: resume_utile.tex, line 600


l = [ 4, 5, 6 ]
g = [ 3,10,11 ]
s = 0
for x,y in zip(l,g) :
    s += x + y

File: resume_utile.tex, line 614


def fonction (x) : return x % 2
li  = [ 3,4,5]
li2 = map (fonction, li)
print (list(li2))           # affiche [ 1, 0, 1 ]

File: resume_utile.tex, line 623


def fonction (x) :
    if x % 2 == 0 : yield x
li  = [ 3,4,5]
li2 = map (fonction, li)
print (list(li2))           # affiche [ 4 ]

File: resume_utile.tex, line 636


with random_matrix(1000,1000) as mat :
    #   appelle mat.__enter__()
    ...
    #   appelle mat.__exit__()

File: resume_utile.tex, line 652


def exemple_fonction (p1, p2, p3) :
    # code de la fonction
    return r1, r2

a,b = exemple_fonction (1,2,3)   # exemple d'appel de la fonction

File: resume_utile.tex, line 662


def exemple_fonction (p1, p2 = 4, p3 = 7) :
    # code de la fonction
    return r1, r2

a,b = exemple_fonction (1)         # = exemple_fonction (1,4,7)
a,b = exemple_fonction (1,2,3)     # = exemple_fonction (1,2,3)
a,b = exemple_fonction (1,2)       # = exemple_fonction (1,2,7)
a,b = exemple_fonction (1,p3 = 2)  # = exemple_fonction (1,4,2)

File: resume_utile.tex, line 675


def exemple_fonction (p1, p2 = 4, p3) :
    # code de la fonction
    return r1, r2
# affiche le message d'erreur : SyntaxError: non-default argument follows default argument

File: resume_utile.tex, line 684


def exemple_fonction (p1) :
    p1 = 3
a = 1
exemple_fonction (a)
print (a)  # affiche 1

File: resume_utile.tex, line 694


def exemple_fonction (p1) :
    p1[0] = 3
a = [1]
exemple_fonction (a)
print (a)  # affiche [3]    Version 2.x : print ...

File: resume_utile.tex, line 707


def fonction (x) : return x % 2
li  = [ 3,4,5]
li2 = map (fonction, li)
print (list(li2))           # affiche [ 1, 0, 1 ]

File: resume_utile.tex, line 716


li  = [ 3,4,5]
li2 = map (lambda x : x%2, li)
print (list(li2))                 # affiche [ 1, 0, 1 ]

File: resume_utile.tex, line 724


li  = [ 3,4,5]
k   = 2
li2 = map (lambda x,y=k : x%k, li)
print (list(li2))                 # affiche [ 1, 0, 1 ]

File: resume_utile.tex, line 736


def iterate_double_on_list(l) :
    for x in l :
        yield x*2
print (iterate_double_on_list( [4,5,6]))
     # affiche <generator object iterate_double_on_list at 0x025196C0>

File: resume_utile.tex, line 746


for x in iterate_double_on_list( [4,5,6]) :
    print (x)

File: resume_utile.tex, line 762


class ma_classe :
    def __init__ (self, att1, att2, att3) :
        self.att1 = att1
        self.att2 = att2
        self.att3 = att3
        self.att4 = att1 * att2 * att3
        
a = ma_classe (-1,1,2) # déclare une variable de type ma_classe
print (a.att1)  # affiche -1       
print (a.att2)  # affiche 3        Version 2.x : print ...
print (a.att3)  # affiche 4
print (a.att4)  # affiche -12

File: resume_utile.tex, line 779


class ma_classe :
    def __init__ (self, att1, att2, att3) :
        self.att1 = att1
        self.att2 = att2
        self.att3 = att3
        self.att4 = self.calcule4 ()
        
    def calcule4 (self) :
        return self.att1 * self.att2 * self.att3
        
a = ma_classe (-1,1,2) # déclare une variable de type ma_classe
print (a.att1)           # affiche -1
print (a.att2)           # affiche 3
print (a.att3)           # affiche 4
print (a.att4)           # affiche -12

File: resume_utile.tex, line 804


class ma_classe :
    def __init__ (self, att1, att2, att3) :
        self.att1 = att1                    # attribut
        self.att2 = att2                    # attribut
        self.att3 = att3                    # attribut
        self.att4 = att1 * att2 * att3      # attribut

    def calcule (self,x) :                   # méthode
        return self.att1 * self.att2 * self.att3 * x
				
a = ma_classe (1,2,3)
print (a.att1)                 # affiche 1 
print (a.__dict__ ["att1"])    # affiche aussi 1, ligne équivalente à la précédente
print (a.calcule(2))           # appel d'une méthode

File: resume_utile.tex, line 826


class ma_classe :
    def __init__ (self, att1, att2, att3) :
		    # ...

    @staticmethod
    def calcule_static (x,y) :         # méthode statique
        return x * y
				
print (ma_classe.calcule_static(2,3))  # appel d'une méthode statique

File: resume_utile.tex, line 844


class ma_classe :
    def __init__ (self, att1, att2, att3) :
        self.att1 = att1
        self.att2 = att2
        self.att3 = att3
        self.att4 = att1 * att2 * att3
        
    def __add__ (self, a) :
         return ma_classe (self.att1 + a.att1, self.att2 + a.att2, \
                       self.att3 + a.att3, self.att4 + a.att4)

a = ma_classe (1,2,3)
b = ma_classe (4,5,6)
c = a + b              # n'a de sens que si l'opérateur __add__ a été redéfini

File: resume_utile.tex, line 868


class ma_classe :
    def __init__ (self, att1, att2, att3) :
        self.att1 = att1
        self.att2 = att2
        self.att3 = att3
        self.att4 = att1 * att2 * att3

a = ma_classe (1,2,3)
b = a
b.att1 = -16
print (a.att1)  # affiche -16
print (b.att1)  # affiche -16

File: resume_utile.tex, line 885


class ma_classe :
    def __init__ (self, att1, att2, att3) :
        self.att1 = att1
        self.att2 = att2
        self.att3 = att3
        self.att4 = att1 * att2 * att3

a = ma_classe (1,2,3)
import copy
b = copy.copy (a)
b.att1 = -16
print (a.att1)  # affiche 1
print (b.att1)  # affiche -16

File: resume_utile.tex, line 910


class ma_classe :
    def __init__ (self, att1, att2, att3) :
        self.att1 = att1
        self.att2 = att2
        self.att3 = att3
        self.att4 = att1 * att2 * att3

class ma_classe2 (ma_classe) :      # héritage simple
    pass                            # pour dire que la classe est vide

File: resume_utile.tex, line 928


class ma_classe :
    def __init__ (self, att1) :
        self.att1 = att1
        self.att2 = self.calcul ()

    def calcul (self) :
        return self.att1 ** 2

class ma_classe2 (ma_classe) :
    def calcul (self) :
        # dans cette méthode, on change le comportement
        # de la méthode calcul tout en se servant de celui 
        # de la classe mère
        return ma_classe.calcul (self) * self.att1

a = ma_classe (2)
b = ma_classe2 (2)
print (a.att2)   # affiche 4  = 2 * 2
print (b.att2)   # affiche 8  = (2*2) * 2

File: resume_utile.tex, line 955


def makebold(fn):
    def wrapped():
        return "<b>" + fn() + "</b>"
    return wrapped

def makeitalic(fn):
    def wrapped():
        return "<i>" + fn() + "</i>"
    return wrapped

@makebold
@makeitalic
def hello():
    return "hello world"

print (hello()) ## returns <b><i>hello world</i></b>

File: resume_utile.tex, line 976


class C(object):
    def __init__ (self) :
        self._p = 1
    @property
    def p(self):
        return self._p
    @p.setter
    def p(self, val):
        self._p = val * 2
        
obj = C()
print (obj.p)  # utilise p_get, affiche 1
obj.p = 5      # utilise p_set
print (obj.p)  # utilise p_get affiche 10

File: resume_utile.tex, line 1003


f = open ("nom-fichier", "w") # ouverture en mode écriture "w" ou écriture ajout "a"

f.write (  s )                # écriture de la chaîne de caractères  s 
f.write (  s2 )               # écriture de la chaîne de caractères  s2
...

f.close ()  # fermeture

File: resume_utile.tex, line 1022


with open ("nom-fichier", "w") as f : 
    f.write (  s )                
    f.write (  s2 )               

File: resume_utile.tex, line 1029


with open ("nom-fichier", "w", encoding = "utf8") as f : 
    f.write (  s )                
    f.write (  s2 )               

File: resume_utile.tex, line 1039


f = open ("essai.txt", "r")   # ouverture du fichier en mode lecture
l = f.readlines ()            # lecture de toutes les lignes, 
                              #   elles sont placées dans une liste
f.close ()                    # fermeture du fichier

for s in l : print (s)        # on affiche les lignes à l'écran

File: resume_utile.tex, line 1053


f = open ("essai.txt", "r")     # ouverture du fichier en mode lecture
l = f.readlines ()              # lecture de toutes les lignes, 
                                #   elles sont placées dans une liste placées dans une liste
f.close ()                      # fermeture du fichier

l_net = []                      # contiendra la liste nettoyée des lignes du fichier
for s in l : 
    s2 = s.replace ("\n", "")   # on supprime le code de fin de ligne \n 
    s2 = s2.replace ("\r", "")  # on supprime le code de fin de ligne \r 
                                #                   (Windows uniquement)
	  s2 = s2.strip("\r\n")       # cette ligne est équivalente aux deux précédentes
    l_net.append (s2)           # on ajoute le résultat à la liste nettoyée

File: resume_utile.tex, line 1072


nom  ; prénom ; livre
Hugo  ; Victor  ; Les misérables
Kessel ; Joseph  ; Le lion
Woolf ; Virginia  ; Mrs Dalloway
Calvino ; Italo  ; Le baron perché

File: resume_utile.tex, line 1082


f = open ("essai.txt", "r")     # ouverture du fichier en mode lecture
l = f.readlines ()              # lecture de toutes les lignes, placées dans une liste
f.close ()                      # fermeture du fichier

for s in l : 
    s2 = s.replace ("\n", "")   # on supprime le code de fin de ligne \n 
    s2 = s2.replace ("\r", "")  # on supprime le code de fin de ligne \r (Windows uniquement)
    case = s2.split (";")
    if len (case) >= 3 :
        print (case [1], " ", case [0], " a écrit ", case [2])
				      # Version 2.x : print ...

File: resume_utile.tex, line 1102


# définition du module geometrie.py

def carre (x) :
    return x ** 2
    
class point :
    def __init__ (self,x,y) :
        self.x, self.y = x,y
        
    def norme (self) :
        return (self.x ** 2 + self.y ** 2) ** 0.5

File: resume_utile.tex, line 1120


import geometrie
print (geometrie.carre (1.5))
p = geometrie.point (1,2)

File: resume_utile.tex, line 1127


import geometrie as GEO  # on donne un pseudonyme au module geometrie
print (GEO.carre (1.5))
p = GEO.point (1,2)

File: resume_utile.tex, line 1134


from  geometrie import * 
print (carre (1.5))
p = point (1,2)

File: resume_utile.tex, line 1144


if __name__ == "__main__" :
    # quelques instructions ici

File: resume_utile.tex, line 1160


def inverse (x):
    y = 1.0 / x
    return y
b = inverse (0)
print (b)

File: resume_utile.tex, line 1170


Traceback (most recent call last):
  File "cours.py", line 2, in ?
    y = 1.0 / x
ZeroDivisionError: float division

File: resume_utile.tex, line 1179


def inverse (x):
    y = 1.0 / x
    return y
try :
    b = inverse (0)  # déclenche une exception
    print (b)
except :
    print ("le programme a déclenché une erreur")

File: resume_utile.tex, line 1192


def inverse (x):
    y = 1.0 / x
    return y
try :
    print (inverse (2))
    print (inverse (0))
except Exception as exc:
    print ("exception de type ", exc.__class__)
         # affiche exception de type  exceptions.ZeroDivisionError
    print ("message ", exc)
         # affiche le message associé à l'exception

File: resume_utile.tex, line 1208


def inverse (x):
    y = 1.0 / x
    return y
try :
    print ((-2.1) ** 3.1)
    print (inverse (2))
    print (inverse (0))
except ZeroDivisionError:
    print ("division par zéro")
except Exception as exc:
    print ("erreur insoupçonnée : ", exc.__class__)
    print ("message ", exc)

File: resume_utile.tex, line 1225


class AucunChiffre (Exception) :
    """chaîne de caractères contenant
    aussi autre chose que des chiffres"""

    def __init__(self, s, f = "") :
        Exception.__init__(self, s)
        self.s = s
        self.f = f

    def __str__(self) :
        return """exception AucunChiffre, lancée depuis la fonction """ + self.f + \
        " avec le paramètre " + self.s

def conversion (s) :
    """conversion d'une chaîne de caractères en entier"""
    if not s.isdigit () :
        raise AucunChiffre, (s, "conversion")
    return int (s)

try :
    s = "123a"
    i = conversion (s)
    print (s, " = ", i)
except AucunChiffre as exc :
    print (AucunChiffre.__doc__, " : ", exc)
    print ("fonction : ", exc.f)

File: resume_utile.tex, line 1264


s = "abcdefghijklmnopqrstuvwxyz"
print (s [4])    # affiche "e"
print (s [4:6])  # affiche "ef"

File: resume_utile.tex, line 1276


l  = [ un, deux, trois, quatre ]
up = []
for i in range (0, len (l)) :
    up.append ( l [i].upper () )

File: resume_utile.tex, line 1295


l  = [ "un", "deux", "trois", "quatre" ]
up = []
for i in range (0, len (l)) :
    up.append ( l [i].upper () )

File: resume_utile.tex, line 1304


l  = [ "un", "deux", "trois", "quatre" ]
up = []
for m in l :
    up.append ( m.upper () )

File: resume_utile.tex, line 1322


l = [ "un", "deux", "trois", "quatre" ]
s = ""
for m in l :
    s += m # concaténation des mots en une seule chaîne de caractères

File: resume_utile.tex, line 1336


a = calcul1 (3)
b = calcul2 (a)
c = calcul3 (b) # c résultat souhaité et affiché

File: resume_utile.tex, line 1346


def calcul1(x) :
    return x+3
y = calcul1(4)
print (y)            # affiche None
                     # car la fonction calcul1 ne retourne pas de résultat, elle l'affiche

File: resume_utile.tex, line 1356


def calcul1(x) : print (x+3)
def calcul2(x) : return calcul1(x) + 5
y = calcul2(4)     # affiche l'erreur
                   # ported operand type(s) for +: 'NoneType' and 'int'

File: resume_utile.tex, line 1399

    
def somme_double (liste) :
    return 1.0 * sum(liste)

def test_somme_double () :
    y = somme_double([ 1 ]) / 2
    if y == 0 : raise Exception ("valeur > 0 attendue")
        
if __name__ == "__main__" :
    test_somme_double()

File: resume_utile.tex, line 1413

    
Traceback (most recent call last):
  File "conseil.py", line 10, in <module>
    test_somme_double()
  File "conseil.py", line 7, in test_somme_double
    if y == 0 : raise Exception ("valeur > 0 attendue")
Exception: valeur > 0 attendue