鱼C论坛

 找回密码
 立即注册
查看: 2814|回复: 4

看看代码

[复制链接]
发表于 2023-4-3 15:59:57 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
输入
一个一元一次方程。

只包含整数、小写字母及 +、-、= 这三个数学符号(当然,符号“-”既可作减号,也可作负号)。

方程中并没有括号,也没有除号,方程中的字母表示未知数。

输出
解方程的结果(精确至小数点后三位)。

  1. def solve(eq: object, var: object = 'a') -> object:
  2.     eq1 = eq.replace("=", "-(")+")"
  3.     eq1 = eq1.replace("a", "*a")
  4.     eq1 = eq1.replace("+*a", "+a")
  5.     eq1 = eq1.replace("-*a", "-a")
  6.     eq1 = eq1.replace("(*a", "(a")
  7.     #print(eq1)
  8.     c = eval(eq1, {var: 1j})
  9.     return -c.real/c.imag
  10. test = input()
  11. test = test.replace(" ", "")
  12. jg=round(solve(test),3)

  13. print('a=','%.3f'%jg,sep='')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-3 16:06:28 | 显示全部楼层
由于该方程只包含一元一次项,因此我们可以通过移项和系数化为 $ax+b=0$ 的形式,进而解得未知数的值。

以下是一个示例代码:

  1. def solve(eq: str, var: str = 'a') -> float:
  2.     # 将等式转化为 ax+b=0 的形式
  3.     a, b = 0, 0
  4.     lhs, rhs = eq.split('=')
  5.     for term in lhs.split('+'):
  6.         if var in term:
  7.             coef = term.replace(var, '')
  8.             if coef in ['', '+']:
  9.                 coef += '1'
  10.             a += int(coef)
  11.         else:
  12.             b -= int(term)
  13.     for term in rhs.split('+'):
  14.         if var in term:
  15.             coef = term.replace(var, '')
  16.             if coef in ['', '+']:
  17.                 coef += '1'
  18.             a -= int(coef)
  19.         else:
  20.             b += int(term)
  21.     # 解一元一次方程
  22.     return round(-b/a, 3)

  23. test = input()
  24. test = test.replace(" ", "")
  25. jg = solve(test)

  26. print(f'a={jg:.3f}')
复制代码


我们先将输入的等式转化为 $ax+b=0$ 的形式,然后解一元一次方程得到 $a$ 的值,最后输出结果。

需要注意的是,我们在输出时使用了 f-string 格式化字符串的语法。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-3 18:28:36 | 显示全部楼层
isdkz 发表于 2023-4-3 16:06
由于该方程只包含一元一次项,因此我们可以通过移项和系数化为 $ax+b=0$ 的形式,进而解得未知数的值。

...

运行不了这个式子 6a-5+1=2-2a
ValueError: invalid literal for int() with base 10: '6-5'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-3 21:33:23 | 显示全部楼层
isdkz 发表于 2023-4-3 16:06
由于该方程只包含一元一次项,因此我们可以通过移项和系数化为 $ax+b=0$ 的形式,进而解得未知数的值。

...

能不能说一下我代码的错误呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-2 14:21:32 | 显示全部楼层
对于这个问题,我们需要将输入的一元一次方程进行解析和求解。

首先,我们需要提取该方程中的系数和常数项,通过对系数进行运算来求出未知数的值。因为题目中要求结果精确到小数点后三位,所以我们需要使用浮点数来表示系数和常数项,而不是整型。

以下是一个 Python 代码示例,可以解决这个问题:


  1. # 从用户输入中读取一元一次方程
  2. equation = input()

  3. # 将方程转化为 Ax + B = C 的形式
  4. if "=" in equation:
  5.     left, right = equation.split("=")
  6.     equation = left + "-(" + right + ")"

  7. # 提取系数和常数项,保存到相应的变量中
  8. coefficients = {"x": 0, "constant": 0}
  9. buffer = ""
  10. sign = 1
  11. for char in equation:
  12.     if char == "+":
  13.         if buffer != "":
  14.             # 处理加号左边的系数或常数项
  15.             if "x" in buffer:
  16.                 if buffer[:-1] == "":
  17.                     coefficients["x"] += sign
  18.                 else:
  19.                     coefficients["x"] += sign * float(buffer[:-1])
  20.             else:
  21.                 coefficients["constant"] += sign * float(buffer)
  22.         buffer = ""
  23.         sign = 1
  24.     elif char == "-":
  25.         if buffer != "":
  26.             # 处理减号左边的系数或常数项
  27.             if "x" in buffer:
  28.                 if buffer[:-1] == "":
  29.                     coefficients["x"] -= sign
  30.                 else:
  31.                     coefficients["x"] -= sign * float(buffer[:-1])
  32.             else:
  33.                 coefficients["constant"] -= sign * float(buffer)
  34.         buffer = ""
  35.         sign = -1
  36.     else:
  37.         # 将数字或字母加入缓冲区
  38.         buffer += char

  39. # 处理最后一个系数或常数项
  40. if buffer != "":
  41.     if "x" in buffer:
  42.         if buffer[:-1] == "":
  43.             coefficients["x"] += sign
  44.         else:
  45.             coefficients["x"] += sign * float(buffer[:-1])

  46.     else:
  47.         coefficients["constant"] += sign * float(buffer)

  48. # 计算并输出未知数 x 的值
  49. x = -coefficients["constant"] / coefficients["x"]
  50. print("{:.3f}".format(x))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-24 20:09

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表