TEST ALGO2 février 2015 et janvier 2016

                 INFO         TEST D'ALGO      BTS1 A            Mardi 10 février 2015   

                                                     redonné le mercredi 27 janvier 2016   en BTS1 B

          Premier travail

          Voici un script écrit en Python 2.7

from random import*

from string import*

def es3():

      print "On s'intéresse à trois étudiants en beaux arts"

      L=["Isidore", "philomy", "Arverne"]

      B=[]

      C=[]

      D=[L]

      for i in range(3):

           print "Donner la note de chinois au premier semestre de ",L[i]

           b=input()

           B.append(b)

           print "Donner sa note de suédois au premier semestre "

           c=input()

           C.append(c)

      D.append(B)

      D.append(C)

      for line in D:

             print line

      s=B[0]

      for i in range(3):

            if s<B[i]:

                 s=B[i]

                 p=L[i]

      print " En chinois c'est",p

      M=[]

      for i in range(3):

            M.append((B[i]+ C[i]) / 2.)

      D.insert(1,M)

      for line in D:

             print line 

          QUESTIONS :

       1. Que signifie B = [ ] ?                                      B est une liste  vide.

                                                                                     On ne peut pas dire que B contient une liste vide

                                                                                     car dans B il n'y a rien.

       2. Quelles sont les valeurs de i quand il y a : for i in range(3): ?

                                                      i prend successivement les valeurs entières  0 ; 1 ;  2 

                                                     Aucune initialisation de i n'est nécéssaire avec une boucle for.

       3.Que font les lignes 

                  for line in D:

                        print line  ?                La liste D  a ses termes affichés les uns en dessous des autres

      4.Qu'y a-t-il dans D avant le premier for et qu'y a-t-il dans D après le premier for ?

                                Avant il y a seulement la liste L  car D = [ L ]

                          Après il y a en plus les listes B, de notes de chinois,  et C, de notes de suédois.

                           C'est-à-dire  on :       L = [ L , B , C ]

      5.Que donne l'affichage de p ?                 p est l'étudiant qui a la meilleure note en chinois

                                                                                 p est un élément de L

      6. Que représente s ?                 s est la meilleure note en chinois

      7. Qu'est-ce que M ?              M est la liste des moyennes de chacun des étudiants

      7.Quel est l'effet de D.insert(1,M) ?     Cela met la liste M dans la liste L en seconde position

                                                                            de façon à avoir M comme terme d'indice 1 dans L

    8.Qu'y a-t-il dans D à la fin ?    La liste des trois noms ,puis la liste de  trois moyennes ,

                                                          puis la liste des trois notes de chinois,enfin la liste des trois

                                                          notes de suédois.

                                                          C'est-à-dire    D = [ L , M , B , C ]

      9. Qu'y a-t-il dans d à la fin c-à-d quel est le but du script ?

                                                                      Avoir un bulletin avec les listes des noms,

                                                                    des moyennes, des notes de

                                                                   chinois, puis des notes suédois.

    10.Quand on a :    M.append(( B[i]+C[i])/2.)

          Quel est l'intérêt de mettre 2. au lieu de 2 ?

                                                       Pour obtenir le résultat sous forme décimale

                                                     c-à-d   obtenir le type float

           A quoi sert le append ?  

                                      Cela permet de mettre dans la liste M

                                           à la fin la valeur de ( B[i]+C[i])/2.

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

    11. Question facultative non posée  pour ceux qui ont le temps

        Quel affichage aurait-on obtenu si on avait mis( avec le module from string import* ?

                         F=join(L)

                         print F ?               Cela permet d'avoir les noms les uns à côté des autre,

                                                      sans liste  sans crochets ni virgule

            Pour voir  l'effet du script de la partie A on a par exemple:

>>> es3()
On s'intéresse à trois étudiants en beaux arts
Donner la note de chinois au premier semestre de Isidore
15
Donner sa note de suédois au premier semestre
12
Donner la note de chinois au premier semestre de philomy
13
Donner sa note de suédois au premier semestre
10
Donner la note de chinois au premier semestre de Arverne
17
Donner sa note de suédois au premier semestre
16
['Isidore', 'philomy', 'Arverne']
[15, 13, 17]
[12, 10, 16]
En chinois c'est Arverne
['Isidore', 'philomy', 'Arverne']
['13.5', '11.5', '16.5']
[15, 13, 17]
[12, 10, 16]
>>>

      (      Remarque:  Si à partir de la ligne D.append(B) on mettait les lignes dans la boucle for i in range(3):

            on répèterait simplement  plusieurs  fois  la même chose )

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

            Second ttravail

           1.  Écrire en Python 2.7 un script qui demande la saisie d'une liste N de

                cinq entiers naturels certains pairs et certains impairs puis qui en donne

               la liste P de ceux qui sont pairs puis qui donne une liste F contenant P,

                la liste des carrés des éléments de P et la liste des cubes des éléments de P,

               en affichant F sur trois lignes comme pour une matrice.

            REPONSE :     On peut proposer

from random import*
def dist():
       N=input("Donner cinq entiers naturels pairs ou impairs  ")
       F=[]
       P=[]
       for i in range(5):
             if N[i]%2==0:
                 P.append(N[i])
       F.append(P)
       F.append([elem**2 for elem in P])
       F.append([elem**3 for elem in P]) 
       for line in F:
             print line

              Par exemple on obtient:

>>> dist()
Donner cinq entiers naturels pairs ou impairs  [14,8,9,12,13]
[14, 8, 12]
[196, 64, 144]
[2744, 512, 1728]

>>> ​

           ( Remarque : la liste P s'affiche car elle est dans F. Il est donc inutile de mettre print P )

         2. Écrire un script qui permet d'ordonner dans l'ordre croissant les termes

               d'une liste L de valeurs numériques sans utiliser L.sort().

   REPONSE:           On peut proposer:

from random import*
def tri():
       L=input( "Donner une liste de valeurs numériques:  " )
       for i in range(len(L)):
             for j in range(i,len(L)):
                   if L[i]>L[j]:
                     L[i],L[j]=L[j],L[i]
      print L

                                Par exemple on obtient:

>>> tri()
Donner une liste de valeurs:   [16,4,8,1,9]
[1, 4, 8, 9, 16]
>>>           

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