Nature">
Nothing Special   »   [go: up one dir, main page]

Ap2examen 17 18-2

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 4

INSTITUT PREPARATOIRE AUX Année Universitaire : 2017 / 2018

ETUDES D’INGENIEUR DE MONASTIR


Examen n° 1
Matière : Informatique Nombre de pages : 4
Durée : 2 heures Date : 10/01/2018 Classes : MP2, PC2 et T2

Exercice : (4 pts)
Soit le script Python ci-dessous. Donner le résultat exact de son exécution :
class Atome:
"""atomes simplifiés, choisis parmi les 10 premiers éléments """
__table =[None, ('hydrogène',0), ('hélium',2), ('lithium',4),
('béryllium',5), ('bore',6), ('carbone',6), ('azote',7),
('oxygène',8), ('fluor',10), ('néon',10)]
def __init__(self, nat):
"le n° atomique détermine le n. de protons, d'électrons et de
neutrons"
self.__np, self.__ne = nat, nat # nat = numéro atomique
self.__nn = Atome.__table[nat][1] # nb. de neutrons trouvés dans
# table
def __modif(self,v):
print("L'accesseur à n.de protons s'intervient")
self.__np=v
self.__ne=v
self.__nn=Atome.__table[v][1]
def __accesseur_ne(self):
print("L'accesseur à n. d'électrons s'intervient")
return self.__ne
def __mutateur_ne(self,v):
print("Le mutateur de n. d'électrons s'intervient")
self.__ne=v
ne=property(__accesseur_ne,__mutateur_ne)
np=property(fset=__modif)
def __str__(self):
return "Nom de l'élément :{}\n{} protons, {} électrons, {}\
neutrons".format(Atome.__table[self.__np][0],self.__np,self.__ne,self.__nn)
class Ion(Atome):
"""les ions sont des atomes qui ont gagné ou perdu des électrons"""
def __init__(self, nat, charge):
"le n° atomique et la charge électrique déterminent l'ion"
Atome.__init__(self, nat)
self.ne -=charge
self.charge = charge
def __str__(self):
return Atome.__str__(self)+" Particule électrisée.\
Charge ={}".format(self.charge)
def __del__(self):
print("Le destructeur de la classe Ion s'intervient")
a1 = Ion(3,1)
a2 = Atome(5)
print(a2)
a2.np=9
print(a2)
print(a1)
a1=100
print(a1)
1
Problème : (16 pts)
Dans ce problème on va informatiser en utilisant la programmation orientée objet
Python le jeu de domino.
Le principe de jeux est le suivant :
 Un jeu de dominos classique est composé de 28 pièces dont chaque côté comporte un
certain nombre de petits points allant de 0 à 6.
 Toutes les combinaisons de ces différents chiffres existent donc : 0-0, 0-1, 0-2, 0-3, 0-4,
0-5, 0-6, 1-1, 1-2, 1-3, etc.
 Lorsqu’une pièce contient deux fois le même chiffre (0-0, 1-1, 2-2, 3-3, 4-4, 5-5, 6-6), cela
s’appelle un “double”.
Description de la partie :
Pour simplifier on va jouer avec 4 joueurs. Chaque joueur prendra 7 dominos en main.
Le joueur qui commence à jouer le premier c’est celui qui possède le domino 6-6 puisque c’est
la plus grande valeur de tous les dominos. Il l’a posera sur la table.
Le joueur suivant doit à son tour poser un domino ayant le même nombre de points sur au
moins un côté du domino précédemment posé.

Si le joueur possède un domino correspondant, il le pose à droite ou à gauche sur la table ça


dépend de la valeur du domino posé. Sinon, il passe son tour.

Pour gagner un tour de domino, il suffit d’être le premier joueur à avoir posé tous ses
dominos. Il se peut que le jeu soit bloqué où aucun joueur a un domino à placer. Alors le joueur
ayant le moins de points est déclaré vainqueur.

Le comptage des points pour le vainqueur d’un tour se fait en comptant la somme des points
des dominos qui restent dans les mains des autres joueurs. Cette somme est ajoutée à son
score.
Travail demandé :

