使用字典保存多项式系数;加

时间:2012-11-02 19:02:28

标签: python class dictionary

我需要有关此代码的帮助。当我在终端中运行它时,我得到:

<__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

3 个答案:

答案 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*也可能是个错误,因为它会导致脚本自行导入并基本上运行两次。

在发布问题之前,您确实应该尝试从代码中获取语法错误(除非您不能,这是您的问题)。