diff --git a/sae_s1_02_etu.py b/sae_s1_02_etu.py index 23f8aa95b2e0e1a7eea922762eafb5f28f0f4504..86165b7b42210bae800cfacf833f3e3bcfea511c 100644 --- a/sae_s1_02_etu.py +++ b/sae_s1_02_etu.py @@ -58,8 +58,9 @@ def evaluer_clause(clause,list_var): #cree un dictionnaire qui assigne #chaque variable a sa valuation en se basant sur liste_var - for i in range(len(list_var)): - dict_valuations[i+1]=list_var[i] + for index,i in enumerate(list_var): + dict_valuations[index+1]=i + #cree une liste qui equivaut a clause mais #avec ses variables remplacées par leurs valuations for i in clause: @@ -80,8 +81,9 @@ def evaluer_clause(clause,list_var): #Sinon retourne un bool correspond a la presence d'un True return any(liste_valuations) - -"""clause1=[1,-2,3,-4] + +""" +clause1=[1,-2,3,-4] list_var1=[True,True,False,None] test("essai cas 1 evaluer_clause : ",evaluer_clause(clause1,list_var1),True) clause2=[1,-2,3,-4] @@ -130,19 +132,15 @@ def determine_valuations(list_var): '''Arguments : une liste de booléens informant de valeurs logiques connues (ou None dans le cas contraire) pour un ensemble de variables Renvoie : La liste de toutes les valuations (sans doublon) envisageables pour les variables de list_var ''' - def recur(list_var): - for l in list_var: #chaque sous liste - for i, v in enumerate(l): - if v is None: #crée deux liste, une avec false à la palce de None et une avec true à la place de None - cpy1, cpy2 = l[:], l[:] #copie les liste - cpy1[i] = False #remplace none par false - cpy2[i] = True #remplace none par true - list_var.append(cpy1) #ajoute la liste dans list_var - list_var.append(cpy2) #ajoute la liste dans list_var - list_var.pop(0) #dégage la liste avec le None modifé - return recur(list_var) #recommence avec chaque None de la liste - return list_var - return recur([list_var]) + + liste_clean=[list_var] + for i in liste_clean: + for index,j in enumerate(i): + if j==None: + liste_temp=copy.deepcopy(i) + i[index],liste_temp[index]=True,False + liste_clean.append(liste_temp) + return liste_clean """ list_var1=[True,None,False,None] @@ -214,24 +212,15 @@ def init_formule_simpl_for(formule_init,list_var): ''' Renvoie : La formule simplifiée en tenant compte des valeurs logiques renseignées dans list_var ''' - for i in list_var: - if not evaluer_clause(i,list_var): - return [] - if list_var[i]: - formule_init=enlever_litt_for(formule_init, i+1) - elif list_var[i]==False: - formule_init=enlever_litt_for(formule_init, -i+1) - return formule_init - # list_simple=[] - # for l in formule_init: - # if evaluer_clause(l, list_var) == None: - # list_simple.append(l) - # for i in l: - # if list_var[abs(i) - 1] != None: - # l.remove(i) - # return list_simple - + formule_out=copy.deepcopy(formule_init) + for index,i in enumerate(list_var): + if i: + formule_out = enlever_litt_for(formule_out,index+1) + elif i==False: + formule_out = enlever_litt_for(formule_out,-(index+1)) + return formule_out +""" list_var_for1=[False, None, None, False, None] for1=[[-5, -3, 4, -1], [3], [5, -2], [-2, 1, -4], [1, -3]] cor_for1=[[3], [5, -2], [-3]] @@ -246,7 +235,7 @@ list_var_for3= [None, None, None, True, None] for3= [[-5, -1], [-1, -3], [4], [-4, 1], [-2, -1, 3]] cor_for3=[[-5, -1], [-1, -3], [1], [-2, -1, 3]] test_for('test3_init_formule_simpl_for : ',init_formule_simpl_for(for3,list_var_for3),cor_for3) - +""" def retablir_for(formule_init,list_chgmts): '''Arguments : une formule initiale et une liste de changements à apporter sur un ensemble de variables (chaque changement étant une liste [i,bool] avec i l'index qu'occupe la variable dans list_var et bool la valeur logique qui doit lui être assignée)