2017-06-05 68 views
-1

我試圖定義一個函數來執行布爾邏輯或門的功能。該函數理想情況下應接受字典,因爲我的數據是字典格式。將字典中的值相乘的函數 - Python

我擡頭看着不同的東西,但我現在卡住了。

我已經開始用somethign這樣的:

d = {'26': [0.5], '22': [0.5], '12': [0.5]} 
def OR_function(**parameters): 
    pi *= (1 - parameters) 
    return (1 - pi) 
OR_function(**d) 

(我知道這是錯誤的)

然後閱讀一整天我都設法解開字典,但我仍然不能夠執行後遞歸到位的產品。我已經看過函數式編程操作符,但它們只接受兩個參數[https://docs.python.org/3/library/operator.html]。此刻

我的函數定義看起來是這樣的:

import operator 
def OR_function(**parameters): 
print(operator.imul(list(*parameters))) 
#pi = 0 
#for i, j in parameters.items(): 
# pi *= (1 - j[0]) 
#print(pi) 
return 1 #- pi 

,並提出了以下錯誤: 「類型錯誤:op_imul預計2個參數,得到3」

有人能幫助我嗎? 歡迎提供其他方法來解決這個問題。請解釋答案中的代碼,以便我可以學到一些東西。

回答

1

除非我誤解了你正在嘗試做的事情,否則應該不需要解開字典。這爲我工作:

d = {'26': [0.5], '22': [0.5], '12': [0.5]} 

def OR_function(parameters): 
    pi = 1 

    print(parameters) 
    print("=================") 

    for key, value in parameters.items(): 
     print(pi) 
     pi *= (1 - value[0]) 

    print("=================") 
    print(pi) 
    return (1 - pi) 


OR_function(d) 

其中產量這個輸出(這似乎是正確的):

{'22': [0.5], '12': [0.5], '26': [0.5]} 
================= 
1 
0.5 
0.25 
================= 
0.125 

如果在字典中的值與一個以上的元素列表中所需的變化非常小,你只需要循環額外的:

d = {'26': [0.5, 0.7], '22': [0.5, 0.9], '12': [0.5, 0.5]} 

def OR_function(parameters): 
    pi = 1 

    print(parameters) 
    print("=================") 

    for key, value in parameters.items(): 
     for x in value: 
      print(pi) 
      pi *= (1 - x) 

    print(pi) 
    return (1 - pi) 


OR_function(d) 

從您發佈的註釋代碼:

#pi = 0 
#for i, j in parameters.items(): 
# pi *= (1 - j[0]) 
#print(pi) 

看起來你的問題是,你正在初始化變量pi爲0,這將在遞歸乘法中產生0的值。