###################################################### ### Exercice 1 : Chat ###################################################### class Chat(object): """classe qui peut comparer poids et âge""" def __init__(self,nom,race,poids,annee): self.nom=nom self.race=race self.poids=poids self.annee=annee def affiche(self): print(self.nom,"est un",self.race,"de",self.poids,"kg né(e) en",self.annee) def estPlusGros(self,cat): if self.poids>cat.poids: print(self.nom,"est plus gros que",cat.nom) elif self.poidscat.annee: print(cat.nom,"est plus vieux que",self.nom) else: print(self.nom,"et",cat.nom,"sont de la meme annee") c1=Chat("Garfield","Persan",5.2,2016) c1.affiche() c2=Chat("Félix","Siamois",3.7,2015) c2.affiche() c1.estPlusGros(c2) c1.estPlusVieux(c2) ###################################################### ### Exercice 2 : Voiture ###################################################### # Voitures class Voiture(object): """peut rouler""" def __init__(self, marque, modele): self.marque=marque self.modele=modele self.kilometrage=0 def roule(self,km): self.kilometrage += km def affiche(self): print(self.marque, self.modele, ":",self.kilometrage,"km") class Conducteur(object): """influe sur voiture conduite""" def __init__(self,nom): self.nom=nom def conduit(self,v,km): v.roule(km) print(self.nom," a conduit la ",v.marque,v.modele," pendant ",km,"km") v.affiche() v1=Voiture("Lamborghini","Huracan") v1.roule(685) v1.roule(310) v1.affiche() v2=Voiture("Maserati","Gran Turismo") v2.roule(89) v2.affiche() v3=Voiture("Lotus","Evora 400") v3.roule(124) v3.affiche() c1=Conducteur("Elsa") c2=Conducteur("Théo") c1.conduit(v1,302) c2.conduit(v3,103) ###################################################### ### Exercice 3 : Vecteur ###################################################### class Vecteur(object): """pas de nom""" def __init__(self,coord=(0,0)): self.coord=coord def affiche(self): print("(",self.coord[0],";",self.coord[1],")",sep='') def prodScal(self,v): return self.coord[0]*v.coord[0]+self.coord[1]*v.coord[1] def somme(self,v): x=self.coord[0]+v.coord[0] y=self.coord[1]+v.coord[1] return Vecteur((x,y)) v1=Vecteur((3,5)) v2=Vecteur((-6,7)) print(v1.prodScal(v2)) v3=v1.somme(v2) v3.affiche() ###################################################### ### Exercice 4 : Fleur ###################################################### from turtle import * from math import * reset() class Fleur(object): """classe qui dessine les fleurs et permet des hybrides""" nb=0 def __init__(self,x,y,rayon,couleur1,couleur2): self.x=x self.y=y self.rayon=rayon self.couleur1=couleur1 self.couleur2=couleur2 Fleur.dessineFleur(x,y,rayon,couleur1,couleur2) Fleur.nb += 1 def hybride(self,f): newX=int((self.x+f.x)/2) newY=int((self.y+f.y)/2) newRayon=int((self.rayon+f.rayon)/2) return Fleur(newX,newY,newRayon,self.couleur1,f.couleur2) @staticmethod def dessineFleur(x,y,rayon,couleur1,couleur2): #dessine fleur up() goto(x,-50) down() width(3) color("green") goto(x,y) setheading(0) width(1) fillcolor(couleur1) begin_fill() circle(rayon+2,360) end_fill() goto(x+3,y+1) fillcolor(couleur2) r=int(2*pi*rayon/11.1) right(90) for i in range(6): begin_fill() circle(r,237) right(180) end_fill() f1=Fleur(-100,150,20,"pink","blue") f2=Fleur(180,120,30,"red","orange") f3=f1.hybride(f2) print("nb de fleurs:",Fleur.nb) ###################################################### ### Exercice 5 : Toile ###################################################### #!/usr/bin/env python3 # -*- coding: utf-8 -*- from turtle import * from random import randint reset() hideturtle() class Toile(object): """classe avec mouches aléatoires""" def __init__(self): self.posMouches = [] Toile.dessineToile() def ajouteMouche(self): pres=True while pres: pres=False pos=[5*randint(-40,40),5*randint(-40,40)] #on regarde d'il n'y a pas deja une mouche: for i in range(len(self.posMouches)): if self.posMouches[i][0]==pos[0] and self.posMouches[i][1]==pos[1]: pres=True Toile.mouche(pos,randint(0,360)) self.posMouches+=[pos] def afficheNbMouches(self): print("Nb de mouches de la toile : ",len(self.posMouches)) @staticmethod def mouche(coord,angle): setheading(angle) up() goto(coord) down() begin_fill() circle(10,110) left(60) circle(10,110) up() goto(coord) down() left(25) circle(10,110) left(60) circle(10,110) right(115) circle(4) end_fill() @staticmethod def axe(angle): setheading(angle) up() goto(0,0) down() forward(300) @staticmethod def dessineToile(): a=0 for i in range(8): Toile.axe(a) a+=45 up() goto(-20,20) down() d=1 for i in range(11): goto(0,40*d) goto(30*d,30*d) goto(40*d,0) goto(30*d,-30*d) goto(0,-40*d) goto(-30*d,-30*d) goto(-40*d,0) goto(-30*d,30*d) d+=0.5 t = Toile() for i in range(20): t.ajouteMouche() t.afficheNbMouches() ###################################################### ### Exercice 6 : Perchiste (a) ###################################################### #classe avec dictionnaire des instances creees class Perchiste : """avec performances des sauts""" sportifs={} def __init__(self,nom,sauts): self.nom=nom self.sauts=sauts Perchiste.sportifs[self.nom]=self.moyenne() def __del__(self): del Perchiste.sportifs[self.nom] @classmethod def afficheSportifs(cls): print("Perchistes:") for cle in sorted(Perchiste.sportifs): print(" ",cle," : ",Perchiste.sportifs[cle]) def moyenne(self): s=0 nb=0 for c in self.sauts: if(c!="X"): s+=c nb+=1 return round(s/nb,2) def affiche(self): print(self.nom,": ",self.moyenne(),"m en moyenne") print("Détail des sauts:",self.sauts) s1 = Perchiste("Renaud Lavillenie",[5.65,5.70,"X",5.81,"X",5.9,6.0]) s1.affiche() s2 = Perchiste("Sergueï Bubka",[5.6,5.82,"X",5.91,6]) s2.affiche() Perchiste.afficheSportifs() del(s1) Perchiste.afficheSportifs() ###################################################### ### Exercice 6 : Perchiste (b) ###################################################### # version avec lieux des competitions class Perchiste : """performances de sauts""" sportifs={} def __init__(self,nom,sauts): self.nom=nom self.sauts=sauts Perchiste.sportifs[self.nom]=self.moyenne() def __del__(self): del Perchiste.sportifs[self.nom] @classmethod def afficheSportifs(cls): print("Perchistes:") for cle,val in sorted(Perchiste.sportifs.items(),key=lambda elt: elt[1],reverse=True): print(" ",cle," : ",val) def moyenne(self): s=0 nb=0 for c in self.sauts: for sa in c[1]: if(sa!="X"): s+=sa nb+=1 return round(s/nb,2) def affiche(self): print(self.nom,": ",self.moyenne(),"m en moyenne") print("Détail des sauts:") for s in self.sauts: listeSaut=str(s[1]) print(" ",s[0],":",listeSaut[1:len(listeSaut)-1]) s1 = Perchiste("Renaud Lavillenie",[("Rio 2016",[5.75,5.85,5.93,"X",6.03]),("Berlin 2018",[5.80,"X",5.9,"X","X",5.95]),("Shangai 2018",[5.7,5.75,"X",5.81])]) s1.affiche() s2 = Perchiste("Serguei Bubka",[("Rome 1984",[5.85,"X",5.94]),("Paris 1985",[5.7,5.8,5.9,"X","X",6])]) s2.affiche() Perchiste.afficheSportifs() del(s1) Perchiste.afficheSportifs()