Commit cfc0504d authored by Gabrielle Huré's avatar Gabrielle Huré
Browse files

modification personnage dans lecteubd et avancement avec Mickael sur la verification

parent d68bbcfa
......@@ -2,18 +2,18 @@ import pandas as pd
class Personnage:
def __init__(self, numero, tag, liste_questions, liste_reponses):
def __init__(self, numero, tag, dict_questions_reponse):
"""
Définit un personnage.
:param numero: [string] numéro du personnage.
:param tag: [string] tag RFID associé au personnage.
:param liste_questions: [liste de string] la liste des tags des questions
:param liste_reponses: [liste de int] liste des reponses aux différentes questions. 0 si faux, 1 si vrai.
:param dict_questions_reponse: [dictionnaire]
"""
self.numero = numero
self.tag = tag
self.liste_questions = liste_questions
self.liste_reponses = liste_reponses
self.dict_questions_reponse = dict_questions_reponse
class Question:
......@@ -51,13 +51,13 @@ class LecteurBd:
liste_personnage = []
for idx_ligne, ligne in db_personnages.iterrows():
reponse = []
dict_questions_reponse = {}
for idx_col, valeur in enumerate(ligne):
if idx_col >= 1:
reponse.append(valeur)
dict_questions_reponse[db_personnages.columns.values[idx_col]] = valeur
liste_personnage.append(Personnage(numero=idx_ligne, tag=ligne[0],
liste_questions=db_personnages.columns[1:],
liste_reponses=reponse))
dict_questions_reponse=dict_questions_reponse))
return liste_personnage
def __lecture_questions(self):
......@@ -81,7 +81,4 @@ if __name__ == '__main__':
for p_index, perso in enumerate(lecteur_bd.liste_personnages):
print("perso n° ", perso.numero)
print("tag : ", perso.tag)
for q in perso.liste_questions:
print(q)
for r in perso.liste_reponses:
print(r)
print(perso.dict_questions_reponse)
......@@ -13,11 +13,15 @@ lecteur_bd = LecteurBd(chemin_bd)
"""
Creation liste de capteurs et tags lu pour un exemple
"""
tag = ["0001q", "0002q", "0003q", "0004q", "0005q", "0006q", "0007q",
tag_ok = ["0001q", "0002q", "0003q", "0004q", "0005q", "0006q", "0007q",
"0001p", "0002p", "0003p", "0004p", "0005p", "0006p", "0007p", "0008p"]
tag_faux = ["0001q",
"0002q", "0003q",
"0004q", "0005q", "0006p", "0007q",
"0001p", "0002p", "0003p", "0004p", "0005p", "0006q", "0007p", "0008p"]
capteurs = []
for i in range(1, 16):
capteurs.append(Capteur(i, tag[i-1]))
capteurs.append(Capteur(i, tag_faux[i - 1]))
"""
Test de la vérification
......@@ -27,13 +31,18 @@ print("nb étage = {}".format(verif.nb_etage))
print("nb questions souhaitées =", verif.nb_questions_souhaitees)
print("nb perso souhaitées = ", verif.nb_personnages_souhaitees)
print("résultat avant verification :")
for res in verif.resultat_placement_tags:
print(res)
# print("résultat avant verification :")
# for res in verif.resultat_placement_tags:
# print(res)
print("résultat apres verification des potentielles question:")
verif.verification_questions()
for res in verif.resultat_placement_tags:
print(res)
# verif.verification_questions()
# for res in verif.resultat_placement_tags:
# print(res)
liste_des_validation_branche = verif.verification_globale()
for nb, validation_branche in enumerate(liste_des_validation_branche):
print(nb, validation_branche)
verif.verification_personnages()
......@@ -13,7 +13,7 @@ class VerificationModeJeu1:
self.liste_tags = liste_tags
self.nb_etage = self.__calcul_nb_etages()
self.nb_questions_souhaitees, self.nb_personnages_souhaitees = self.__calcul_nb_questions_nb_personnages()
self.resultat_placement_tags = [-1] * len(self.liste_tags)
self.resultat_leds = [-1] * (len(self.liste_tags)-1)
self.liste_objects_lus, self.liste_index_personnage, self.liste_index_questions = self._association_tags_lu_avec_bd()
def __calcul_nb_etages(self):
......@@ -40,7 +40,6 @@ class VerificationModeJeu1:
for index, capteur in enumerate(self.liste_tags):
trouve = False
tag = capteur.tag_lu
print(tag)
for question in self.liste_questions:
if tag == question.tag:
liste_objects_lus.append(question)
......@@ -58,26 +57,72 @@ class VerificationModeJeu1:
liste_objects_lus.append(None)
return liste_objects_lus, liste_index_personnage, liste_index_questions
def verification_questions(self):
for index in range(0, self.nb_questions_souhaitees):
if isinstance(self.objets_lus[index], Question):
self.resultat_placement_tags[index] = 1
def validite_branche_recursif(self, index, validite):
if index in self.liste_index_personnage:
index_suivant = (index + 1) * 2
if index_suivant < len(self.liste_tags):
if self.liste_objects_lus[index_suivant]: #if not None
validite[index_suivant] = 0
else:
validite[index_suivant] = -1
if self.liste_objects_lus[index_suivant - 1]:
validite[index_suivant - 1] = 0
else:
validite[index_suivant - 1] = -1
index_precedent = math.floor((index + 1) / 2) -1
if index_precedent in self.liste_index_questions:
validite[index_precedent] = 1
else:
validite[index_precedent] = 0
if index_precedent != 0 and index_precedent in self.liste_index_questions:
validite = self.validite_branche_recursif(index_precedent, validite)
return validite
def verification_personnages(self, index_personnage, validite_branche):
compte_faux = 0
personnage = self.liste_objects_lus[index_personnage]
impaire_precedent = bool((index_personnage + 1) % 2)
for index in validite_branche:
if index < index_personnage:
if validite_branche[index] == 0:
return index_personnage, False
tag_question = self.liste_objects_lus[index].tag
if (personnage.dict_questions_reponse[tag_question] == 0 and not impaire_precedent)\
or (personnage.dict_questions_reponse[tag_question] == 1 and impaire_precedent):
compte_faux += 1
impaire_precedent = bool((index + 1) % 2)
return index_personnage, compte_faux == 0
def verification_globale(self):
# liste_des_validation_branche = []
for index_personnage in self.liste_index_personnage: # aller voir tous les personnages
validite = {}
validite_branche = self.validite_branche_recursif(index_personnage, validite) # dictionaire de validité des elements de la branche acrochée au personnage
perso_correspond_questions = self.verification_personnages(index_personnage, validite_branche)
if perso_correspond_questions == True: # si chemin completement bon
self.resultat_leds[index_personnage - 1] = 1
for index in validite_branche:
if index > 0:
self.resultat_leds[index - 1] = 1
else:
self.resultat_placement_tags[index] = 0
# continuer
def validite_branche_recursif(self, index):
if index in self.liste_index_personnage:
if index * 2
def verification_personnages(self):
for index_personnage in self.liste_index_personnage: # aller voir tous les personnages
validite_branche = self.validite_branche_recursif(index_personnage) # dictionaire de validité des elements de la branche acrochée au personnage
#liste_des_validation_branche.append(validite)
return liste_des_validation_branche
......@@ -99,14 +144,6 @@ class VerificationModeJeu1:
if not isinstance(self.objets_lus[index_objet_supperieur], Question):
self.resultat_placement_tags[index] = 0
break"""
""" continuer verification !!!"""
if __name__ == '__main__':
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment