爱意随风起9306 发表于 2023-4-3 15:59:57

看看代码

输入
一个一元一次方程。

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

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

输出
解方程的结果(精确至小数点后三位)。
def solve(eq: object, var: object = 'a') -> object:
    eq1 = eq.replace("=", "-(")+")"
    eq1 = eq1.replace("a", "*a")
    eq1 = eq1.replace("+*a", "+a")
    eq1 = eq1.replace("-*a", "-a")
    eq1 = eq1.replace("(*a", "(a")
    #print(eq1)
    c = eval(eq1, {var: 1j})
    return -c.real/c.imag
test = input()
test = test.replace(" ", "")
jg=round(solve(test),3)

print('a=','%.3f'%jg,sep='')

isdkz 发表于 2023-4-3 16:06:28

由于该方程只包含一元一次项,因此我们可以通过移项和系数化为 $ax+b=0$ 的形式,进而解得未知数的值。

以下是一个示例代码:

def solve(eq: str, var: str = 'a') -> float:
    # 将等式转化为 ax+b=0 的形式
    a, b = 0, 0
    lhs, rhs = eq.split('=')
    for term in lhs.split('+'):
      if var in term:
            coef = term.replace(var, '')
            if coef in ['', '+']:
                coef += '1'
            a += int(coef)
      else:
            b -= int(term)
    for term in rhs.split('+'):
      if var in term:
            coef = term.replace(var, '')
            if coef in ['', '+']:
                coef += '1'
            a -= int(coef)
      else:
            b += int(term)
    # 解一元一次方程
    return round(-b/a, 3)

test = input()
test = test.replace(" ", "")
jg = solve(test)

print(f'a={jg:.3f}')


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

需要注意的是,我们在输出时使用了 f-string 格式化字符串的语法。

爱意随风起9306 发表于 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'

爱意随风起9306 发表于 2023-4-3 21:33:23

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

...

能不能说一下我代码的错误呢

sfqxx 发表于 2023-5-2 14:21:32

对于这个问题,我们需要将输入的一元一次方程进行解析和求解。

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

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


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

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

# 提取系数和常数项,保存到相应的变量中
coefficients = {"x": 0, "constant": 0}
buffer = ""
sign = 1
for char in equation:
    if char == "+":
      if buffer != "":
            # 处理加号左边的系数或常数项
            if "x" in buffer:
                if buffer[:-1] == "":
                  coefficients["x"] += sign
                else:
                  coefficients["x"] += sign * float(buffer[:-1])
            else:
                coefficients["constant"] += sign * float(buffer)
      buffer = ""
      sign = 1
    elif char == "-":
      if buffer != "":
            # 处理减号左边的系数或常数项
            if "x" in buffer:
                if buffer[:-1] == "":
                  coefficients["x"] -= sign
                else:
                  coefficients["x"] -= sign * float(buffer[:-1])
            else:
                coefficients["constant"] -= sign * float(buffer)
      buffer = ""
      sign = -1
    else:
      # 将数字或字母加入缓冲区
      buffer += char

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

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

# 计算并输出未知数 x 的值
x = -coefficients["constant"] / coefficients["x"]
print("{:.3f}".format(x))
页: [1]
查看完整版本: 看看代码