PYTHON. 2 INFO Feuille 4

                  INFO   PYTHON. 2.5    FEUILLE n° 4           janvier - février 2012      BTS1

   COURS:    Thème :

                 •        if  ....  :                              si  ..... :

                                   ........                                            alors......

                           elif ......:                             sinon si .....:    

                                    .......                                           alors...

                           else :                             sinon :

                                    .........                          alors...

                     ( Dans le cas ou la condition est une égalité on met ==  )

          •    float (  .... )            (  Pour avoir les décimaux. Utiliser le module decimal pour cela )

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

  EXERCICE 1 :          Admission au bac. Simulation
 

                                 En fournissant la note de l'écrit

                                 le programme indique la suite des

                                 événements. ( Commencer par penser sur papier.  )

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

  REPONSE:

from decimal import*

def bac():

      a =float(input("Entrez votre note de l'écrit : "))
      if a<8:
           print("vous êtes ajourné(e). Vous devez repasser le bac.")
      elif a<10:
              print("vous êtes soumis(e) à un oral de contrôle")
      else:
             print("vous êtes admis(e). Bravo ")

                 Remarque : Les parenthèses avec print ne sont pas indispensables.

                On obtient par exemple:

>>> bac()
Entrez votre note de l'écrit : 8.5
vous êtes soumis(e) à un oral de contrôle
>>>


>>> bac()
Entrez votre note de l'écrit : 5
vous êtes ajourné(e). Vous devez repasser le bac.
>>>


>>> bac()
Entrez votre note de l'écrit : 10
vous êtes admis(e). Bravo
>>>


>>> bac()
Entrez votre note de l'écrit : 12
vous êtes admis(e). Bravo
>>>

                    Vous pouvez améliorer le script en invoquant les mentions.

-----------------------------------------------------------------------------------------
     EXERCICE 2 :          Ouverture d'un guichet

                                Indiquant le jour de la semaine et l'heure,

                                le programme doit indiquer si le magasin

                                est ouvert ou non.

                                 ( Commencer à réfléchir sur papier )

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

  REPONSE:

                  On peut proposer:

def ouv():
       a=int(input("Entrez le numéro du jour (lundi=1, mardi=2,..etc.., dimanche=7) : "))
       b=int(input("Entrez l'heure (de 0 à 24) : "))
       if b<8 or (b>=12 and b<14) or b>=17:
            print("le guichet est fermé")
       elif a==7 or (a==6 and b>=12):
            print("le guichet est fermé")
       else:
              print("vous pouvez vous présenter au guichet au jour et à l'heure choisis")
 

                     On obtient par exemple: 

>>> ouv()
Entrez le numéro du jour (lundi=1, mardi=2,..etc.., dimanche=7) : 2
Entrez l'heure (de 0 à 24) : 13
le guichet est fermé
>>>           

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

Variante possible :  

                              Avec    a= raw_input( " .... : " )   on demande

                                            une chaîne de caractère pour a

def ouv():

      a=raw_input("Entrez le jour de la semaine en minuscules, lundi , mardi ... :  ")
      b=int(input("Entrez l'heure entière de la journée (de 0 à 24) : "))
      if b<8 or (b>=12 and b<14) or b>=17:
             print  "le guichet est fermé"
      elif a=="dimanche"  or (a=="samedi" and b>=12):
             print  "le guichet est fermé"
      else:
             print  "vous pouvez vous présenter au guichet au jour et à l'heure choisis"
 

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

         EXERCICE 3 :
          Que fait le programme suivant ?

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

def change():

       a=1

       b=2
       if a>= b :
            a=b
       else :
              b=a

       print b

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

   REPONSE:

           Cela donne

>>> change()
1
>>>

                          c-à-d  b= 1

 ---------------------------------------------------------------------------------------------------
      EXERCICE 4
                Quelle est la valeur de y à la fin du programme suivant ?

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

REPONSE:

def  am():   
        x= − 3
        if x< − 4 :y =0
        elif x< − 3 : y =4 − x
        elif x< −1 : y =x*x+6*x+8
        elif x<3 :y =2- x
        else :y= − 2

        print y

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

   RREPONSE : 

                 On obtient :

>>> am()

1

>>>

                  c-à-d   y = − 1

              Explication: la condition x< − 1 car   x= − 3 

                    Donc:            y =x*x+6*x+8 = 9 −18 + 8 =  −1

--------------------------------------------------------------------
       EXERCICE 5 :
         Quelle est la valeur de y à la fin du programme suivant ?
--------------------------------------------------------------------- 

  REPONSE:

def  comp():

        x=3
        y=- 2
        if x<y : y = y-x
        elif x==y :y=0
        else: y=x-y

        print y

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

REPONSE: 

            Cela donne  

                      5

                   c-à-d     y = 5

