sumDict = {}
n = 1000
print(sumDict)
for c in range(1,n):
for d in range(1,n):
result = c**3 + d**3
if (result in sumDict):
#print(1729 in sumDict) #always true
sumDict[result] = sumDict[result].append((c,d))
else:
sumDict[result] = [(c,d)]
for key,val in sumDict.items():
for pair in val:
for pair in val:
print(pair,pair)]]
我试图找到满足^ 3 + b ^ 3 = c ^ 3 + d ^ 3的所有整数组合。我将c ^ 3 + d ^ 3的结果映射到满足总和的对列表。我总是收到以下错误:
AttributeError:' NoneType'对象没有属性'追加'
经过进一步调查,由于某种原因,密钥1729始终存在于字典中(除非我遗漏了某些内容)。有人能告诉我发生了什么吗?
答案 0 :(得分:1)
sumDict[result] = sumDict[result].append((c,d))
append
返回None,因此在执行此行后,sumDict[result]
将引用None
而不是它用来引用的列表。然后,下一次执行此行时,它将尝试在该None值上调用append
,然后崩溃。
不要将append
的结果分配给任何内容,只需将其调用即可。
sumDict[result].append((c,d))
答案 1 :(得分:1)
字典根本不是空的。你的问题出现在这里:
sumDict[result] = sumDict[result].append((c,d))
此处设置sumDict[result]
为None
,因为list.append()
的返回值为None
。下次通过列表时,result
位于字典中,但与其关联的值为None
,您无法附加到None
。
相反,只需写下:
sumDict[result].append((c,d))
或者更好的是,完全删除if
语句,然后写下:
sumDict.setdefault(result, []).append((c, d))