Hiérarchisation des conditions dans python

Fermé
BeAPickle - 12 mai 2022 à 15:20
yg_be Messages postés 23417 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 janvier 2025 - 12 mai 2022 à 16:14
Bonjour,
Pour mon TIPE je souhaite créer un algorithme qui permet de faire s'allumer et s'éteindre des feux munis de capteurs de manière optimisée.
Pour voir si c'est faisable je commence avec deux ensembles de feux (feu piéton 1, feu voiture 1) et (feu piéton 2, feu voiture 2), appelés respectivement p1, v1 ,p2 et v2.
Pour coder j'ai réuni dans un tableau l'ensemble des possibilités. (les capteurs des feux se notent cp1, cv1, cp2 et cv2)
J'ai choisi de coder de la façon suivante:
if cp1:
p1=True
elif cp2:
p2=True
elif cp1 and cp2:
p1=True
p2=True
et ainsi de suite. Je ne pense pas que ce soit la manière la plus adaptée de coder mais je n'ai pas d'autre idée (si vous en avez n'hésitez pas).
En fonctionnant comme ça j'ai un problème dès le début qui est qu'évidemment, si p1 est allumé, v1 ne peut pas l'être, pareil pour p2 et v2 ainsi que v1 et v2. J'aimerais donc faire comprendre à python que
if p1:
v1=False
if p2:
v2=False
if v1:
v2=False
(et l'inverse à chaque fois aussi) est prioritaire sur le reste des conditions écrites plus tôt (celles en fonction des capteurs).
Le problème c'est que je ne sais pas comment faire pour que ces conditions s'appliquent à l'ensemble du code, c'est à dire pour que quand par exemple on a cp1=True, le programme mette p1=True et mette automatiquement v1=False quoi qu'il arrive.
En gros j'aimerais que mes feux s'allument quand leur capteur détecte quelque chose mais seulement si c'est possible, c'est à dire que l'algorithme ne devrait pas pouvoir tuer les piétons ni créer des carambolages.
J'espère que j'ai été claire, merci d'avance pour vos idées :)

1 réponse

yg_be Messages postés 23417 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 janvier 2025 Ambassadeur 1 557
12 mai 2022 à 16:14
bonjour,
Où est ton tableau avec l'ensemble des possibilités?

Il est nécessaire de réfléchir à la réalité avant de commencer à programmer et à créer des variables.

La réalité, c'est un carrefour, des flux de circulation, des capteurs, et des règles de changement des feux de circulation.

En général, les réglages de feux se font par phases, par exemple:
phase rouge: tous feux rouge
phase flux 1: p1 et v1 vert, p2 et v2 rouge
phase fin de flux 1: p1 rouge, v1 orange, p2 et v2 rouge
...

A chaque phase, tu associes une couleur pour chaque feu, ou, plus précisément, un état allumé/éteint pour chaque lampe.

Ensuite, tu as des règles de changement de phase:
La phase flux 1 dure au moins X secondes.
Après la phase flux 1, on passe à la phase fin de flux 1, qui dure exactement X secondes
Après la phase fin de flux1, on passe à la phase rouge, qui dure au moins X secondes
...

Tu dois décider que déclenchent les capteurs, et ce qui se passe si aucun capteur ne déclenche.
La phase flux 1 continue aussi longtemps que les capteurs cv2 ou cp2 ne déclenchent pas.
On passe et on reste en phase rouge tant qu'aucun capteur ne déclenche, et on passe dans une phase de flux quand un capteur déclenche.
Cela peut changer en fonction des moments de la journée, de la période de l'année.
...

Quand tu auras décidé (et écrit) tout cela, tu pourras commencer à réfléchir à ton algorithme, à ton programme et à tes variables.

Tu peux commencer par une réalité simplifiée, et faire le programme correspondant.
Cependant, tu risques de devoir recommencer tout ton programme quand la réalité devient plus complexe.
0