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()
A 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-int( M) ) *10 - int( ( M-int( M) ) *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
>>>
------------------------------------------------------------------------------------------------------------------