鱼C论坛

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

看看代码

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

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

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

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

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

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

输出
解方程的结果(精确至小数点后三位)。
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='')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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 格式化字符串的语法。
想知道小甲鱼最近在做啥?请访问 -> 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'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

...

能不能说一下我代码的错误呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-28 18:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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