1

目標は、ユーザーがブール論理ステートメントを効果的に作成し (開始されていない)、それらの式を保存し、それらにアクセスし (expression_menu)、それらを構築し (setup_table)、それらを評価し (true)、最後にそれらをテストする (in) プログラムを作成することです。別のモジュール)。

以上のことを考えると、これは私のスキルにとってかなり大きなプロジェクトです。私はすべてを整理する方法にこだわっています。属性を追跡する方が簡単かもしれないので、クラスの使用に移行したいと思うかもしれません...

ただし、すぐに私の問題は、ブール論理ステートメントをどのように転送するかということです.xが未定義であるため、明らかに29行目で構文エラーが発生します(コードのスニペットは11行目から15行目でのみ意味があります.

目標に合わせてコードを整理するにはどうすればよいですか

def setup_table(variables=2):
    return (list(itertools.product(range(2), repeat = variables)))

def truth(variables=None,expression=None):
    truth_table = []
    for x in setup_table(variables):
        if expression:
            x.append(1)
        else:
            x.append(0)
        truth_table.append(x)
    return truth_table

def expression_menu():
    expression = input('''
    choose your expression:
    1. if ((p and q) or (p or q)) and not(r or not q):
    2. if (p or r) or (q and s):
    3. if (p or r) and ( q or (p and s))

    Expression: ''')
    table = None
    if int(expression) == 1:
        table = truth(variables = 3, expression =((x[0] and x[1]) or (x[0] or x[1])) and not (x[
    print(table)

if __name__ == "__main__":
    import itertools
    expression_menu()
4

1 に答える 1

1

ブール式を関数にすることができます。

そう:

table = truth(variables = 3, expression = lambda x: (x[0] and x[1]))

また:

def expression(x):
    return x[0] and x[1]
table = truth(variables = 3, expression = expression)
于 2012-05-13T05:32:45.547 に答える