python - 从输入形成多项式
问题描述
我需要编写一个程序,当用户提供输入时,它将根据输入顺序的位置创建一个多项式。例如,如果用户输入: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))
请帮助我并建议我如何更正我的代码并以浮点形式获得答案。
解决方案
您可以天真地构建字符串,然后使用字符串替换使其看起来更好:
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
推荐阅读
- flutter - 在颤振中以共享首选项存储多个值失败
- spring - Spring Retry 中异常表达式的使用
- ruby - 设置关键进程 Ruby FFI
- python - 如何仅使用 boto3 获取与特定名称匹配的 EMR 的 ID
- mysql - 按列追加表 MySQL
- html - 即使名称属性设置正确,jQuery 验证也不起作用
- node.js - Nanoexpress 服务器在 Heroku 和 AWS 上失败 - 在本地运行良好 - 无法跟踪“dest.on()”错误
- python - 全局字典和 dict_items
- python-3.x - python3中如何让每个线程发送多个请求?
- android - 当当前工作人员仍在运行时,Android 工作管理器会在 10 分钟后调用工作人员