--------------------------------------------------------------------------------------------------
     
     EXERCICE 6.                Assurance
 

                      Une compagnie d'assurances effectue des remboursements en laissant une somme,

                     appelée franchise, qui reste à la charge de l'assuré.

                    Cette franchise représente 10% du montant des dommages sans toutefois pouvoir

                    être inférieure à 15 euros et supérieure à 500 euros.

                    Ecrire une série d'instructions qui demandent à l'utilisateur de saisir le montant des

                    dommages et lui indiquent le montant remboursé ainsi que la montant de la franchise.

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

 REPONSE:

                  Attention : si le montant des dommages est inférieur ou égal à 15 €

                 rien n'est remboursé à l'assuré car la franchise est alors de 15 €.

                   On peut proposer:

def ass():

       m=input("A quel montant en euros estimez- vous les dommages? "

       b=0.10*m 

       if 15<= b<=500:   

           r=m-b     

           print " Votre franchise est ", b,"euros"     

           print "Le montant du remboursement sera de ",r,"euros" 

       elif b<15:       

             r=m-15       

            print " votre franchise est ", 15,"euros" 

            if r<=0:

               print " Le montant du remboursement est : ", 0, "euros"   

            else:

                   print "Le montant du remboursement sera de ",r,"euros" 

       else:   

            r=m-500     

            print " Votre franchise est ", 500,"euros"     

            print "Le montant du remboursement sera de ",r,"euros"

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

     Après avoir tapé sur la touche F5

     on a  la fenêtre Python Shell d'exécution :

 

Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on

win32

Type "copyright", "credits" or "license()" for more information.
****************************************************************   

Personal firewall software may warn about the connection IDLE   

makes to its subprocess using this computer's internal loopback 

interface.  This connection is not visible on any external   

interface and no data is sent to or received from the Internet.   

****************************************************************   

 IDLE 1.2.1      >>> ================================ RESTART ================================ 

>>> ass()

quel montant en euros estimez vous les dommages? 650

 Votre franchise est  65.0 euros

Le montant du remboursement sera de  585.0 euros

>>>

                             Autre exemple:

>>> ass()
A quel montant en euros estimez vous les dommages? 12
votre franchise est 15 euros
Le montant du remboursement est : 0 euros
>>> ass()
A quel montant en euros estimez vous les dommages? 150
Votre franchise est 15.0 euros
Le montant du remboursement sera de 135.0 euros
>>> ass()
A quel montant en euros estimez vous les dommages? 16
votre franchise est 15 euros
Le montant du remboursement sera de 1 euros
>>> ass()
A quel montant en euros estimez vous les dommages? 15
votre franchise est 15 euros
Le montant du remboursement est : 0 euros
>>> ass()
A quel montant en euros estimez vous les dommages? 5
votre franchise est 15 euros
Le montant du remboursement est : 0 euros

>>>

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

 
    EXERCICE 7: 

                     En donnant un réel x de l'intervalle [ 5 ; 10[  écrit avec trois décimales

                    le programme doit donner la seconde décimale.   

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

    REPONSE:

                La précision de Python 2.7 peut être prise en défaut si l'on ne prend pas 

                trois décimale.

             On peut considérer:

def dec(): 

       M=input("Entrer un nombre décimal compris entre 5 et 10 avec deux décimales")         

       # La seconde décimale est t 

      # Comme on utilise de nombres positif on peut prendre int au lieu de floor

       t=((M-int(M) )*10 - int((M-int(M))*10 ))*10  

       #     c'est-à-dire t=  (   M-intM )  *10 - int(  (  M-intM)  *10 )  )  *10   

       n = int(t) 

       print " La seconde décimale est de " , M ,"est" , n

                         Explications:

                    •   M - int( M)  donne la partie décimale de M ( celle qui est à droite de la virgule )

                       Donc 10 *(  M - int( M) ) donne le premier chiffre à droite de

                       la virgule de M suivi de la virgule et des autres décimales de M.

                     •   int (10 *(  M - int( M) ) ) donne la première décimale de M

                     •    10 *(  M - int( M) ) -  int (10 *(  M - int( M) ) ) donne 0 suivi des décimales de M sauf la première décimale.

                    •   [  10 *(  M - int( M) ) -  int (10 *(  M - int( M) ) ) ]*10 donne la seconde décimale

                      de M suivi de la virgule et des autres décimales

                  •   Enfin  int(      [  10 *(  M - int( M) ) -  int (10 *(  M - int( M) ) ) ]*10    ) donne la seconde décimale de M

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

   EXERCICE 8     Appoint en pièces de monnaie
             

                On veut payer une somme d'argent M en euros (entre 5€ et 10 € )

                avec des pièces de 0, 01 € , 0, 02€ , 0, 05€, 0, 10€, 0, 20€ , 0, 50€,

               1€ et 2€ , en utilisant le moins de pièces possible.

                Par exemple:

               Soit M = 7, 29 €

                Ce montant se paie avec trois pièces de 2€,

                                                          une pièce de 1€,

                                                          une pièce de  0,20€,

                                                         une pièce de 0,05 €

                                          et enfin deux pièces de 0,02€.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------

  Réponse:

                On peut considérer:

def appoint1():

      M=input("Donner un montant en euros compris entre 5 euros et 10 euros ")

      # M est le montant à exprimer en pièces
      d1=M

         # cela permet de garder M
      d=d1//2

                    # d1//2 est le quotient entier de la division de d1 par 2

                    #   C'est le nombre de fois qu'il y a 2 dans d1

      print " Il faut ", d ," pièces de 2 euros"

      u1=M-2*d

                    # u1 est le montant à payer sans utiliser de pièce de 2 €

      u=u1//1

      print " Il faut ", u ," pièces de 1 euros"

                 # M-2*d-u  est le montant à payer sans utiliser de pièce de 2 € ni de 1 €
      cin1=10*(M-2*d-u)

      ci=cin1//5

       print " Il faut ", ci ," pièces de 50 centimes d'euros"
       vi1=10*(M-2*d-u-0.5*ci)

       # M-2*d-u-0.5*ci  est le montant à payer sans utiliser de pièce de 2 € ni de 1 € ni 0,50€

        vi=vi1//2

       print " Il faut ", vi ," pièces de 20 centimes d'euros"
       di1=10*(M-2*d-u-0.5*ci-vi*0.2)

       # M-2*d-u-0.5*ci-vi*0.2   est le montant à payer sans utiliser de pièce de 2 € ni de 1 € ni 0,50€ ni  0,20€

       di=di1//1 

        print " Il faut ", di ," pièces de 10 centimes d'euros"
        cin1=100*(M-2*d-u-0.5*ci-vi*0.2-0.10*di)

        cin=cin1//5

        print " Il faut ", cin ," pièces de 5 centimes d'euros"
        deu1=100*(M-2*d-u-0.5*ci-vi*0.2-0.10*di-cin*0.05)

        deu=deu1//2

        print " Il faut ", deu ," pièces de 2 centimes d'euros"
        cen1=100*(M-2*d-u-0.5*ci-vi*0.2-0.10*di-cin*0.05-deu*0.02)

         cen=cen1/1

         print " Il faut ", cen ," pièces de 1 centime d'euros"

 Par exemple on obtient:

>>> appoint1()
Donner un montant en euros compris entre 5 euros et 10 euros 7.85
Il faut 3.0 pièces de 2 euros
Il faut 1.0 pièces de 1 euros
Il faut 1.0 pièces de 50 centimes d'euros
Il faut 1.0 pièces de 20 centimes d'euros
Il faut 1.0 pièces de 10 centimes d'euros
Il faut 0.0 pièces de 5 centimes d'euros
Il faut 2.0 pièces de 2 centimes d'euros
Il faut 1.0 pièces de 1 centime d'euros
>>>

                             AUTRE POSSIBILITE:

from random import*
from math import*
def fen():
      M=input("Entrer un nombre décimal compris entre 5 et 10 avec trois décimales  ")
      a,b,c,d,e,f,g,h = 0,0,0,0,0,0,0,0 
      while M>=2:
              M=M-2
              a=a+1      
      while M>1:
             M=M-1.
             b=b+1       
      while M>=0.5:
              M=M-0.5
              c=c+1
       while M>=0.2:
              M=M-0.2
              d=d+1      
       while M>=0.1:
              M=M-0.1
              e=e+1 
       while M>=0.05:
              M=M-0.05
              f=f+1 
        while M>=0.02:
                M=M-0.02
                g=g+1       
        if M!=0:
                 h=h+1

    # On ne peut pas pour la pièce de 0,01 € que l'on a ou pas raisonner de la même façon
    # Cela dépasse la "sensibilité" de Python 2  

    # Donc si   0 <  M < 0,02 une pièce de 0,01 € est exigée.

       print a," pièces de  2  euros"
       print b," pièces de  1 euros"
       print c," pièces de  0,50 euros"
       print d," pièces de  0,20 euros"
       print e," pièces de  0,10 euros"
       print f," pièces de  0,05 euros"
       print g," pièces de  0.02 euros"
       print h," pièces de  0,01 euros"

Par exemple:

>>> fen()
Entrer un nombre décimal compris entre 5 et 10 avec trois décimales  7.63
3  pièces de  2  euros
1  pièces de  1 euros
1  pièces de  0,50 euros
0  pièces de  0,20 euros
1  pièces de  0,10 euros
0  pièces de  0,05 euros
1  pièces de  0.02 euros
1  pièces de  0,01 euros


>>> 
  

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