def fibMemo(n):
pad = {0:0, 1:1}
if n not in pad:
print 'Not in dict ,adding', n, n-1, n-2
pad[n] = pad[n-1] + pad[n-2]
else:
print pad[n]
return
for i in range(0,31):
fibMemo(i)
第4行:返回KeyError:2,但我在添加新密钥值时,以防密钥不存在。刚开始使用Python,可以原谅无知。输出
Error:
0
1
Not in dict ,adding 2 1 0
Not in dict ,adding 3 2 1
Line 5: KeyError: 2
在i = 2完成之前i = 3运行。
答案 0 :(得分:2)
您将dict的初始化放在函数体中。
因此,每次执行该函数时,项目都会返回0:0和1:1。
当调用fibMemo(3)时,它将进入第5行,即:
<!DOCTYPE html>
<html lang="en">
<head>
<title>
Bootstrap Example
</title>
<meta charset="utf-8"/>
<meta content="width=device-width, initial-scale=1" name="viewport"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js">
</script>
</head>
<body>
<div class="container">
<h2>
Image Gallery
</h2>
<div class="row">
<!--STARTDELETE-->
</div>
<!--ENDDELETE-->
</div>
</body>
</html>
由于垫[2]已添加,但稍后在垫初始化期间被擦除。它给出了关键错误。
您应该考虑在函数定义之前移动pad[3]=pad[2]+pad[1]
。