Fortran中如何读取不高于四次的多项式输入?
多项式输入解析方案(针对四次及以下多项式)
核心思路是把任意形式的多项式字符串解析为按次数索引的系数数组,不管用户输入的项顺序、加减位置,统一处理后映射到数组对应位置。以下是具体实现步骤和示例:
1. 字符串预处理
先统一输入格式,消除加减号差异并清理冗余字符:
- 移除所有空格:将
"3x² - 2x + 5"转为"3x²-2x+5" - 把减号替换为
"+-":将"3x²-2x+5"转为"3x²+-2x+5",让所有项都能通过+拆分 - 处理开头负号:若字符串以
"-"开头,在前面补"+",比如"-x³+2x"转为"+-x³+2x",避免拆分后出现空项
2. 拆分多项式项
用split('+')拆分预处理后的字符串,过滤掉空元素,得到所有独立项。比如上述例子拆分后得到["3x²", "-2x", "5"]。
3. 逐个解析项的系数与次数
对每个项,按类型提取对应系数和次数:
- 常数项(不含
x):比如"5"、"-3",次数为0,系数为项本身的数值 - 一次项(无指数):比如
"x"、"-x"、"2x",次数为1,系数规则:- 项为
"x"时系数为1,"-x"时系数为-1,其他情况取x前的数字
- 项为
- 高次项(含指数):比如
"3x²"、"-4x³",拆分x前后部分:- 系数部分:
x前为空则系数为1,为"-"则系数为-1,否则取对应数字 - 次数部分:提取
^后的数字(兼容x^4或x4两种写法),确保次数不超过4
- 系数部分:
4. 合并系数到数组
初始化长度为5的数组(对应0到4次项,初始值为0),将每个项的系数加到对应索引位置,同类项会自动累加合并。
示例代码(Python)
def parse_polynomial(input_str): # 预处理字符串 s = input_str.replace(" ", "") if s.startswith("-"): s = "+" + s s = s.replace("-", "+-") # 拆分并过滤空项 terms = [term for term in s.split("+") if term] # 初始化系数数组(0-4次) coeffs = [0.0] * 5 for term in terms: if "x" not in term: # 处理常数项 coeffs[0] += float(term) else: # 拆分系数部分和x相关部分 coeff_part, x_part = term.split("x", 1) # 解析系数 if not coeff_part: coeff = 1.0 elif coeff_part == "-": coeff = -1.0 else: coeff = float(coeff_part) # 解析次数 if not x_part: degree = 1 else: degree_str = x_part.lstrip("^") degree = int(degree_str) if degree > 4: raise ValueError("多项式次数不能超过4") coeffs[degree] += coeff return coeffs # 交互测试 user_input = input("请输入四次及以下多项式:") try: coefficients = parse_polynomial(user_input) print("系数数组(索引0-4对应0次到4次项):", coefficients) except ValueError as e: print(e)
额外兼容提示
- 若要支持分数输入(如
"1/2x²"),可加入分数转浮点数的逻辑(比如用fractions模块) - 若需要兼容更宽松的输入格式(如
"x平方"),需额外添加字符串匹配逻辑,建议优先支持数字指数形式
内容的提问来源于stack exchange,提问作者KAZ999
相关产品推荐
相关产品推荐

