2012-05-13 57 views
1

目標是創建一個程序,它將有效地讓用戶創建布爾邏輯語句(未啓動),存儲這些表達式,訪問它們(expression_menu),構建它們(setup_table),然後評估它們(真相),然後最終測試它們(在另一個模塊中)。如何組織代碼/何時使用類?

鑑於這一切,這是一個相當大的項目對我的技能。我被困在如何組織一切。我覺得我可能想要使用類,因爲它可能會更容易跟蹤屬性...

然而,立即我的問題是如何轉移布爾邏輯語句,顯然在第29行我'會得到一個語法錯誤,因爲X是未定義(代碼片段不僅使通過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

在我非常愚見,沒有更好的辦法來搪塞一個項目不是需要擔憂的組織和結構,你有什麼工作了。寫一些測試,讓他們通過,儘可能使代碼儘可能乾淨和清晰,不要擔心結構的優雅。當你看到明顯的模式時,[重構](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)