2012-05-13 9 views
1

目的は、ユーザーがブール論理ステートメント(開始されない)を作成し、それらの式を保存し、それらにアクセスし(expression_menu)、それらを構築して(setup_table)、それらを評価し(真実)、最終的にそれらをテストできるようにするプログラムを作成することです。 (別のモジュールで)。コードの整理方法/クラスの使用方法

これは私のスキルにとってかなり大きなプロジェクトです。私はすべてを整理する方法に立ち往生しています。私はクラスを使用する方に移動したいと思うかもしれません。なぜなら、属性を追跡する方が簡単かもしれないからです...

すぐに私の問題は、論理的な論理ステートメント、 xが定義されていないので、LL構文エラーを取得します(コードのスニペットは15

を通してライン11のセンスがどのように私はあなたが作ることができる

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() 
+3

。いくつかのテストを書いて渡し、コードをできるだけきれいにしてください。構造的な優雅さを心配しないでください。明白なパターンが見えたら、地獄のような[refactor](http://en.wikipedia.org/wiki/Code_refactoring)。 – ckhan

答えて

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) 
関連する問題