我在用python编写truthtable相关的作业时遇到了一些问题。我试着去上班时间,但他们什么都不知道,所以我得问问你们。
问题是:
--
在这个问题中,您将实现用于打印带有变量的公式的真值表的函数。您可以使用下面的helper函数,它将打印以制表符分隔的值列表。

def prints(values):
    print("\t".join([str(value) for value in values]))

上述功能可以如下使用
prints([True, False, True])
True   False  True

您还可以使用以下helper函数,该函数返回函数的参数名列表:
def variables(f):
    return list(f.__code__.co_varnames)

上述功能可以使用如下:
def h(x,y,z): return (y or x) and (not(z) <= x)

variables(h)
['x', 'y', 'z']

A:实现一个函数truthtablexy(f),它接受一个函数f作为输入(即,一个python函数对应于一个公式,如您在上面的问题2中定义的公式)。你可以假设f有两个布尔参数x和y。函数应该为f打印一个真值表。
def f(x,y): return x and y

truthtableXY(f)
y      x      formula
True   True   True
True   False  False
False  True   False
False  False  False

b:实现一个递归函数truthtable(f),它将单个函数f(即对应于公式的python函数)作为第一个参数。函数f可以接受任何非零数量的参数。函数应该为f打印一个真值表。
def h(x,y,z): return (y or x) and (not(z) <= x)

truthtable(h)
x       y       z       formula
True    True    True    False
True    True    False   False
True    False   True    False
True    False   False   False
False   True    True    True
False   True    False   False
False   False   True    False
False   False   False   False

truthtable()函数应采用递归回溯方法,并可按如下方式组织:
函数应该有第二个默认值为[]的参数值,它将是函数建立并最终传递给f的值的列表;
如果列表值为空,则函数应打印包含所有变量名的行(每个变量一个列标题);
如果列表值的长度与f的变量列表的长度相同,则函数应打印一行值,其中包含值中的所有值,以及将f应用于该值列表的结果(使用*运算符将f应用于参数列表);
如果列表值短于f的变量列表,则函数应递归调用truthtable(),并适当更改truthtable()的参数。
C:实现一个函数行(f),它将一个函数f(即对应于公式的Python函数)作为第一个参数函数应该返回f的truth表中的行数。
def h(x,y,z): return (y or x) and (not(z) <= x)

rows(h)
8

--
我设法做了一个,得到了这个答案:
def truthtableXY(f):
    prints(['y', 'x', 'formula'])
    for x in [True, False]:
        for y in [True, False]:
            prints([x, y, f(x,y)])

这很管用。但我就是不知道怎么做其他的。
有人知道/能想出答案吗?
这是带家庭作业的原始网站btw:http://cs-people.bu.edu/lapets/131/m.php?#2.4(问题3)
提前谢谢你们!:)

最佳答案

对于B,你需要:

def truthtable(f, values=None):
    if values is None:
        prints(variables(f) + ["formula"])
        values = []
    # print values
    if len(values) == len(variables(f)):
        prints(values + [f(*values)])
    else:
        for b in [True, False]:
            truthtable(f, values + [b])

如何满足您的规格:
函数应该有第二个参数values和默认值
[]的值,它将是函数建立的值列表
并最终传递给f;-不完全是,“可变默认参数”在python中是一个错误的移动,但是我有values并在第一次调用truthtable时使其成为一个空列表。
如果列表values为空,则函数
应打印包含所有变量名的行(一列
每个变量的标题);-在初始化时完成value
如果列表values
f的变量列表,函数应打印一行值
包含values中的所有值,以及
f应用于该值列表(使用*-运算符将f应用于
参数列表);-第二个if
如果列表values比列表短
对于f的变量,函数应递归调用
truthtable(),对
truthtable()-最后是for循环。
关于最后一部分的更多解释,您需要构建TrueFalse的组合以作为参数传递给f,因此您递归地调用(即从自身调用函数)truthtable,首先使用True,然后使用False,每次都添加到列表中,直到您拥有正确数量的参数取消注释print values以观察在解释器中发生的这种情况。

09-26 16:12