我正在尝试创建一个程序,在运行时会询问布尔表达式,变量然后为输入的内容创建一个真值表。我需要使用一个类,这是我到目前为止。我不知道从哪里开始。
from itertools import product
class Boolean(object):
def __init__(self, statement, vars):
self.exp = statement
self.vars = vars
def __call__(self, statement, vars):
def main():
expression = raw_input('Give an expression:')
vars = raw_input('Give names of variables:')
variables = vars.split(' ')
b = Boolean(expression, variables)
if __name__ == "__main__":
main()
答案 0 :(得分:6)
我有一个完全符合您要求的库! 查看github repo或在pypi上找到它here。
自述文件描述了一切如何运作,但这是一个简单的例子:
from truths import Truths
print Truths(['a', 'b', 'x', 'd'], ['(a and b)', 'a and b or x', 'a and (b or x) or d'])
+---+---+---+---+-----------+--------------+---------------------+
| a | b | x | d | (a and b) | a and b or x | a and (b or x) or d |
+---+---+---+---+-----------+--------------+---------------------+
| 0 | 0 | 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 0 | 1 | 0 | 0 | 1 |
| 0 | 0 | 1 | 0 | 0 | 1 | 0 |
| 0 | 0 | 1 | 1 | 0 | 1 | 1 |
| 0 | 1 | 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 0 | 0 | 1 |
| 0 | 1 | 1 | 0 | 0 | 1 | 0 |
| 0 | 1 | 1 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 |
| 1 | 0 | 0 | 1 | 0 | 0 | 1 |
| 1 | 0 | 1 | 0 | 0 | 1 | 1 |
| 1 | 0 | 1 | 1 | 0 | 1 | 1 |
| 1 | 1 | 0 | 0 | 1 | 1 | 1 |
| 1 | 1 | 0 | 1 | 1 | 1 | 1 |
| 1 | 1 | 1 | 0 | 1 | 1 | 1 |
| 1 | 1 | 1 | 1 | 1 | 1 | 1 |
+---+---+---+---+-----------+--------------+---------------------+
希望这有帮助!
答案 1 :(得分:5)
你可以直接在python中定义任何布尔函数。
考虑以下示例:
def f(w,x,y,z):
return (x and y) and (w or z)
我写了一个代码片段,它接受任何函数f,并返回其真值表:
import pandas as pd
from itertools import product
def truth_table(f):
values = [list(x) + [f(*x)] for x in product([False,True], repeat=f.func_code.co_argcount)]
return pd.DataFrame(values,columns=(list(f.func_code.co_varnames) + [f.func_name]))
使用它会产生(如果你使用的是IPython Notebook,那么格式很好的html):
truth_table(f) w x y z f 0 False False False False False 1 False False False True False 2 False False True False False 3 False False True True False 4 False True False False False 5 False True False True False 6 False True True False False 7 False True True True True 8 True False False False False 9 True False False True False 10 True False True False False 11 True False True True False 12 True True False False False 13 True True False True False 14 True True True False True 15 True True True True True
干杯。
答案 2 :(得分:1)
你可能想做这样的事情:
from itertools import product
for p in product((True, False), repeat=len(variables)):
# Map variable in variables to value in p
# Apply boolean operators to variables that now have values
# add result of each application to column in truth table
pass
但for循环的内部是最难的部分,所以祝你好运。
这是一个在三个变量的情况下迭代的例子:
>>> list(product((True, False), repeat=3))
[(True, True, True), (True, True, False), (True, False, True), (True, False, False), (False, True, True), (False, True, False), (False, False, True), (False, False, False)]