Skip to content

Ajout d'un projet intermédiaire : "Usine de voiture" #4

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
print('\033[92m' + 'Bonjour !\n' + '\033[0m' + 'Me voila de retour sur une couleur par défaut !')
36 changes: 36 additions & 0 deletions projet intermédiaire/2. Usine de voiture/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# Usine de voiture

## Introduction
Bienvenue dans ce projet où vous allez fabriquer une "usine de voiture" en s'aidant d'une class. Il s'agit d'un niveau intermédiaire qui peut être réalisé par des débutants si la notion de class est acquise.

## Instructions
Suivez les étapes ci-dessous pour réaliser ce projet :

1. **Class usine** : créer une class `Usine` prenant en paramètre les informations suivantes :
- Le modèle (en `str`)
- La couleur (en `str` et par défaut vaut `noir`)
- La puissance (en `int` qui représentera les chevaux)
- Le poid (en `float` en kg)

2. **Conversion du format `str` de la couleur** : à parti du texte fournit par l'utilisateur à l'initialisation de la class, convertir le texte en un nombre de 90 à 96 à partir des séquences d'échappement ANSI.

3. **Afficher individuellement les caractéristiques** : à partir de propriétés, créer 4 propriétés servant à afficher dans la console la propriété demandé. (pour la couleur, il faut un affichage en couleur dans la console)

4. **Afficher les caractéristiques** : à partir d'une fonction, afficher l'intégralité des caractéristiques de la voiture.

5. **Essayer le code** : Faites 3 configurations de voiture ayant des caractéristiques différentes et affichez les comme dans l'exemple ci-dessous

## Exemple
<img src="Exemple/Capture d'écran 2024-08-13 151016.png" alt="Exemple rendu">

## Indices
Pour afficher un text en couleur dans la console, vous pouvez utiliser le format suivant :
`\033[...m`

Vous devez remplacer les `...` par un nombre pour afficher une couleur. (Vous pouvez vous amuser à remplacer ce nombre par un nombre random pour voir le résultat)
Si vous renseignez `0`, les modifications reprendrons leur état par défaut.

Ex :
```python Exemple\Couleur.py```

Ce fichier "README.md" sert de guide pour les utilisateurs qui souhaitent participer à votre projet en créant ce programme d'usine de voiture. Vous pouvez le personnaliser davantage en fonction de vos besoins.
106 changes: 106 additions & 0 deletions projet intermédiaire/2. Usine de voiture/solution/programme.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
from typing import Final
'''
Solution au projet Usine de voiture.

Ce que vous allez voir est une des solutions possibles pour résoudre cet exercice.
'''


#Création de notre dictionnaire des couleurs (plusieurs possibilité pour régler ce problème)
couleurs = {
'noir': 90,
'rouge': 91,
'vert': 92,
'jaune': 93,
'bleue': 94,
'rose': 95,
'cyan': 96,
}


#Création de la class Usine
class Usine: #les parenthèses ne sont pas obligatoire quand la class n'est pas définie comme une class enfant.

def __init__(self, modele: str, puissance: int, poid: float, couleur: str = 'noir'): #fonction essentielle d'une class pour initialiser des variables qui hériteront des paramètres renseignés
"""
*Mais pourquoi on ne choisirait pas un nom de variable plus facile à écrire pour aller plus vite ?*

C'est une très bonne question que nous avons la. Choisir avec partimonie le nom de ses fonctions permet de
retrouver plus facilement à quoi les servent, mais rien ne vous empêche de les nommées comme vous le voulez.
Par ailleurs, si votre code est destiné à être réutilisé par un autre developer ou par vous dans plusieurs années,
vous serez bien content d'avoir mis des noms explicites pour vous retrouver plus facilement x)
"""
self.__modele : Final[str] = modele
self.__puissance: Final[int] = puissance
self.__poid: Final[float] = poid
self.__couleur: Final[int] = self.convertir_couleur(couleur) #on appelle une fonction pour définir la variable

def convertir_couleur(self, couleur: str) -> int:

couleur = couleur.lower() #La fonction lower() permet de transformer tous les caractères majuscules en minuscules pour ne pas avoir de problème sur la casse

if couleur in couleurs.keys():
return couleurs[couleur]

raise ValueError(f"La couleur {couleur} n'est pas disponible !") #renvoi une erreur si la couleur n'est pas disponnible


def montrer_ressources(self) -> None:

print(
f"Vos caractéristiques de voiture :\n"
f"Modèle : {self.__modele}\n"
f"Puissance en chevaux : {self.__puissance}\n"
f"Poid : {self.__poid} kg\n"
f"Couleur : " +
f"\033[{self.__couleur}m" +
f"{self.__couleur}" +
"\033[0m"
)

# On définit les propriétés
@property
def poid_(self) -> float:
return self.__poid

@property
def puissance_(self) -> int:
return self.__puissance

@property
def modele_(self) -> str:
return self.__modele

@property
def couleur_(self) -> int:
return self.__couleur


'''
Utilisation de cette class :

Imaginons que nous voulons 3 voitures différentes voulant sortir de l'usine
'''


voiture_1 = Usine(modele='Renaud', puissance=120, poid=1200) #première voiture définit sans couleur
voiture_2 = Usine(modele='Peugeot', puissance=90, poid=1050, couleur='vert')
voiture_3 = Usine(modele='Tesla', puissance=230, poid=1800, couleur='Cyan')

'''
Afficher les informations des 3 voitures :
'''

for voiture in (voiture_1, voiture_2, voiture_3): #on boucle sur les 3 voitures pour récupérer l'objet "Usine"

print(f"Informations pour la voiture {voiture.modele_} :\n") #On utiliser la propriété "modele_" pour afficher uniquement le nom du modèle actuel de voiture
voiture.montrer_ressources() #On montre toutes les ressources à partir d'un appel de fonction
print("--------------------------------------------")