python解决两个一元多项式相加的问题

代码步骤:

  1. 自定义一个函数
    输入字符串,返回一个字典。在该题目中,字典的“键”是多项式的“指数”,“值”是该“指数”对应的“系数”。(用到正则表达式)
    举个栗子如下:
    假设目标多项式为:7x^5+6x ^4+9x ^3+7x ^2+2x ^1
    你必须按“要求”输入数字(数字间的“间隔符”没有要求):
    要求:
    ①先输入系数,再输入该系数所对应的指数
    ②用“间隔符”隔开各个数字
    你可以这样输入:7,5,6,4,9,3,7,2,2,1
  2. 用input输入字符串,并调用第一步的自定义函数,得到两个字典,这里我叫它俩“字典1”和“字典2”。
  3. 初始化一个新字典,我叫它“和字典”。将“字典1”和“字典2”相同的键所对应的值相加,放入“和字典”;然后将“字典1”多出“和字典”的键和所对应的值放入“和字典”,将“字典2”不同于“和字典”的键和所对应的值放入“和字典”。
  4. 为了更好的用户体验,我把“和字典”中的信息,提取出来。首先完成了“和字典”中键由大到小排序,目的是实现多项式的降幂排列,然后对字符串进行格式化,实现输出一个字符串类型的“一元多项式”。

代码如下:

#encoding=utf-8
import re
"""
自定义函数,输入字符串,返回一个字典
在该题目中,字典的“键”是多项式的“指数”,“值”是该“指数”对应的“系数”
举个栗子如下:
    假设目标多项式为:7x^5+6x^4+9x^3+7x^2+2x^1
    你必须按“要求”输入数字(数字间的“间隔符”没有要求):
    要求:
        ①先输入系数,再输入该系数所对应的指数
        ②用“间隔符”隔开各个数字
    你可以这样输入:7,5,6,4,9,3,7,2,2,1
"""
def strToDic(str):
    #利用正则表达式获取字符串str中的数字,放入列表m
    patter = re.compile("\d+")
    m = re.findall(patter, str)

    # 将列表m中的字符串变为数字,偶数项为系数,奇数项为指数
    for i in range(len(m)):
        m[i] = int(m[i])

    #将列表m中的奇数项存入字典的键,偶数项存入对应键的值
    coe = []  # 系数列表初始化
    ind = []  # 指数列表初始化
    for i in range(len(m)):
        if i % 2 == 0:
            coe.append(m[i])
        else:
            ind.append(m[i])
    dict = {}#初始化字典
    for i in range(len(coe)):
        dict[ind[i]] = coe[i]
    return dict

#输入两个多项式的字符串,并转化为字典
poly1=input("请依次输入第一个多项式中的数值:")
dict1=strToDic(poly1)

poly2=input("请依次输入第二个多项式中的数值:")
dict2=strToDic(poly2)


addDict={}#初始化“和字典”,储存“和多项式”的指数和系数
#储存两个初始字典中,相同的键 所对应的值的和
for i in dict1.keys():
    for j in dict2.keys():
        if i==j:
            addDict[i]=dict1[i]+dict2[j]

#分别获得不同的键值对
for i in dict1.keys():
    if i not in addDict:
        addDict[i]=dict1[i]

for i in dict2.keys():
    if i not in addDict:
        addDict[i]=dict2[i]
#综上,完成“和字典”

#冒泡排序,目的:为了多项式按降幂排列输出
mid=0
list1=list(addDict.keys())
for i in range(len(list1)-1):
    for  j in range(len(list1)-1):
        if list1[j]

输入,输出如下:
在这里插入图片描述

写作感言:
第一次写博客,对写作操作略有不熟,还请见谅。
如有错误,还请指出;如有更好的实现方法,欢迎各位朋友与我一起讨论。

你可能感兴趣的:(python)