2017-02-18 3 views
1

das ist mein Code:finden niedrigsten Kosten für eine Bootsfahrt, Mit Rekursion und memoization

def O_C(n, prices, start=1, memo=None): 
    if start == n: 
     return 0 
    if memo is None: 
     memo = {} 
    if start not in memo: 
     options = [] 
     for i in range(start + 1, n + 1): 
      options.append(prices(start, i) + O_C(n, prices, i, memo)) 
     memo[start] = min(options) 
    return memo[start] 

# O_C stands for Optimal Cost 

def make_random_prices(N): 
    import random 
    prices = {} 
    for i in range(1, N + 1): 
     for j in range(i + 1, N + 1): 
      prices[(i, j)] = random.randint(1, 10*N) 
    return prices 

prices = make_random_prices(100) 
print O_C(100, prices) 

der Fehler i ständig erhalte:

Traceback (most recent call last): 
    File "/Users/Ori/Desktop/OneDrive - mail.tau.ac.il/Python/test/recursion.py", line 48, in <module> 
    print O_C(100, prices) 
    File "/Users/Ori/Desktop/OneDrive - mail.tau.ac.il/Python/test/recursion.py", line 32, in O_C 
    options.append(prices(start, i) + O_C(n, prices, i, memo)) 
TypeError: 'dict' object is not callable 

keinen Hinweis auf dieser Seite finden können, noch in jedes andere, zu diesem Fehler in diesem Zusammenhang. Der Rekursionsaufruf könnte falsch sein?

+1

Was erwarten Sie 'prices (start, i)' zu tun? Meintest du "Preise [(start, i)]", wie du es in 'make_random_prices' machst? – jonrsharpe

+0

sollten Sie nicht 'prices [(start, i)]' anstelle von Preisen (start, i) verwenden? – Fallen

+0

Die Fehlermeldung ist selbsterklärend. Sie versuchen, ein Objekt vom Typ 'dict' aufzurufen. Sie können sehen, dass 'prices' ein' dict' ist, Sie haben es als 'prices = {}' definiert. Dann versuchen Sie es in 'O_C' aufzurufen:' prices (start, i) ', aber' dict' ist nicht aufrufbar. –

Antwort

0

Dieser Fehler erklärt sich recht gut. Im folgenden Codezeile,

options.append(prices(start, i) + O_C(n, prices, i, memo)) 

Verwendung prices[(start, i)] den Wert in Preise durch das Tupel verkeilt zuzugreifen (start, i) anstatt zu versuchen, Preise von prices(start, i) zu nennen. Preise Hier ist ein Diktat, nicht aufrufbar.

Verwandte Themen