PYTHON .2 INFO FEUILLE n° 27 D'EXERCICE BTS1
Thème:
• len... pour la longueur aussi d'une liste que d'une chaîne
• La notion d'indice des termes d'une liste.
nomdelaliste[0] est le premier terme de nomdelaliste
• T[j],T[i]=T[i],T[j] permute les termes d'indices i et j dans une liste
sans variable auxiliaire.
Voir aussi la feuille n° 8 d'exercices qui propose à la fin
un script pour le tri à bulles.
----------------------------------------------------------------------------------------------------------------
EXERCICE 1
Que donnent les algorithmes suivants ?
import decimal
from random import*
def trib():
T=input( "Donner une liste d'au moins deux nombres ")
L=len(T)
for i in range(0,L):
for j in range(0,L):
# Onpeut remplacer par: for j in range(i+1,L):
# et supprimer alors: if i<j:
if i<j:
if T[i]>T[j]:
temp=T[j]
T[j]=T[i]
T[i]= temp
print T
OU ENCORE
import decimal
from random import*
def trib():
T=input( "Donner une liste d'au moins deux nombres ")
L=len(T)
for i in range(0,L):
for j in range(0,L):
if i<j:
if T[i]>T[j]:
T[j],T[i]=T[i],T[j]
# Cela permet d'éviter une variable auxiliaire comme temp
print T
------------------------------------------------------------------------------------------------------
REPONSE:
On obtient avec le premier script:
>>> trib()
Donner une liste d'au moins deux nombres [3,8,5,7,17]
[3, 8, 5, 7, 17]
[3, 5, 8, 7, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
>>>
On obtient avec le second script
>>> trib()
Donner une liste d'au moins deux nombres [3,8,5,7,17]
[3, 8, 5, 7, 17]
[3, 8, 5, 7, 17]
[3, 8, 5, 7, 17]
[3, 8, 5, 7, 17]
[3, 8, 5, 7, 17]
[3, 8, 5, 7, 17]
[3, 8, 5, 7, 17]
[3, 5, 8, 7, 17]
[3, 5, 8, 7, 17]
[3, 5, 8, 7, 17]
[3, 5, 8, 7, 17]
[3, 5, 8, 7, 17]
[3, 5, 8, 7, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
>>>
Il apparaît que des étapes sont inutiles à voir
Biensûr on peut éviter de les voir en déplaçant
vers la gauche le print T juste en dessous du premier for .
from random import*
def trib():
T=input( "Donner une liste d'au moins deux nombres ")
L=len(T)
for i in range(0,L):
for j in range(0,L):
if i<j:
if T[i]>T[j]:
temp=T[j]
T[j]=T[i]
T[i]= temp
print T
On obtient alors :
>>> trib()
Donner une liste d'au moins deux nombres [3,8,5,7,17]
[3, 5, 7, 8, 17]
>>>
En fait il y a autant d'étapes mais on ne les voit pas.
----------------------------------------------------------------------------------------------------------
EXERCICE 2
Reprendre l'exercice précédent et proposer
une variante pour la condition sur j .
------------------------------------------------------------------------------------
REPONSE:
On peut considérer:
from random import*
def trib():
T=input( "Donner une liste d'au moins deux nombres ")
L=len(T)
for i in range(0,L):
for j in range(i,L):
if i<j:
if T[i]>T[j]:
temp=T[j]
T[j]=T[i]
T[i]= temp
print T
On obtient :
>>> trib()
Donner une liste d'au moins deux nombres [3,8,5,7,17]
[3, 8, 5, 7, 17]
[3, 5, 8, 7, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
[3, 5, 7, 8, 17]
>>>
---------------------------------------------------------------------------------------------------
EXERCICE 3
Modifier le scrip précédent pour ordonner une liste de chaînes
suivant la longueur des chaînes.
------------------------------------------------------------------------------------------------------------
REPONSE:
On peut considérer:
from random import*
def tram():
T=input( "Donner une liste d'au moins deux chaînes ")
L=len(T)
for i in range(L):
for j in range(L):
if i<j:
if len(T[i])>len(T[j]):
temp=T[j]
T[j]=T[i]
T[i]= temp
print T
On obtient par exemple:
>>> tram()
Donner une liste d'au moins deux chaînes ["reellement","ynot","extraordinaire","semble"]
['ynot', 'semble', 'reellement', 'extraordinaire']
>>>
--------------------------------------------------------------------------------------------
EXERCICE 4
Donner un script qui reprend le précédent et affiche dans une fenêtre
la liste de chaînes ordonnée.
-------------------------------------------------------------------------------
REPONSE:
On peut considérer:
import Tkinter
from random import*
def messag():
T=input( "Donner une liste d'au moins deux chaînes ")
L=len(T)
for i in range(L):
for j in range(L):
if i<j:
if len(T[i])>len(T[j]):
temp=T[j]
T[j]=T[i]
T[i]= temp
print T
cadre=Tkinter.Tk()
fond=Tkinter.Canvas(cadre, width=400, height=380, background='white')
fond.pack()
txt=fond.create_text(120,30, text=T, font="Arial 16 italic", fill="black")
cadre.mainloop()
On obtient par exemple:
>>> messag()
Donner une liste d'au moins deux chaînes ["nicolas","salut"]
['salut', 'nicolas']
>>>
---------------------------------------------------------------------------------------------------
EXERCICE 5
Créer un script qui demande la saisie d'une phrase,
puis la transforme en une liste de chaînes,
range les chaînes dans l'ordre croissant de leur longueur.
---------------------------------------------------------------------------------------------------------------
REPONSE:
On peut considérer
from random import*
def phra():
phrase=input( "Donner une phrase entre aiguillemets")
T=phrase.split()
print T
L=len(T)
for i in range(0,L):
for j in range(0,L):
if i<j:
if len(T[i])>len(T[j]):
temp=T[j]
T[j]=T[i]
T[i]= temp
print T
On obtient par exemple:
>>> phra()
Donner une phrase entre aiguillemets"bonjour tout le monde"
['bonjour', 'tout', 'le', 'monde']
['le', 'bonjour', 'tout', 'monde']
['le', 'tout', 'bonjour', 'monde']
['le', 'tout', 'monde', 'bonjour']
['le', 'tout', 'monde', 'bonjour']
>>>
---------------------------------------------------------------------------------------------------