PYTHON 2. FEUILLE n° 9 TER ALGO
COURS
THEME:
• Soit L une liste.
len(L) est sa longueur c-à-d le nombre de ses termes
• Obtenir la transposée d'une matrice carrée
Soit la matrice A suivante:
A est la liste de liste suivante:
A =[ [ a , b , c ] , [ d , e , f ] , [ g , h , i ] ]
Sa transposée tA est la matrice :
Les lignes de A sont devenues les colonnes de tA.
tA = [ [ a , b , g ] , [ b , e , h ] , [ c , f , i ]
• Pour faire afficher verticalement la matrice
A =[ [ a , b , c ] , [ d , e , f ] , [ g , h , i ] ]
On considère les deux lignes suivantes:
for line in A:
print line
• Soit L une liste non vide.
L[ - 1 ] donne son dernier terme
L[ - 2 ] s'il existe donne son avant dernier terme
Par exemple : Soit L = [ 1 , 2 , 7]
print L[ - 1 ] donne 7
• Création d'une liste de trois listes vides:
def exemple():
M=[]
# M=[] veut dire que M est la liste vide
for i in range(3):
M.append([])
# M.append( [] ) ajoute [ ] à la fin de la liste M
print M
permet d'obtenir que la liste M devienne la liste [ [ ],[ ],[ ] ]
•Utilisation de :
for j in xrange(i,9,3):
Cela veut dire que j va varier à partir de l'entier i de 3 en 3 jusqu'à 9 exclus
Par exemple :
from random import*
def essai():
for j in xrange(1,9,3):
print j
affiche
1
1 + 3
1 + 3 + 3
c-à-d
1
4
7
Ce sont les premiers termes d'une suite arithmétique de raison 3
et de premier terme 1 sans atteindre 9.
------------------------------------------------------------------
EXERCICE 1
Que donne le script suivant?
def tem():
L=[1,2,3,4,5,6,7,8,9]
print L[-1]
print L[len(L)-1]
---------------------------------------------------------------------
REPONSE:
Il donne deux fois le dernier terme de la liste L
c-à-d:
>>>term()
9
9
>>>
En effet :
L[-1] donne le dernier terme de la liste L
L[len(L)-1] donne le terme d'indice len(L)-1 c-à-d
le dernier terme de la liste L
-------------------------------------------------------------------------------
EXERCICE 2
Que donne le script suivant ?
from random import*
def changer():
for j in xrange(0,9,3):
print j
-------------------------------------------------------
REPONSE:
On obtient:
>>> changer()
0
3
6
>>>
-------------------------------------------------------------------
EXERCICE 3
Que donne le script suivant ?
from random import*
def resume():
for i in range(3):
for j in xrange(i,9,3):
print j
---------------------------------------------
REPONSE:
On obtient :
>>> resume()
0
3
6
1
4
7
2
5
8
>>>
---------------------------------------------------------
EXERCICE 4
Que donne le script suivant ?
from random import*
def trans():
L=[1,2,3,4,5,6,7,8,9]
for j in xrange(2,9,3):
print L[j]
---------------------------------------------------------------------------
REPONSE:
j qui prend les valeurs 2 , 2 + 3 , 2 + 3 + 3
c-à-d j prend les valeur 2 ; 5 ; 8
Donc :
Le L[j] va être L[2] puis L[5] puis L[8]
c-à-d, d'après la liste L cela donne 3 puis 6 puis 9
>>> trans()
3
6
9
>>>
-----------------------------------------------------------
EXERCICE 5
Que donne le script suivant ?
from random import*
def bilan():
L=[1,2,3,4,5,6,7,8,9]
M=[]
for i in range(3):
M.append([])
for j in xrange(i,9,3):
M[-1].append(L[j])
print M
-------------------------------------------------------------------
REPONSE:
On obtient:
>>> bilan()
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
>>>
Explication:
M est d'bord [ ]
Puis devient [ [ ] ]
Donc M[ - 1 ] est [ ]
Alors L [0 ] , L [0 +3 ] , L[ 0 + 3 + 3 ]
sont mis successivement dans M [ - 1 ]
A ce stade M =[ [ L [0 ] , L [3 ] , L[ 6 ] ] ] = [ [ 1 , 4 , 7 ] ]
Puis M = [ [ 1 , 4 , 7 ] , [ ] ]
Donc M[ - 1] est [ ]
Alors L [1 ] , L [1 +3 ] , L[ 1 + 3 + 3 ]
sont mis successivement dans M [ - 1 ]
A ce stade M = [ [ 1 , 4 , 7 ], [ L [1 ] , L [4 ] , L[ 7 ] ] ]
c-à-d M = [ [ 1 , 4 , 7 ], [ 2 , 5, 8 ] ]
Alors M = [ [ 1 , 4 , 7 ], [ 2 , 5, 8 ], [ ] ]
M[ - 1] est [ ]
Alors L [2 ] , L [2 +3 ] , L[ 2 + 3 + 3 ]
sont mis successivement dans M [ - 1 ]
On obtient donc:
M = [ [ 1 , 4 , 7 ], [ 2 , 5, 8 ], [ L [2 ] , L [5 ] , L[ 8 ] ] ]
c-à-d
M = [ [ 1 , 4 , 7 ], [ 2 , 5, 8 ], [ 3 , 6 , 9 ] ]
----------------------------------------------------------------------------------
EXERCICE 6
Que donne le script suivant ?
from random import*
def res():
L=[1,2,3,4,5,6,7,8,9]
print L
print " "
M=[[L[j]for j in xrange(i,9,3)]for i in xrange(0,3)]
for line in M:
print line
--------------------------------------------------------------
REPONSE:
On obtient la même liste M que dans l'exercice précédent
mais avec un script plus court et M présenté
avec une disposition verticale.
>>>res ()
[[1, 4, 7]
[2, 5, 8]
[3, 6, 9]]
>>>
On peut remarquer que c'est la transposée de la
matrice [ [ 1 , 2 , 3] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ]
---------------------------------------------------------------------
EXERCICE 7
En déduire un moyen d'obtenir la transposée de la matrice
A=[[1,2,3],[4,5,6],[7,8,9]] de type ( 3 ; 3 ).
-----------------------------------------------------------------------------
REPONSE:
On peut envisager:
from random import*
def transposee():
A=[[1,2,3],[4,5,6],[7,8,9]]
print " Soit la matrice A suivante :"
for line in A:
print line
# Pour avoir A verticalement
L=[]
M=[]
for i in range(3):
for j in range(3):
L.append(A[i][j])
# cela permet d'avoir L=[1,2,3,4,5,6,7,8,9]
# On se ramène au début de l'exercice précédent
# On peut donc reprendre le même texte
print " "
for i in range(3):
M.append([])
for j in xrange(i,9,3):
M[-1].append(L[j])
print " La transposée de la matrice A est "
for line in M:
print line
On obtient :
>>> transposee()
Soit la matrice A suivante :
[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
La transposée de la matrice A est
[1, 4, 7]
[2, 5, 8]
[3, 6, 9]
>>>
Généralisable à d'autres matrices de type ( 3 ; 3 )
--------------------------------------------------------------------------------------
EXERCICE 8
Faire un programme qui à partir d'une liste de trois noms chacun
suivi de deux notes présente une matrice avec les trois noms
sur la première ligne et les deux notes en dessous.
----------------------------------------------------------------
REPONSE:
On peut considérer :
from random import*
def tableau():
print " Les notes de LISE , ABEL et GEO sont les suivantes:"
L=["LISE",11,8,"ABEL",16,17,"GEO",14,9]
# La liste est une bibliothèque
print L
print " "
M=[[L[j]for j in xrange(i,9,3)]for i in xrange(0,3)]
for line in M:
print line
On obtient :
>>> tableau()
Les notes de LISE , ABEL et GEO sont les suivantes:
['LISE', 11, 8, 'ABEL', 16, 17, 'GEO', 14, 9]
['LISE', 'ABEL', 'GEO']
[11, 16, 14]
[8, 17, 9]
>>>