我在做一些与用 Python 制作真值表相关的作业时遇到了一些麻烦。我试过去办公时间,但他们什么都不知道,所以我得问问你们。
这是问题:
--
在这个问题中,您将实现用于打印带有变量的公式的真值表的函数。您可以使用以下帮助函数,它打印一个制表符分隔的值列表。
def prints(values):
print("\t".join([str(value) for value in values]))
上面的函数可以如下使用
prints([True, False, True])
True False True
您还可以使用以下帮助函数,它返回函数的参数名称列表:
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']
答:实现一个函数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 的变量列表长度相同,则该函数应打印一行包含 values 中所有值的值,以及将 f 应用于该值列表的结果(使用 *-operator将 f 应用于参数列表);
- 如果列表值比 f 的变量列表短,该函数应该递归调用truthtable(),并适当更改truthtable() 的参数。
C:实现一个函数 rows(f),它的第一个参数是单个函数 f(即,对应于公式的 Python 函数)。该函数应返回 f 的真值表中的行数。
def h(x,y,z): return (y or x) and (not(z) <= x)
rows(h)
8
--
我设法做了A,得到了这个答案:
def truthtableXY(f):
prints(['y', 'x', 'formula'])
for x in [True, False]:
for y in [True, False]:
prints([x, y, f(x,y)])
哪个有效。但我根本无法弄清楚如何做其他人。
有谁知道/可以找出答案吗?
这是带有作业顺便说一句的原始网站:http ://cs-people.bu.edu/lapets/131/m.php?#2.4 (问题3)
提前谢谢各位!:)