2017-10-09 55 views
0

我在這裏做一個簡單的練習,但我不能完全得到我想要的結果。我有2個簡單的函數,第二個函數run是跳過compute函數,如果提供的鍵和值與前一個執行print函數時相同,但不知道如何更新結果,則直接給出a+b的結果到詞典x跳過數學計算如果鍵,值和結果已經存儲在字典使用Python

下面是我的代碼:

import time 


def compute(a,b): 
    time.sleep(1) 
    return a+b 


x = {} 


def run(a,b): 
    if a & b in x: 
     return x 
    else: 
     x.update({a:b}) 
     return compute(a,b) 


print(run(5,7)) 
print(run(5,7)) 
print(run(2,5)) 
print(run(2,4)) 
print(run(5,7)) 
print(run(2,4)) 

,結果我得到的是:

12 
{5: 7} 
7 
6 
{5: 7, 2: 4} 
6 

,但我想要的是:

12 
12 
7 
6 
12 
6 

任何幫助深表感謝感謝。

+2

你意識到你從來沒有實際記憶*結果*,對嗎? –

+0

你不想'返回x'你想從x返回那個元素。試試'return x [a]'。您還想在存儲之前「計算」。請參閱@ blue_note的回答 – Cfreak

+0

是的,我意識到這一點,因爲我不知道如何記住它,以前我所做的是試圖記住它在一個參數'c = compute(a,b)'顯然是錯誤的,我'在編程中非常新,所以對於菜鳥問題​​很抱歉 –

回答

3

您需要一個映射(a, b) => value。所以

if (a, b) in x: 
    return x[(a, b)] 
else: 
    value = compute(a, b) 
    x[(a, b)] = value 
    return value 

附加說明:在Python邏輯運營商and,不&

相關問題