我需要有关此代码的帮助。当我在终端中运行它时,我得到:
<__main__.Polynomial instance at 0x2b6ae51c80e0>
<__main__.Polynomial instance at 0x2b6ae51c84d0>
Traceback (most recent call last):
File "Polynomial_dict1.py", line 36, in <module>
print p+p2
File "Polynomial_dict1.py", line 22, in __add__
result_d[key] = other.d[:]
TypeError: unhashable type
我不知道出了什么问题。 这是代码:
from Polynomial import*
class Polynomial:
def __init__(self, dictionary):
self.d = dictionary
def __call__(self, x):
s = 0
for key in d.keys:
s += self.d[key]*x**key
return s
def __add__(self, other):
if len(self.d)>len(other.d):
result_d = self.d[:] # copy
for key in d.keys:
result_d[key] += other.get(key,0)
else:
result_d = other.d[:]
for key in d.keys:
result_d[key] += self.d.get[key,0]
return Polynomial(result_d)
p = Polynomial({1:1,100:-3})
p2 = Polynomial({1:-1,20:1,100:4})
print p
print p2
print p+p2
答案 0 :(得分:3)
据我所知,您正在尝试在字典(self.d[:]
)上使用切片语法。这不起作用。要制作副本,您需要self.d.copy()
。
你也会在这一行上收到错误:
result_d[key] += self.d.get[key,0]
应该是:
result_d[key] += self.d.get(key,0)
此外,
for key in d.keys:
由于keys
是方法,无效 - 您需要调用它:
for key in self.d.keys():
答案 1 :(得分:2)
我认为他正在尝试的是以下内容:
他想创建一个可以添加多项式的程序。其中多项式系数和幂被作为字典实现到程序中。
p = Polynomial({1:1, 100:-3})
p2= Polynomial({1:-1, 20:1, 100:4})
关键是权力,价值是权力系数。
数学形式上的p和p2是:x - 3x * 100 {1:1,100:-3}和x * 20 - x + 4x ** 100 {1:-1,20:1,100:4}
并且print语句应该产生以下结果:x * 20 + x * 100
我很好奇您如何调用添加方法,或者在添加2个实例时自动完成?
因为上面提到的print语句在运行时给出了这个:
Terminal > python stack_overflow.py
<__main__.Polynomial instance at 0x7f6879fffd88>
<__main__.Polynomial instance at 0x7f6879fffe18>
<__main__.Polynomial instance at 0x7f6879fffe60>
答案 2 :(得分:0)
这是一个代码版本,它可以解决所有语法问题并使代码无错运行,但我真的不知道你是否想要这样做。
from Polynomial import*
class Polynomial:
def __init__(self, dictionary):
self.d = dictionary
def __call__(self, x):
s = 0
for key in d.keys():
s += self.d[key] * x**key
return s
def __add__(self, other):
if len(self.d)>len(other.d):
result_d = self.copy()
for key in self.d:
result_d[key] += other.get(key, 0)
else:
result_d = other.d.copy()
for key in other.d:
result_d[key] += self.d.get(key, 0)
return Polynomial(result_d)
p = Polynomial({1:1, 100:-3})
p2 = Polynomial({1:-1, 20:1, 100:4})
print p
print p2
print p+p2
以下是已修复/更改的所有内容的清单:
result_d = self.d[:]
- &gt; result_d = self.d.copy()
result_d = other.d[:]
- &gt; result_d = other.d.copy()
在其他地方,我将for key in d.keys:
等语句更改为for key in d:
(虽然for key in d,keys():
也会起作用。)
在一行中你有result_d[key] += self.d.get[key,0]
而不是result_d[key] += self.d.get(key,0)
我把它留了下来,但是开头的from Polynomial import*
也可能是个错误,因为它会导致脚本自行导入并基本上运行两次。
在发布问题之前,您确实应该尝试从代码中获取语法错误(除非您不能,这是您的问题)。