- المشاركات
- 81
- مستوى التفاعل
- 7
- النقاط
- 8
reformulé le code en utilisant import tkinter as tk
# Liste des modèles de voitures avec leurs informations de base, y compris Cx, Cz, et µ
voitures = [
{"num": 1, "modele": "Dodge Charger R/T, 1970", "masse": 1760, "acceleration": 5.1, "longueur": 5.28, "largeur": 1.95,
"hauteur": 1.35, "cx": 0.38, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 2, "modele": "Toyota Supra Mark IV, 1994", "masse": 1615, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.27, "cx": 0.29, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 3, "modele": "Chevrolet Yenko Camaro 1969", "masse": 1498, "acceleration": 5.3, "longueur": 4.72, "largeur": 1.88,
"hauteur": 1.30, "cx": 0.35, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 4, "modele": "Mazda RX-7 FD", "masse": 1385, "acceleration": 5.2, "longueur": 4.3, "largeur": 1.75, "hauteur": 1.23,
"cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 5, "modele": "Nissan Skyline GTR-R34, 1999", "masse": 1540, "acceleration": 5.8, "longueur": 4.6, "largeur": 1.79,
"hauteur": 1.36, "cx": 0.34, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 6, "modele": "Mitsubishi Lancer Evolution VII", "masse": 1600, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.48, "cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False}
]
# Fonction pour remplir les champs en fonction du numéro de voiture saisi
def remplir_champs():
voiture_num = voiture_num_var.get() # Récupère le numéro de voiture saisi
# Recherche de la voiture correspondant au numéro saisi
for voiture in voitures:
if voiture["num"] == voiture_num: # Vérifie si le numéro de voiture correspond
# Remplir les champs avec les informations de base
modele_var.set(voiture["modele"])
masse_var.set(voiture["masse"])
acceleration_var.set(voiture["acceleration"])
longueur_var.set(voiture["longueur"])
largeur_var.set(voiture["largeur"])
hauteur_var.set(voiture["hauteur"])
cx_var.set(voiture["cx"])
cz_var.set(voiture["cz"])
mu_var.set(voiture["mu"])
# Afficher le boost selon l'état actuel
boost_var.set(voiture["boost"])
label_erreur.config(text="") # Efface le message d'erreur
return
# Si aucune voiture n'est trouvée, vide tous les champs et affiche une erreur
reset_fields()
label_erreur.config(text="Numéro de voiture non trouvé", fg="red")
# Fonction pour réinitialiser les champs
def reset_fields():
modele_var.set("")
masse_var.set("")
acceleration_var.set("")
longueur_var.set("")
largeur_var.set("")
hauteur_var.set("")
cx_var.set("")
cz_var.set("")
mu_var.set("")
# Fonction pour activer/désactiver le boost
def activer_boost():
voiture_num = voiture_num_var.get()
for voiture in voitures:
if voiture["num"] == voiture_num:
# Mettre à jour les accessoires selon les cases cochées
voiture["boost"] = boost_var.get() # Activer ou désactiver le boost
# Appliquer l'effet du boost sur l'accélération (30% de boost si activé)
if voiture["boost"]:
acceleration_var.set(voiture["acceleration"] * 1.3)
else:
acceleration_var.set(voiture["acceleration"])
# Crée la fenêtre principale
root = tk.Tk()
root.title("Gestion des Voitures")
# Déclaration des variables Tkinter
modele_var = tk.StringVar()
masse_var = tk.IntVar()
acceleration_var = tk.DoubleVar()
longueur_var = tk.DoubleVar()
largeur_var = tk.DoubleVar()
hauteur_var = tk.DoubleVar()
cx_var = tk.DoubleVar()
cz_var = tk.DoubleVar()
mu_var = tk.DoubleVar()
voiture_num_var = tk.IntVar() # Variable pour le numéro de la voiture
boost_var = tk.BooleanVar() # Variable pour activer/désactiver le boost
# Interface pour remplir les champs de voiture
label_voiture_num = tk.Label(root, text="Numéro de voiture (ex: 1, 2, 3, etc.) :")
label_voiture_num.pack()
# Champ pour saisir le numéro de la voiture
entry_voiture_num = tk.Entry(root, textvariable=voiture_num_var)
entry_voiture_num.pack()
# Bouton pour remplir les informations en fonction du numéro de voiture saisi
button_remplir = tk.Button(root, text="Remplir les informations", command=remplir_champs)
button_remplir.pack()
# Champs pour afficher les informations de la voiture
label_modele = tk.Label(root, text="Modèle :")
label_modele.pack()
entry_modele = tk.Entry(root, textvariable=modele_var)
entry_modele.pack()
label_masse = tk.Label(root, text="Masse (kg) :")
label_masse.pack()
entry_masse = tk.Entry(root, textvariable=masse_var)
entry_masse.pack()
label_acceleration = tk.Label(root, text="Accélération moyenne (m/s²) :")
label_acceleration.pack()
entry_acceleration = tk.Entry(root, textvariable=acceleration_var)
entry_acceleration.pack()
label_longueur = tk.Label(root, text="Longueur (m) :")
label_longueur.pack()
entry_longueur = tk.Entry(root, textvariable=longueur_var)
entry_longueur.pack()
label_largeur = tk.Label(root, text="Largeur (m) :")
label_largeur.pack()
entry_largeur = tk.Entry(root, textvariable=largeur_var)
entry_largeur.pack()
label_hauteur = tk.Label(root, text="Hauteur (m) :")
label_hauteur.pack()
entry_hauteur = tk.Entry(root, textvariable=hauteur_var)
entry_hauteur.pack()
label_cx = tk.Label(root, text="Coefficient de trainée (Cx) :")
label_cx.pack()
entry_cx = tk.Entry(root, textvariable=cx_var)
entry_cx.pack()
label_cz = tk.Label(root, text="Coefficient de portance (Cz) :")
label_cz.pack()
entry_cz = tk.Entry(root, textvariable=cz_var)
entry_cz.pack()
label_mu = tk.Label(root, text="Coefficient de friction (µ) :")
label_mu.pack()
entry_mu = tk.Entry(root, textvariable=mu_var)
entry_mu.pack()
# Case à cocher pour activer/désactiver le boost
label_boost = tk.Checkbutton(root, text="Activer le Boost NOS", variable=boost_var)
label_boost.pack()
# Bouton pour appliquer l'effet du boost
button_boost = tk.Button(root, text="Appliquer le Boost", command=activer_boost)
button_boost.pack()
# Label pour afficher une erreur si le numéro de voiture n'est pas trouvé
label_erreur = tk.Label(root, text="", fg="red")
label_erreur.pack()
# Démarre la boucle principale
root.mainloop() ca pour la déclarationdes paramètre
قال ChatGPT:
Voici une reformulation de ton code pour améliorer la structure et la lisibilité tout en gardant la logique intacte. J'ai ajouté quelques améliorations mineures pour améliorer la gestion des paramètres et faciliter l'extension future du code.
python
نسخ الكود
import tkinter as tk
# Liste des modèles de voitures avec leurs informations de base, y compris Cx, Cz, et µ
voitures = [
{"num": 1, "modele": "Dodge Charger R/T, 1970", "masse": 1760, "acceleration": 5.1, "longueur": 5.28, "largeur": 1.95,
"hauteur": 1.35, "cx": 0.38, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 2, "modele": "Toyota Supra Mark IV, 1994", "masse": 1615, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.27, "cx": 0.29, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 3, "modele": "Chevrolet Yenko Camaro 1969", "masse": 1498, "acceleration": 5.3, "longueur": 4.72, "largeur": 1.88,
"hauteur": 1.30, "cx": 0.35, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 4, "modele": "Mazda RX-7 FD", "masse": 1385, "acceleration": 5.2, "longueur": 4.3, "largeur": 1.75, "hauteur": 1.23,
"cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 5, "modele": "Nissan Skyline GTR-R34, 1999", "masse": 1540, "acceleration": 5.8, "longueur": 4.6, "largeur": 1.79,
"hauteur": 1.36, "cx": 0.34, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 6, "modele": "Mitsubishi Lancer Evolution VII", "masse": 1600, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.48, "cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False}
]
# Fonction pour remplir les champs en fonction du numéro de voiture saisi
def remplir_champs():
voiture_num = voiture_num_var.get() # Récupère le numéro de voiture saisi
# Recherche de la voiture correspondant au numéro saisi
voiture_trouvee = next((voiture for voiture in voitures if voiture["num"] == voiture_num), None)
if voiture_trouvee:
# Remplir les champs avec les informations de base
modele_var.set(voiture_trouvee["modele"])
masse_var.set(voiture_trouvee["masse"])
acceleration_var.set(voiture_trouvee["acceleration"])
longueur_var.set(voiture_trouvee["longueur"])
largeur_var.set(voiture_trouvee["largeur"])
hauteur_var.set(voiture_trouvee["hauteur"])
cx_var.set(voiture_trouvee["cx"])
cz_var.set(voiture_trouvee["cz"])
mu_var.set(voiture_trouvee["mu"])
boost_var.set(voiture_trouvee["boost"]) # Afficher le boost selon l'état actuel
label_erreur.config(text="") # Efface le message d'erreur
else:
reset_fields()
label_erreur.config(text="Numéro de voiture non trouvé", fg="red")
# Fonction pour réinitialiser les champs
def reset_fields():
modele_var.set("")
masse_var.set("")
acceleration_var.set("")
longueur_var.set("")
largeur_var.set("")
hauteur_var.set("")
cx_var.set("")
cz_var.set("")
mu_var.set("")
boost_var.set(False)
# Fonction pour activer/désactiver le boost
def activer_boost():
voiture_num = voiture_num_var.get()
voiture_trouvee = next((voiture for voiture in voitures if voiture["num"] == voiture_num), None)
if voiture_trouvee:
# Mettre à jour les accessoires selon les cases cochées
voiture_trouvee["boost"] = boost_var.get() # Activer ou désactiver le boost
# Appliquer l'effet du boost sur l'accélération (30% de boost si activé)
if voiture_trouvee["boost"]:
acceleration_var.set(voiture_trouvee["acceleration"] * 1.3)
else:
acceleration_var.set(voiture_trouvee["acceleration"])
# Crée la fenêtre principale
root = tk.Tk()
root.title("Gestion des Voitures")
# Déclaration des variables Tkinter
modele_var = tk.StringVar()
masse_var = tk.IntVar()
acceleration_var = tk.DoubleVar()
longueur_var = tk.DoubleVar()
largeur_var = tk.DoubleVar()
hauteur_var = tk.DoubleVar()
cx_var = tk.DoubleVar()
cz_var = tk.DoubleVar()
mu_var = tk.DoubleVar()
voiture_num_var = tk.IntVar() # Variable pour le numéro de la voiture
boost_var = tk.BooleanVar() # Variable pour activer/désactiver le boost
# Interface pour remplir les champs de voiture
label_voiture_num = tk.Label(root, text="Numéro de voiture (ex: 1, 2, 3, etc.) :")
label_voiture_num.pack()
# Champ pour saisir le numéro de la voiture
entry_voiture_num = tk.Entry(root, textvariable=voiture_num_var)
entry_voiture_num.pack()
# Bouton pour remplir les informations en fonction du numéro de voiture saisi
button_remplir = tk.Button(root, text="Remplir les informations", command=remplir_champs)
button_remplir.pack()
# Champs pour afficher les informations de la voiture
fields = [
("Modèle", modele_var),
("Masse (kg)", masse_var),
("Accélération moyenne (m/s²)", acceleration_var),
("Longueur (m)", longueur_var),
("Largeur (m)", largeur_var),
("Hauteur (m)", hauteur_var),
("Coefficient de trainée (Cx)", cx_var),
("Coefficient de portance (Cz)", cz_var),
("Coefficient de friction (µ)", mu_var)
]
for label_text, var in fields:
label = tk.Label(root, text=label_text)
label.pack()
entry = tk.Entry(root, textvariable=var)
entry.pack()
# Case à cocher pour activer/désactiver le boost
label_boost = tk.Checkbutton(root, text="Activer le Boost NOS", variable=boost_var)
label_boost.pack()
# Bouton pour appliquer l'effet du boost
button_boost = tk.Button(root, text="Appliquer le Boost", command=activer_boost)
button_boost.pack()
# Label pour afficher une erreur si le numéro de voiture n'est pas trouvé
label_erreur = tk.Label(root, text="", fg="red")
label_erreur.pack()
# Démarre la boucle principale
root.mainloop()
Changements principaux :
Simplification de la recherche de voiture :
Utilisation de next() pour obtenir rapidement la voiture correspondante dans la liste (si elle existe).
Réutilisation de la structure pour les champs :
J'ai utilisé une liste de tuples fields pour générer les labels et entrées, ce qui rend le code plus propre et facile à modifier si de nouveaux champs sont ajoutés.
Gestion du boost :
Le code a été simplifié pour modifier la valeur de l'accélération uniquement lorsque le boost est activé ou désactivé.
Améliorations possibles :
Ajouter des fonctionnalités comme la modification de la voiture (en permettant de changer les informations existantes).
Ajouter des fonctionnalités de validation pour les champs de saisie (par exemple, s'assurer que les valeurs numériques sont saisies correctement).
أنت قلت:
mais pas celui la j voulais une reformulation du fichier
قال ChatGPT:
D'accord ! Je comprends maintenant que tu veux que je reformule le code tout en gardant la même structure et fonctionnalité de l'application Tkinter, mais d'une manière plus claire et optimisée. Voici une reformulation en appliquant quelques bonnes pratiques et une meilleure organisation du code tout en conservant la logique de l'application :
Reformulation du Code :
python
نسخ الكود
import tkinter as tk
# Liste des modèles de voitures avec leurs informations de base, y compris Cx, Cz, et µ
voitures = [
{"num": 1, "modele": "Dodge Charger R/T, 1970", "masse": 1760, "acceleration": 5.1, "longueur": 5.28, "largeur": 1.95,
"hauteur": 1.35, "cx": 0.38, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 2, "modele": "Toyota Supra Mark IV, 1994", "masse": 1615, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.27, "cx": 0.29, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 3, "modele": "Chevrolet Yenko Camaro 1969", "masse": 1498, "acceleration": 5.3, "longueur": 4.72, "largeur": 1.88,
"hauteur": 1.30, "cx": 0.35, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 4, "modele": "Mazda RX-7 FD", "masse": 1385, "acceleration": 5.2, "longueur": 4.3, "largeur": 1.75, "hauteur": 1.23,
"cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 5, "modele": "Nissan Skyline GTR-R34, 1999", "masse": 1540, "acceleration": 5.8, "longueur": 4.6, "largeur": 1.79,
"hauteur": 1.36, "cx": 0.34, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 6, "modele": "Mitsubishi Lancer Evolution VII", "masse": 1600, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.48, "cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False}
]
class Application(tk.Tk):
def __init__(self):
super().__init__()
self.title("Gestion des Voitures")
# Initialisation des variables tkinter
self.init_variables()
# Interface graphique
self.create_widgets()
def init_variables(self):
"""Initialiser toutes les variables nécessaires pour Tkinter."""
self.voiture_num_var = tk.IntVar()
self.modele_var = tk.StringVar()
self.masse_var = tk.IntVar()
self.acceleration_var = tk.DoubleVar()
self.longueur_var = tk.DoubleVar()
self.largeur_var = tk.DoubleVar()
self.hauteur_var = tk.DoubleVar()
self.cx_var = tk.DoubleVar()
self.cz_var = tk.DoubleVar()
self.mu_var = tk.DoubleVar()
self.boost_var = tk.BooleanVar()
def create_widgets(self):
"""Créer tous les widgets pour l'interface utilisateur."""
# Saisie du numéro de voiture
label_voiture_num = tk.Label(self, text="Numéro de voiture (ex: 1, 2, 3, etc.) :")
label_voiture_num.pack()
self.entry_voiture_num = tk.Entry(self, textvariable=self.voiture_num_var)
self.entry_voiture_num.pack()
button_remplir = tk.Button(self, text="Remplir les informations", command=self.remplir_champs)
button_remplir.pack()
# Créer les champs pour afficher les informations de la voiture
self.create_info_fields()
# Case à cocher pour activer/désactiver le boost
label_boost = tk.Checkbutton(self, text="Activer le Boost NOS", variable=self.boost_var)
label_boost.pack()
# Bouton pour appliquer le boost
button_boost = tk.Button(self, text="Appliquer le Boost", command=self.activer_boost)
button_boost.pack()
# Label pour afficher une erreur si le numéro de voiture n'est pas trouvé
self.label_erreur = tk.Label(self, text="", fg="red")
self.label_erreur.pack()
def create_info_fields(self):
"""Créer les champs d'affichage pour les informations de voiture."""
fields = [
("Modèle", self.modele_var),
("Masse (kg)", self.masse_var),
("Accélération moyenne (m/s²)", self.acceleration_var),
("Longueur (m)", self.longueur_var),
("Largeur (m)", self.largeur_var),
("Hauteur (m)", self.hauteur_var),
("Coefficient de trainée (Cx)", self.cx_var),
("Coefficient de portance (Cz)", self.cz_var),
("Coefficient de friction (µ)", self.mu_var)
]
for label_text, var in fields:
label = tk.Label(self, text=label_text)
label.pack()
entry = tk.Entry(self, textvariable=var)
entry.pack()
def remplir_champs(self):
"""Remplir les champs d'information selon le numéro de voiture."""
voiture_num = self.voiture_num_var.get()
# Recherche de la voiture correspondant au numéro saisi
voiture_trouvee = next((voiture for voiture in voitures if voiture["num"] == voiture_num), None)
if voiture_trouvee:
# Remplir les champs avec les informations de la voiture
self.modele_var.set(voiture_trouvee["modele"])
self.masse_var.set(voiture_trouvee["masse"])
self.acceleration_var.set(voiture_trouvee["acceleration"])
self.longueur_var.set(voiture_trouvee["longueur"])
self.largeur_var.set(voiture_trouvee["largeur"])
self.hauteur_var.set(voiture_trouvee["hauteur"])
self.cx_var.set(voiture_trouvee["cx"])
self.cz_var.set(voiture_trouvee["cz"])
self.mu_var.set(voiture_trouvee["mu"])
self.boost_var.set(voiture_trouvee["boost"])
self.label_erreur.config(text="") # Efface le message d'erreur
else:
# Si la voiture n'est pas trouvée, réinitialiser les champs
self.reset_fields()
self.label_erreur.config(text="Numéro de voiture non trouvé", fg="red")
def reset_fields(self):
"""Réinitialiser tous les champs d'informations."""
self.modele_var.set("")
self.masse_var.set("")
self.acceleration_var.set("")
self.longueur_var.set("")
self.largeur_var.set("")
self.hauteur_var.set("")
self.cx_var.set("")
self.cz_var.set("")
self.mu_var.set("")
self.boost_var.set(False)
def activer_boost(self):
"""Activer ou désactiver le boost et ajuster l'accélération."""
voiture_num = self.voiture_num_var.get()
voiture_trouvee = next((voiture for voiture in voitures if voiture["num"] == voiture_num), None)
if voiture_trouvee:
# Activer ou désactiver le boost
voiture_trouvee["boost"] = self.boost_var.get()
# Appliquer l'effet du boost sur l'accélération (30% si activé)
if voiture_trouvee["boost"]:
self.acceleration_var.set(voiture_trouvee["acceleration"] * 1.3)
else:
self.acceleration_var.set(voiture_trouvee["acceleration"])
# Créer et démarrer l'application
if __name__ == "__main__":
app = Application()
app.mainloop()
Modifications et Améliorations :
Classe Application :
# Liste des modèles de voitures avec leurs informations de base, y compris Cx, Cz, et µ
voitures = [
{"num": 1, "modele": "Dodge Charger R/T, 1970", "masse": 1760, "acceleration": 5.1, "longueur": 5.28, "largeur": 1.95,
"hauteur": 1.35, "cx": 0.38, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 2, "modele": "Toyota Supra Mark IV, 1994", "masse": 1615, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.27, "cx": 0.29, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 3, "modele": "Chevrolet Yenko Camaro 1969", "masse": 1498, "acceleration": 5.3, "longueur": 4.72, "largeur": 1.88,
"hauteur": 1.30, "cx": 0.35, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 4, "modele": "Mazda RX-7 FD", "masse": 1385, "acceleration": 5.2, "longueur": 4.3, "largeur": 1.75, "hauteur": 1.23,
"cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 5, "modele": "Nissan Skyline GTR-R34, 1999", "masse": 1540, "acceleration": 5.8, "longueur": 4.6, "largeur": 1.79,
"hauteur": 1.36, "cx": 0.34, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 6, "modele": "Mitsubishi Lancer Evolution VII", "masse": 1600, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.48, "cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False}
]
# Fonction pour remplir les champs en fonction du numéro de voiture saisi
def remplir_champs():
voiture_num = voiture_num_var.get() # Récupère le numéro de voiture saisi
# Recherche de la voiture correspondant au numéro saisi
for voiture in voitures:
if voiture["num"] == voiture_num: # Vérifie si le numéro de voiture correspond
# Remplir les champs avec les informations de base
modele_var.set(voiture["modele"])
masse_var.set(voiture["masse"])
acceleration_var.set(voiture["acceleration"])
longueur_var.set(voiture["longueur"])
largeur_var.set(voiture["largeur"])
hauteur_var.set(voiture["hauteur"])
cx_var.set(voiture["cx"])
cz_var.set(voiture["cz"])
mu_var.set(voiture["mu"])
# Afficher le boost selon l'état actuel
boost_var.set(voiture["boost"])
label_erreur.config(text="") # Efface le message d'erreur
return
# Si aucune voiture n'est trouvée, vide tous les champs et affiche une erreur
reset_fields()
label_erreur.config(text="Numéro de voiture non trouvé", fg="red")
# Fonction pour réinitialiser les champs
def reset_fields():
modele_var.set("")
masse_var.set("")
acceleration_var.set("")
longueur_var.set("")
largeur_var.set("")
hauteur_var.set("")
cx_var.set("")
cz_var.set("")
mu_var.set("")
# Fonction pour activer/désactiver le boost
def activer_boost():
voiture_num = voiture_num_var.get()
for voiture in voitures:
if voiture["num"] == voiture_num:
# Mettre à jour les accessoires selon les cases cochées
voiture["boost"] = boost_var.get() # Activer ou désactiver le boost
# Appliquer l'effet du boost sur l'accélération (30% de boost si activé)
if voiture["boost"]:
acceleration_var.set(voiture["acceleration"] * 1.3)
else:
acceleration_var.set(voiture["acceleration"])
# Crée la fenêtre principale
root = tk.Tk()
root.title("Gestion des Voitures")
# Déclaration des variables Tkinter
modele_var = tk.StringVar()
masse_var = tk.IntVar()
acceleration_var = tk.DoubleVar()
longueur_var = tk.DoubleVar()
largeur_var = tk.DoubleVar()
hauteur_var = tk.DoubleVar()
cx_var = tk.DoubleVar()
cz_var = tk.DoubleVar()
mu_var = tk.DoubleVar()
voiture_num_var = tk.IntVar() # Variable pour le numéro de la voiture
boost_var = tk.BooleanVar() # Variable pour activer/désactiver le boost
# Interface pour remplir les champs de voiture
label_voiture_num = tk.Label(root, text="Numéro de voiture (ex: 1, 2, 3, etc.) :")
label_voiture_num.pack()
# Champ pour saisir le numéro de la voiture
entry_voiture_num = tk.Entry(root, textvariable=voiture_num_var)
entry_voiture_num.pack()
# Bouton pour remplir les informations en fonction du numéro de voiture saisi
button_remplir = tk.Button(root, text="Remplir les informations", command=remplir_champs)
button_remplir.pack()
# Champs pour afficher les informations de la voiture
label_modele = tk.Label(root, text="Modèle :")
label_modele.pack()
entry_modele = tk.Entry(root, textvariable=modele_var)
entry_modele.pack()
label_masse = tk.Label(root, text="Masse (kg) :")
label_masse.pack()
entry_masse = tk.Entry(root, textvariable=masse_var)
entry_masse.pack()
label_acceleration = tk.Label(root, text="Accélération moyenne (m/s²) :")
label_acceleration.pack()
entry_acceleration = tk.Entry(root, textvariable=acceleration_var)
entry_acceleration.pack()
label_longueur = tk.Label(root, text="Longueur (m) :")
label_longueur.pack()
entry_longueur = tk.Entry(root, textvariable=longueur_var)
entry_longueur.pack()
label_largeur = tk.Label(root, text="Largeur (m) :")
label_largeur.pack()
entry_largeur = tk.Entry(root, textvariable=largeur_var)
entry_largeur.pack()
label_hauteur = tk.Label(root, text="Hauteur (m) :")
label_hauteur.pack()
entry_hauteur = tk.Entry(root, textvariable=hauteur_var)
entry_hauteur.pack()
label_cx = tk.Label(root, text="Coefficient de trainée (Cx) :")
label_cx.pack()
entry_cx = tk.Entry(root, textvariable=cx_var)
entry_cx.pack()
label_cz = tk.Label(root, text="Coefficient de portance (Cz) :")
label_cz.pack()
entry_cz = tk.Entry(root, textvariable=cz_var)
entry_cz.pack()
label_mu = tk.Label(root, text="Coefficient de friction (µ) :")
label_mu.pack()
entry_mu = tk.Entry(root, textvariable=mu_var)
entry_mu.pack()
# Case à cocher pour activer/désactiver le boost
label_boost = tk.Checkbutton(root, text="Activer le Boost NOS", variable=boost_var)
label_boost.pack()
# Bouton pour appliquer l'effet du boost
button_boost = tk.Button(root, text="Appliquer le Boost", command=activer_boost)
button_boost.pack()
# Label pour afficher une erreur si le numéro de voiture n'est pas trouvé
label_erreur = tk.Label(root, text="", fg="red")
label_erreur.pack()
# Démarre la boucle principale
root.mainloop() ca pour la déclarationdes paramètre
قال ChatGPT:
Voici une reformulation de ton code pour améliorer la structure et la lisibilité tout en gardant la logique intacte. J'ai ajouté quelques améliorations mineures pour améliorer la gestion des paramètres et faciliter l'extension future du code.
python
نسخ الكود
import tkinter as tk
# Liste des modèles de voitures avec leurs informations de base, y compris Cx, Cz, et µ
voitures = [
{"num": 1, "modele": "Dodge Charger R/T, 1970", "masse": 1760, "acceleration": 5.1, "longueur": 5.28, "largeur": 1.95,
"hauteur": 1.35, "cx": 0.38, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 2, "modele": "Toyota Supra Mark IV, 1994", "masse": 1615, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.27, "cx": 0.29, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 3, "modele": "Chevrolet Yenko Camaro 1969", "masse": 1498, "acceleration": 5.3, "longueur": 4.72, "largeur": 1.88,
"hauteur": 1.30, "cx": 0.35, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 4, "modele": "Mazda RX-7 FD", "masse": 1385, "acceleration": 5.2, "longueur": 4.3, "largeur": 1.75, "hauteur": 1.23,
"cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 5, "modele": "Nissan Skyline GTR-R34, 1999", "masse": 1540, "acceleration": 5.8, "longueur": 4.6, "largeur": 1.79,
"hauteur": 1.36, "cx": 0.34, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 6, "modele": "Mitsubishi Lancer Evolution VII", "masse": 1600, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.48, "cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False}
]
# Fonction pour remplir les champs en fonction du numéro de voiture saisi
def remplir_champs():
voiture_num = voiture_num_var.get() # Récupère le numéro de voiture saisi
# Recherche de la voiture correspondant au numéro saisi
voiture_trouvee = next((voiture for voiture in voitures if voiture["num"] == voiture_num), None)
if voiture_trouvee:
# Remplir les champs avec les informations de base
modele_var.set(voiture_trouvee["modele"])
masse_var.set(voiture_trouvee["masse"])
acceleration_var.set(voiture_trouvee["acceleration"])
longueur_var.set(voiture_trouvee["longueur"])
largeur_var.set(voiture_trouvee["largeur"])
hauteur_var.set(voiture_trouvee["hauteur"])
cx_var.set(voiture_trouvee["cx"])
cz_var.set(voiture_trouvee["cz"])
mu_var.set(voiture_trouvee["mu"])
boost_var.set(voiture_trouvee["boost"]) # Afficher le boost selon l'état actuel
label_erreur.config(text="") # Efface le message d'erreur
else:
reset_fields()
label_erreur.config(text="Numéro de voiture non trouvé", fg="red")
# Fonction pour réinitialiser les champs
def reset_fields():
modele_var.set("")
masse_var.set("")
acceleration_var.set("")
longueur_var.set("")
largeur_var.set("")
hauteur_var.set("")
cx_var.set("")
cz_var.set("")
mu_var.set("")
boost_var.set(False)
# Fonction pour activer/désactiver le boost
def activer_boost():
voiture_num = voiture_num_var.get()
voiture_trouvee = next((voiture for voiture in voitures if voiture["num"] == voiture_num), None)
if voiture_trouvee:
# Mettre à jour les accessoires selon les cases cochées
voiture_trouvee["boost"] = boost_var.get() # Activer ou désactiver le boost
# Appliquer l'effet du boost sur l'accélération (30% de boost si activé)
if voiture_trouvee["boost"]:
acceleration_var.set(voiture_trouvee["acceleration"] * 1.3)
else:
acceleration_var.set(voiture_trouvee["acceleration"])
# Crée la fenêtre principale
root = tk.Tk()
root.title("Gestion des Voitures")
# Déclaration des variables Tkinter
modele_var = tk.StringVar()
masse_var = tk.IntVar()
acceleration_var = tk.DoubleVar()
longueur_var = tk.DoubleVar()
largeur_var = tk.DoubleVar()
hauteur_var = tk.DoubleVar()
cx_var = tk.DoubleVar()
cz_var = tk.DoubleVar()
mu_var = tk.DoubleVar()
voiture_num_var = tk.IntVar() # Variable pour le numéro de la voiture
boost_var = tk.BooleanVar() # Variable pour activer/désactiver le boost
# Interface pour remplir les champs de voiture
label_voiture_num = tk.Label(root, text="Numéro de voiture (ex: 1, 2, 3, etc.) :")
label_voiture_num.pack()
# Champ pour saisir le numéro de la voiture
entry_voiture_num = tk.Entry(root, textvariable=voiture_num_var)
entry_voiture_num.pack()
# Bouton pour remplir les informations en fonction du numéro de voiture saisi
button_remplir = tk.Button(root, text="Remplir les informations", command=remplir_champs)
button_remplir.pack()
# Champs pour afficher les informations de la voiture
fields = [
("Modèle", modele_var),
("Masse (kg)", masse_var),
("Accélération moyenne (m/s²)", acceleration_var),
("Longueur (m)", longueur_var),
("Largeur (m)", largeur_var),
("Hauteur (m)", hauteur_var),
("Coefficient de trainée (Cx)", cx_var),
("Coefficient de portance (Cz)", cz_var),
("Coefficient de friction (µ)", mu_var)
]
for label_text, var in fields:
label = tk.Label(root, text=label_text)
label.pack()
entry = tk.Entry(root, textvariable=var)
entry.pack()
# Case à cocher pour activer/désactiver le boost
label_boost = tk.Checkbutton(root, text="Activer le Boost NOS", variable=boost_var)
label_boost.pack()
# Bouton pour appliquer l'effet du boost
button_boost = tk.Button(root, text="Appliquer le Boost", command=activer_boost)
button_boost.pack()
# Label pour afficher une erreur si le numéro de voiture n'est pas trouvé
label_erreur = tk.Label(root, text="", fg="red")
label_erreur.pack()
# Démarre la boucle principale
root.mainloop()
Changements principaux :
Simplification de la recherche de voiture :
Utilisation de next() pour obtenir rapidement la voiture correspondante dans la liste (si elle existe).
Réutilisation de la structure pour les champs :
J'ai utilisé une liste de tuples fields pour générer les labels et entrées, ce qui rend le code plus propre et facile à modifier si de nouveaux champs sont ajoutés.
Gestion du boost :
Le code a été simplifié pour modifier la valeur de l'accélération uniquement lorsque le boost est activé ou désactivé.
Améliorations possibles :
Ajouter des fonctionnalités comme la modification de la voiture (en permettant de changer les informations existantes).
Ajouter des fonctionnalités de validation pour les champs de saisie (par exemple, s'assurer que les valeurs numériques sont saisies correctement).
أنت قلت:
mais pas celui la j voulais une reformulation du fichier
قال ChatGPT:
D'accord ! Je comprends maintenant que tu veux que je reformule le code tout en gardant la même structure et fonctionnalité de l'application Tkinter, mais d'une manière plus claire et optimisée. Voici une reformulation en appliquant quelques bonnes pratiques et une meilleure organisation du code tout en conservant la logique de l'application :
Reformulation du Code :
python
نسخ الكود
import tkinter as tk
# Liste des modèles de voitures avec leurs informations de base, y compris Cx, Cz, et µ
voitures = [
{"num": 1, "modele": "Dodge Charger R/T, 1970", "masse": 1760, "acceleration": 5.1, "longueur": 5.28, "largeur": 1.95,
"hauteur": 1.35, "cx": 0.38, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 2, "modele": "Toyota Supra Mark IV, 1994", "masse": 1615, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.27, "cx": 0.29, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 3, "modele": "Chevrolet Yenko Camaro 1969", "masse": 1498, "acceleration": 5.3, "longueur": 4.72, "largeur": 1.88,
"hauteur": 1.30, "cx": 0.35, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 4, "modele": "Mazda RX-7 FD", "masse": 1385, "acceleration": 5.2, "longueur": 4.3, "largeur": 1.75, "hauteur": 1.23,
"cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 5, "modele": "Nissan Skyline GTR-R34, 1999", "masse": 1540, "acceleration": 5.8, "longueur": 4.6, "largeur": 1.79,
"hauteur": 1.36, "cx": 0.34, "cz": 0.3, "mu": 0.1, "boost": False},
{"num": 6, "modele": "Mitsubishi Lancer Evolution VII", "masse": 1600, "acceleration": 5.0, "longueur": 4.51, "largeur": 1.81,
"hauteur": 1.48, "cx": 0.28, "cz": 0.3, "mu": 0.1, "boost": False}
]
class Application(tk.Tk):
def __init__(self):
super().__init__()
self.title("Gestion des Voitures")
# Initialisation des variables tkinter
self.init_variables()
# Interface graphique
self.create_widgets()
def init_variables(self):
"""Initialiser toutes les variables nécessaires pour Tkinter."""
self.voiture_num_var = tk.IntVar()
self.modele_var = tk.StringVar()
self.masse_var = tk.IntVar()
self.acceleration_var = tk.DoubleVar()
self.longueur_var = tk.DoubleVar()
self.largeur_var = tk.DoubleVar()
self.hauteur_var = tk.DoubleVar()
self.cx_var = tk.DoubleVar()
self.cz_var = tk.DoubleVar()
self.mu_var = tk.DoubleVar()
self.boost_var = tk.BooleanVar()
def create_widgets(self):
"""Créer tous les widgets pour l'interface utilisateur."""
# Saisie du numéro de voiture
label_voiture_num = tk.Label(self, text="Numéro de voiture (ex: 1, 2, 3, etc.) :")
label_voiture_num.pack()
self.entry_voiture_num = tk.Entry(self, textvariable=self.voiture_num_var)
self.entry_voiture_num.pack()
button_remplir = tk.Button(self, text="Remplir les informations", command=self.remplir_champs)
button_remplir.pack()
# Créer les champs pour afficher les informations de la voiture
self.create_info_fields()
# Case à cocher pour activer/désactiver le boost
label_boost = tk.Checkbutton(self, text="Activer le Boost NOS", variable=self.boost_var)
label_boost.pack()
# Bouton pour appliquer le boost
button_boost = tk.Button(self, text="Appliquer le Boost", command=self.activer_boost)
button_boost.pack()
# Label pour afficher une erreur si le numéro de voiture n'est pas trouvé
self.label_erreur = tk.Label(self, text="", fg="red")
self.label_erreur.pack()
def create_info_fields(self):
"""Créer les champs d'affichage pour les informations de voiture."""
fields = [
("Modèle", self.modele_var),
("Masse (kg)", self.masse_var),
("Accélération moyenne (m/s²)", self.acceleration_var),
("Longueur (m)", self.longueur_var),
("Largeur (m)", self.largeur_var),
("Hauteur (m)", self.hauteur_var),
("Coefficient de trainée (Cx)", self.cx_var),
("Coefficient de portance (Cz)", self.cz_var),
("Coefficient de friction (µ)", self.mu_var)
]
for label_text, var in fields:
label = tk.Label(self, text=label_text)
label.pack()
entry = tk.Entry(self, textvariable=var)
entry.pack()
def remplir_champs(self):
"""Remplir les champs d'information selon le numéro de voiture."""
voiture_num = self.voiture_num_var.get()
# Recherche de la voiture correspondant au numéro saisi
voiture_trouvee = next((voiture for voiture in voitures if voiture["num"] == voiture_num), None)
if voiture_trouvee:
# Remplir les champs avec les informations de la voiture
self.modele_var.set(voiture_trouvee["modele"])
self.masse_var.set(voiture_trouvee["masse"])
self.acceleration_var.set(voiture_trouvee["acceleration"])
self.longueur_var.set(voiture_trouvee["longueur"])
self.largeur_var.set(voiture_trouvee["largeur"])
self.hauteur_var.set(voiture_trouvee["hauteur"])
self.cx_var.set(voiture_trouvee["cx"])
self.cz_var.set(voiture_trouvee["cz"])
self.mu_var.set(voiture_trouvee["mu"])
self.boost_var.set(voiture_trouvee["boost"])
self.label_erreur.config(text="") # Efface le message d'erreur
else:
# Si la voiture n'est pas trouvée, réinitialiser les champs
self.reset_fields()
self.label_erreur.config(text="Numéro de voiture non trouvé", fg="red")
def reset_fields(self):
"""Réinitialiser tous les champs d'informations."""
self.modele_var.set("")
self.masse_var.set("")
self.acceleration_var.set("")
self.longueur_var.set("")
self.largeur_var.set("")
self.hauteur_var.set("")
self.cx_var.set("")
self.cz_var.set("")
self.mu_var.set("")
self.boost_var.set(False)
def activer_boost(self):
"""Activer ou désactiver le boost et ajuster l'accélération."""
voiture_num = self.voiture_num_var.get()
voiture_trouvee = next((voiture for voiture in voitures if voiture["num"] == voiture_num), None)
if voiture_trouvee:
# Activer ou désactiver le boost
voiture_trouvee["boost"] = self.boost_var.get()
# Appliquer l'effet du boost sur l'accélération (30% si activé)
if voiture_trouvee["boost"]:
self.acceleration_var.set(voiture_trouvee["acceleration"] * 1.3)
else:
self.acceleration_var.set(voiture_trouvee["acceleration"])
# Créer et démarrer l'application
if __name__ == "__main__":
app = Application()
app.mainloop()
Modifications et Améliorations :
Classe Application :