POO et récursivité
On donne ci-dessous le code d'une classe Chien
.
-
-
Associer, en vous appuyant sur l'extrait de code précédent les noms :
nom
,poids
,Chien
donne_nom
aux termes classe, attribut, méthode.nom
etpoids
sont des attributs ;Chien
est une classe,donne_nom
est une méthode. -
Quel est le type du paramètre
poids
de la méthode__init__
de la classeChien
?Le paramètre
poids
est un flottant d'après la signature de la méthode__init__
-
Donner une instruction permettant d'instancier un objet
c
de typeChien
, représentant un chien nommé Médor qui pèse 12 kilos.c = Chien("Médor", 12.0)
-
Donner une instruction permettant d'instancier un objet
home
de typeChenil
, qui abrite deux chiens : le chien Médor de la question précédent, et un chien Milo pesant 10,5 kilos.home = Chenil([c, Chien("Milo", 10.5)])
-
-
Écrire une méthode
mange
de la classeChien
qui modifie l'attributpoids
du chienself
en lui ajoutant la valeur de l'argumentration
. On ajoute les contraintes suivantes concernant la méthodemange
:- on vérifiera que la valeur de
ration
est comprise entre 0 (exclu) et un dixième du poids du chien (inclus), -
la méthode renverra
True
siration
satisfait ces conditions et que l'attributpoids
est bien modifié,False
dans le cas contraire.1 2 3 4 5
def mange(self, ration): if 0 < ration <= self.poids*0.1: self.poids += ration return True return False
- on vérifiera que la valeur de
-
Écrire une méthode
nourrir
de la classeChenil
qui nourrit tous les chiens de la listeself.contenu
. On renverra le nombre de chiens qui ont été effectivement nourris.1 2 3 4 5 6 7 8
def nourrir(self, ration): """ Chenil, float -> int """ nb_chiens_nourris = 0 for c in self.contenu: a_mangé = c.mange(ration) if a_mangé: nb_chiens_nourris = 0 return nb_chiens_nourris
On considère la suite \((u_n)_{n \in \mathbb{N}}\) définie par la relation :
-
-
Écrire une fonction récursive \(u\) qui étant donné un entier
n
renvoie le nombre \(u_n\).1 2 3 4 5 6
def u(n): """ int -> int """ if n <= 0: return 3 else: return 3*u(n - 1) + 5
-
Justifier que la fonction
u
que vous avez écrite est récursive.Il y a un appel récursif à la ligne
5
du code précédent.
-
-
Dresser l'arbre d'appel de l'instruction
u(3)
.