1 回答
TA贡献1951条经验 获得超3个赞
首先,您的代码无法处理第二个等式,因为它假定项遵循以下模式:ax^b、a^x、x^b或a,而您给它一个意外的xy。我无法猜测这里的预期输出是什么。如果你想让它在 x 部分之后(或之前)存在,你必须指定如何和实现它。
对于第一个方程,有不同的问题。
一个合乎逻辑的问题是您未能对多边形进行归一化,即将具有相同指数值的项分解。如果不y涉及,很容易做到,但是如果您想处理它们,则必须明确接受并处理具有 2 个变量的多项式。
然后read函数看起来是正确的,只要不y涉及,但我会在这里做规范化:
def read(eq):
terms = eq.split('+')
equation = [re.split('x\^?', t) for t in terms]
eq_map = []
for e in equation:
try:
coeff = int(e[0])
except ValueError:
coeff = 1
try:
power = int(e[1])
except ValueError:
power = 1
except IndexError:
power = 0
eq_map.append((coeff, power))
# Normalize the polynom
old = [0, -1]
new_map = []
for e in sorted(eq_map, key = lambda x: x[1],reverse=True):
if e[1] == old[1]:
old[0] += e[0]
else:
old = list(e)
new_map.append(old)
return [tuple(i) for i in new_map]
然后str_coeff是错误的,因为1不应该变成''而是保持 1:
def write(eq_map):
def str_power(p):
if p == 0:
return ''
elif p == 1:
return 'x'
else:
return 'x^%d' % (p,)
def str_coeff(c, p):
return '' if (c == 1 and p != 0) else str(c)
str_terms = [(str_coeff(c, p) + str_power(p)) for c, p in eq_map]
return "+".join(str_terms)
并且在derivative你不能无条件地放弃最后一项,但如果有的话,放弃0的幂项:
def derivative(eq):
eq_map = read(eq)
der_map = [(p*c, p-1) for c, p in eq_map if p != 0]
return write(der_map)
添加回答
举报