Problème débutant POO

Fermé
SpookyAlexis - 13 sept. 2020 à 10:03
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 13 sept. 2020 à 19:37
Bonjour, je viens de commencer à apprendre la programmation orientée objet et je cherche à créer 2 classes simulant une voiture et un conducteur. Je code en Python 3.
Le but de l'exercice est de pouvoir accélérer ou décélérer du coté conducteur et que du coté voiture, si la vitesse dépasse la vitesse maximale autorisée (rentrée par l'utilisateur) , la voiture ne dépasse pas la vitesse max. Pareil si une vitesse est négative elle est ramenée à 0 (la voiture ne recule pas).
J'ai réussi à faire accélérer et décélérer la voiture à ma guise mais je n'arrive pas à limiter la vitesse de la voiture (grâce à la classe car). Je pense que mon erreur est toute bête mais je reste bloqué la dessus j'ai donc besoin de votre aide SVP.
Je joins ci-dessous ce que j'ai codé (les classes car et driver sont des fichiers différents du main).

car:

class car(object):
def __init__(self,maxspeed,cspeed): #initialisation de la class car
self.maxspeed=maxspeed #affectation de la valeur de la vitesse max
self.cspeed=cspeed
def accelerate(self): #fonction accelerate qui empêche la vitesse de la voiture de dépasser la vitesse maximale
if self.cspeed>self.maxspeed : #si la vitesse de la voiture insérée dans la focntion accelerate est > à la vitesse max on affecte la vitesse max à la voiture
self.cspeed=self.maxspeed
def decelerate(self): #fonction decelerate qui empêche la vitesse de la voiture d'être négative
if self.cspeed<0 : #si la vitesse de la voiture insérée dans la focntion accelerate est négative on affecte la vitesse 0 à la voiture
self.cspeed=0
def retnspeed (self): #retour de la valeur de la vitesse (avec restrictions)
return self.cspeed


driver:

class Driver(object):
def __init__(self,Name,age,car,wspeed): #initialisation de la class driver
self.Name=Name #affectation de la valeur nom du driver
self.age=age #affectation de la valeur de l'age du driver
self.car=car #affectation de la valeur de la voiture du driver
self.wspeed=wspeed #affectation de la valeur de la vitesse actuelle de la voiture
def toHundred(self): #fonction pour augmenter la vitesse de 100
self.wspeed+=100
def dispSpeed(self): #fonction pour afficher la vitesse
print(f"La vitesse actuelle est de {self.wspeed}")
def userAcc(self): #fonction pour augmenter la vitesse de 20
self.wspeed+=20
def userDec(self): #fonction pour baisser la vitesse de 30
self.wspeed+=-30
def retspeed(self): #fonction pour retourner la valeur de la vitesse
return self.wspeed


main:

from car import car #on importe les classe nécessaire au programme
from driver import Driver

def main():
cspeed=0 #initialisation de la vitesse de la voiture à 0
print("Vitesse max :") #demande vitesse max voulue
vitessemax=int(input())
print("Nom :") #demande nom
nom=input()
print("Age:") #demande age
age=input()
print("Voiture:") #demande voiture
voiture=input()
exit=2 #variable while
Fdriver=Driver(nom,age,voiture,cspeed)#utilisation de la classe driver avec les infos récupérées (nom,age,voiture)
Fcar=car(vitessemax,cspeed) #utilisation de la classe car avec les infos récupérées (vitessemax)
while(exit!=1):
print("Pour accelerer de 100 taper 1")
print("Pour montrer la vitesse taper 2")
print("Pour accelerer de 20 taper 3") #affichage menu choix
print("Pour decelerer de 30 taper 4")
print("Pour quitter taper 5")
print("")
choix=int(input())
if(choix==1): #acceleration de 100
Fdriver.toHundred()
cspeed=Fdriver.retspeed()
cspeed=Fcar.accelerate()
cspeed=Fcar.retnspeed()
if(choix==2): #montrer la vitesse
Fdriver.dispSpeed()
if(choix==3): #accelerer de 20
Fdriver.userAcc()
cspeed=Fdriver.retspeed()
Fcar.accelerate()
cspeed=Fcar.retnspeed()
if(choix==4): #decelerer de 30
Fdriver.userDec()
cspeed=Fdriver.retspeed()
Fcar.decelerate()
cspeed=Fcar.retnspeed()
if(choix==5): #quitter
exit=1


if __name__ == '__main__': #lancement programme
main()

3 réponses

dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 148
13 sept. 2020 à 10:10
Salut
C’est bien, tu fais de la programmation modulaire. En revanche, mollo sur les commentaires, il y en a des inutiles. Tu devrais baliser ton code, je n’ai pas la technique mais en recherchant tu vas trouver sur CCM.
Tu as écrit beaucoup sur ton cahier ? Ça peut aider pour le mécanisme entre les classes.
0
SpookyAlexis
13 sept. 2020 à 10:14
Salut ouais j'ai essayé que ce soit clair pour vous :) qui peut le plus peut le moins.
Ok je vais aller me renseigner sur les balises.
Non j'ai pas écrit sur mon cahier (tu parles bien d'un cahier de cours physique?). Mon prof a mis le cours en ligne mais même avec j'ai du mal.

Merci pour la réponse rapide.
0
dachiasse Messages postés 1709 Date d'inscription samedi 12 septembre 2020 Statut Membre Dernière intervention 13 mai 2021 148
13 sept. 2020 à 10:34
La POO n’est pas aussi simple qu’on le croit, surtout quand les classes communiquent entre elles car il n’y a pas de réponse unique.
Pour le balisage de code, c’est vraiment pas compliqué :
Là où tu as les icônes gras (B pour Bold), italique (/), souligner (S), et… <> pour le code, tu as une flèche vers le bas et tu peux sélectionner python. Voilà c’est tout simple en fait.
Oui je parlais de cahier physique.
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
13 sept. 2020 à 19:37
Bonsoir,

En fait, il s'agit des balise de code, mode d'emploi ici:

https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
0