Я прошу сделать программу, которая вычисляет добавление двух полиномов от n и m степеней. Я сделал два словаря (один для первого многочлена, а другой для другого полинома), поскольку каждый из них имеет коэффициенты как значения и степени как ключи, так что я могу проверить, идентичны ли ключи из обоих словарей, тогда я могу суммировать их значения. Но я не знаю, почему я всегда получаю сообщение об ошибке. Мой код до сих пор:Проблемы с суммированием двух полиномов с использованием python
class poly:
def __init__(self, L=[], D=[]):
self.coef=L
self.deg=D
def __add__(self,L2):
if len(self.coef)>len(self.deg):
dec=dict(zip(self.deg,self.coef))
dec[0]=self.coef[-1]
else:
dec=dict(zip(self.deg,self.coef))
Dec1=dec
if len(L2.coef)>len(L2.deg):
dec=dict(zip(L2.deg,L2.coef))
dec[0]=L2.coef[-1]
else:
dec=dict(zip(L2.deg,L2.coef))
Dec2=dec
p=[]
if len(Dec2)>len(Dec1):
for i in Dec2:
if i in Dec1:
s=Dec1[i]+Dec2[i]
p=p+[s]
else:
p=p+p[Dec2[i]]
for x in Dec1:
if x in Dec2:
p=p
else:
p=p+[dec1[x]]
return(poly(p))
if len(Dec2)<len(Dec1):
for x in Dec1:
if x in Dec2:
g=Dec1[x]
p=p+[g]
else:
p=p+[Dec1[x]]
for m in Dec2:
if m in Dec1:
p=p
else:
p=p+[Dec2[m]]
return (poly(p))
Этот код не работает для всех моих примеров, таких как
>>> p=poly([2,4,7,34],[6,4,2])
>>> p1=poly([6,3,7,2,8],[8,4,2,1])
>>> p2=p+p1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
p2=p+p1
File "poly.py", line 31, in __add__
p=p+p[Dec2[i]]
IndexError: list index out of range
>>> #The numbers in the first list is the coefficients and the second list is for degrees
Это не работает! Но это сработало, когда я сделал дополнение без использования метода класса. Я новичок, и я сделал все возможное, чтобы исправить эту проблему.
Другой вопрос: как написать def str для моего кода? Я действительно не знаю, что я должен писать в начале. Мне жаль, ребята, но я новичок в программировании, и мне нужен простой код, такой как мой.
Не то, чтобы это вызывало вашу конкретную проблему, но будьте осторожны с использованием '[]' в качестве значения по умолчанию в '__init__' (или где-нибудь еще, если на то пошло): http://stackoverflow.com/questions/1132941/least-astonishment-in-python-the-mutable-default-argument – lvc
Кроме того, это может иметь смысл сохраните свой многочлен как единый список коэффициентов, так что 'x^3 + 2' имеет коэффициенты' [1, 0, 2] '. – lvc
Я сделал оба! сначала мой init был без [], но это не сработало. Так что я поеду. Извините, что не упомянул, что я ожидаю, что пользователь войдет в строку !! – user1354396