2017-07-04 102 views
0

此代碼不運行。它在運行(門)功能期間失效。我得到的第一個錯誤是來自.__name__調用。這不是我的主要問題,所以我並不特別擔心這個錯誤如何在參數未知的情況下使用參數傳遞函數?

我得到的第二個錯誤是在運行(門)的最後一行。錯誤消息說門不可調用。

我相信我的實際問題是與我的程序結構。我誤解(或誤用)了一些面向對象的原則嗎?如果有人能夠爲我的代碼提供一個示例或更正以更好地構建它,我將不勝感激。謝謝!

main.py

import builtins 
import logic 

print("Select a logic gate:") 
print("1) AND") 
print("2) NAND") 
print("3) OR") 
print("4) NOR") 
print("Q) Quit Program") 
logicGate = input() 
if(int(logicGate) == 1): 
    run(logic.andGate) 
elif(int(logicGate) == 2): 
    run(logic.nandGate) 
elif(int(logicGate) == 3): 
    run(logic.orGate) 
elif(int(logicGate) == 4): 
    run(logic.norGate) 
elif(logicGate.lower() == 'q'): 
    prog = 'n' 
else: 
    print("Invalid input. Please try again") 

def toBool(s): 
    if s == 'True': 
     return True 
    elif s == 'False': 
     return False 
    else: 
     raise ValueError 

def run(gate): 
    print(gate.__name__ + " Gate function") 
    print("Enter value for 'a'") 
    valA = input() 
    print("Enter value for 'b'") 
    valB = input() 
    print("Result: " + str(gate(toBool(valA), toBool(valB)))) 

而且logic.py

def andGate(a, b): 
    if(a and b): 
     return True 
    else: 
     return False 

def nandGate(a,b): 
    if(a and b): 
     return False 
    else: 
     return True 

def orGate(a, b): 
    if(a or b): 
     return True 
    else: 
     return False 

def norGate(a, b): 
    if(a or b): 
     return False 
    else: 
     return True 
+1

如果將'run'和'toBool'移動到腳本的頂部,就在導入之後,完美地工作。 –

+0

@cᴏʟᴅsᴘᴇᴇᴅ是啊即使如此,爲什麼?當你打印結果?如果它的布爾對象不應該是一個整數... 0或1 ...或者是true或者false ...點是...那會增加ValueError – scriptso

+0

@scriptso'>>> str(True); '真' –

回答

0

Likemr溼婆ķDeviah說...移動下的進口的DEFS,只是刪除否則:提高....等ect部分......沒有正確使用。

import builtins 
import logic 

def toBool(s): 
    if s == 'True': 
     return True 
    elif s == 'False': 
     return False 


def run(gate): 
    print(gate.__name__ + " Gate function") 
    print("Enter value for 'a'") 
    valA = input() 
    print("Enter value for 'b'") 
    valB = input() 
    print("Result: " + str(gate(toBool(valA), toBool(valB)))) 

print("Select a logic gate:") 
print("1) AND") 
print("2) NAND") 
print("3) OR") 
print("4) NOR") 
print("Q) Quit Program") 
logicGate = input() 
if(int(logicGate) == 1): 
    run(logic.andGate) 
elif(int(logicGate) == 2): 
    run(logic.nandGate) 
elif(int(logicGate) == 3): 
    run(logic.orGate) 
elif(int(logicGate) == 4): 
    run(logic.norGate) 
elif(logicGate.lower() == 'q'): 
    prog = 'n' 
else: 
    print("Invalid input. Please try again") 
+0

對不起沒有pep!希望它不是2亂碼。 – scriptso

相關問題