1) Définir la classe Pièce :

1.1) le constructeur admet deux paramètres Val1 et Val2 qui permettent de définir les
deux attributs privés coté1 et côté2. Ils seront initialisés respectivement par les deux
paramètres Val1 et Val2.

1.2) la méthode somme_points qui permet de retourner la somme des points d’une
pièce.

1.3) la méthode a_valeur qui accepte en paramètre une valeur Val et qui permet de
vérifier si l’un de deux côtés de la pièce possède cette valeur.

1.4) la méthode magique __repr__ qui permet de représenter une pièce de domino (voir
l’exemple).

1.5) les deux propriétés : côté1 et côté2 qui permettent de consulter les deux attributs
privés respectivement côté1 et côté2.

2
Exemple :
>>>P=Pièce (6,2)

>>>P (6,2)

>>>P.a_valeur(6) True

>>>P.a_valeur(5) False

2) Définir la classe Dominos :

2.1) le constructeur n’admet pas de paramètres et permet de définir l’attribut privé


data. Ce dernier sera une liste qui contiendra les 28 instances de Pièce.
2.2) une méthode mélanger qui permet de mélanger les pièces qui se trouvent dans
l’attribut data en permutant chaque pièce d’indice i avec une tirée au hasard parmi
celles qui la suivent.
NB : Utiliser randint(a,b) qui se trouve dans la bibliothèque random et retourne un
entier compris entre a et b.
2.3) une méthode retirer_pièce qui permet de supprimer la dernière pièce de l’attribut
data et de la retourner.

3) Définir la classe Main :


3.1) le constructeur accepte en paramètre une liste L qui contiendra les 7 pièces avec
lesquelles le joueur va commencer à jouer. Une instance de la classe Main possède un
attribut privé data qui sera initialisé à partir de L.
3.2) une méthode somme_points qui permet de retourner la somme des points de toutes
les pièces de la main courante.
3.3) une méthode indice_double_6 qui permet de retourner l’indice de la pièce double
six dans la main courante si elle existe, sinon elle retourne -1.
3.4) une méthode liste_indices qui permet de retourner la liste des indices des pièces de
la main courante dont au moins l’un des deux côtés est égal à la valeur Val passée en
paramètre.
3.5) une méthode retirer_pièce qui permet de supprimer une pièce de l’attribut data
dont l’indice I sera passé en paramètre.
4) Définir la classe Joueur :
4.1) le constructeur accepte en paramètres une liste L qui contiendra les 7 pièces avec
lesquelles le joueur va commencer à jouer. Un joueur possède deux attributs :
 M une instance de la classe Main,
 S initialisé à zéro qui déterminera le score du joueur.
4.2) une méthode choisir_pièce qui accepte en paramètres deux valeurs Val1 et Val2 et
qui permet de supprimer et de retourner une pièce de la main du joueur. L’indice de la
pièce à retirer sera saisi au clavier et doit être appartenir à la liste des indices des

3
pièces contenants au moins la valeur Val1 ou Val2. Ne rien faire si la liste des indices
est vide.

5) Définir la classe Joueur_Ordinateur : cette classe dérive (hérite) de la classe joueur. La


pièce choisie par un ordinateur sera la première pièce trouvée dans la liste des indices des
pièces contenants au moins la valeur Val1 ou Val2. Ne rien faire si la liste des indices est vide.
6) Définir la classe Table :
6.1) le constructeur acceptera en paramètres une pièce qui sera la première pièce posée
sur la table,
L’instance Table possède trois attributs : une liste L qui contiendra les pièces mises sur
la table, et deux attributs droite et gauche qui indiquent les valeurs des côtés des pièces
posées à droite et à gauche des dominos précédemment posés.
6.2) une méthode placer_pièce qui accepte en paramètres une pièce et qui doit la placer
dans la liste L dans la bonne position (droite ou gauche), et mettre à jour les attributs
droite et gauche,
Pour cet exemple l’instance de la classe Table sera comme suit :

L’attribut L=[(1,1),(1,6),(6,6),(6,3)]

L’attribut droite=3

L’attribut gauche=1

Vous aimerez peut-être aussi