首页 > 解决方案 > 从输入形成多项式

问题描述

我需要编写一个程序,当用户提供输入时,它将根据输入顺序的位置创建一个多项式。例如,如果用户输入:1 2 3 应该打印多项式x^2 + (2.0)x^1 + 3并且这个答案应该是浮点形式。我怎么做?

这是我到目前为止所做的

def get_expression(x1):

   x1=""
   power = len(x1) - 1

   for i in range(len(x1)):
      if x1[i] < 0:
         x1 += str(x1[i])
      else:
         x1 += "+" + str(x1[i])
    
      if x1[i] == 0:
         continue

      if power == 1:
         x1 += "x"
      elif power == 0:
         x1 = x1
      else:
         x1 += "x" + str(power)

      power = power - 1 

   if sum(x1)==0:
     return float(0)

   return x1

代码应满足下面的代码并以以下形式正确给出结果:-4.5x - 5&2x^2 - 3

p1=[-4.5,-5.0]
print(get_expression(p1))
p2=[2.0,0.0,-3.0]
print(get_expression(p2))

请帮助我并建议我如何更正我的代码并以浮点形式获得答案。

标签: pythonpython-3.xlist

解决方案


您可以天真地构建字符串,然后使用字符串替换使其看起来更好:

def poly(*C):
    result = "+".join(f" {c}x^{-p} " for p,c in enumerate(C,1-len(C)) if c)
    result = result.replace("+ -","- ")   # subtract for negative coefficient
    result = result.replace("^1 "," ")    # implicit x^1
    result = result.replace("x^0","")     # implicit x^0
    result = result.replace(" 1x"," x").replace("-1x","-x") # implicit 1x
    return result.strip()

例如:聚(-1,0,3,-1,5)

result = ' -1x^4 + 3x^2 + -1x^1 + 5x^0 ' # naive build (skips zero coeff.)
result = ' -1x^4 + 3x^2 - 1x^1 + 5x^0 '  # subtract for negative coefficient
result = ' -1x^4 + 3x^2 - 1x + 5x^0 '    # implicit x^1
result = ' -1x^4 + 3x^2 - 1x + 5 '       # implicit x^0
result = ' -x^4 + 3x^2 - x + 5 '         # implicit 1x
return   '-x^4 + 3x^2 - x + 5'           # strip extra space for return

输出:

print(poly(1,2,3))             # x^2 + 2x + 3

print(poly(-4.5,-5))           # -4.5x - 5
print(poly(2,0,-3))            # 2x^2 - 3

print(poly(-1,0,-1.5,5,0,-32)) # -x^5 - 1.5x^3 + 5x^2 - 32
print(poly("a","b","-c"))      # ax^2 + bx - c

推荐阅读