2017-06-15 74 views
0

远离python一段时间,因此格式化技能不存在。展望把这个格式的东西:格式化为3SAT格式表

[[8, -6, -4], [-10, 4, 6], [6, -8, -9]] 

到的东西,看起来像这样:

(x8 v ~x6 v ~x4)^(~x10 v x4 v x6)^(x6 v ~x8 v ~x9) 

,然后能够引用的每个数字作为单独的输入改为T或F.任何指导意见会很高兴。

import random 
def sample(): 
    nums = random.sample(range(-10, 10), 3) 
    return nums 

exlist = [] 
boundary = random.randint(3, 10) 
count = 0 
while (count < boundary): 
    count = count + 1 
    exlist.append(sample()) 

回答

1

注意0的情况下,似乎沦为你的情况,所以我想你没有0(否则它成为X0或〜X0?)

假设你存储T/F在名单如下:

exvalues = [bool(random.randint(0,1)) for _ in range(10)] 

,那么你可以简单地评价这样的表达(而不需要生成符号表达你以后):

all(any(exvalues[x] if x>0 else not exvalues[-x] for x in y) for y in exlist) 

说明:您取所有“子表达式”的全局and,并且每个子表达式都是元素的全局or(可选not,具体取决于符号)。

+0

我不知道如何生成一个随机列表与否定并排除零。 –