我有一个学校运动课,制作一个程序来打印输入多项式的派生词。我在此站点上找到了一个代码,该代码几乎可以达到我想要的效果。由于我在此特定练习中缺乏编程技能,因此我需要更多帮助。
因此,我需要计算的多项式位于底部的“ run(xxxxxxxx)”行中,并且几乎可以运行。第一个应该打印“ 4x ^ 3 + 12x ^ 2 +1”,但打印“ 4x ^ 3 + 9x ^ 2 +”。第二个,我需要找出如何在多名词组中加上用“ y”进行计算的可能性。
我想问题可能在于程序无法计算所有行,这就是为什么它是9x ^ 2而不是12x ^ 2的原因。
任何人都可以给我小费如何前进或向我展示代码,以便我可以学习如何制作它?
import re
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))
return eq_map
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):
return '' if c == 1 else str(c)
str_terms = [(str_coeff(c) + str_power(p)) for c, p in eq_map]
return "+".join(str_terms)
def derivative(eq):
eq_map = read(eq)
der_map = [(p*c, p-1) for c, p in eq_map[:-1]]
return write(der_map)
def run(eq):
print (eq, '->', derivative(eq))
run("x^4 + 3x^3 + x +x^3")
run("x^3 + xy")
谢谢:)
答案 0 :(得分:0)
首先,您的代码无法处理第二个方程式,因为它假设遵循以下模式的项: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)