PYTHON INFO FEUILLE D'EX n° 27

                        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']

>>>

                          tkinter400.png

---------------------------------------------------------------------------------------------------             

        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']
>>>

---------------------------------------------------------------------------------------------------