试图修正我的方程程序

2024-05-11 03:33:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着自己做一个简单的方程求解器,可以解决(3*x-4=7+2*x)这样的问题。用户将输入一个方程式,程序将方程式分成两部分,在一个循环中,它将用相同的数字替换两边的x。程序将检查等式的两边是否相等,并打印答案。以下是脚本:

equation=input("Write an equation (variable is x): ")

side1 = equation[:equation.index("=")]

side2 = equation[equation.index("=")+1:]

for i in range(1000):
    side1=side1.replace("x", str(i+1))
    side2=side2.replace("x", str(i+1))

    if eval(side1)==eval(side2):
        print("x = %s"%i)

这不是我的完整计划的程序,我正要升级它,但我发现这个程序不工作这么好。当我输入一个方程式时,程序不会打印答案,也不会出现任何错误 我要知道这里有什么漏洞


Tags: 答案用户程序脚本indexeval数字replace
1条回答
网友
1楼 · 发布于 2024-05-11 03:33:42

在循环中,每次调用:

side1=side1.replace("x", str(i+1))
side2=side2.replace("x", str(i+1))

您正在覆盖原始的边变量。所以下次循环运行时,当它替换字符串中的“x”时,就不再有任何“x”字符了。替换将只发生一次

例如

# Beginning of Iter 1:
side1 = 3*x-4

# Beginning of Iter 2:
side1 = 3*1-4

# no longer any 'x' left to replace

您应该做的是,为更改后的side1side2版本使用不同的临时变量


编辑

代码片段的其他问题:

最后一行应该是print("x = %s" % (i+1)),因为您在替换中使用了i+1。否则,当使用x=11为ex求解方程时,它将打印x=10

相反,如果您不想担心何时需要i + 1i,您可以将range调用改为range(1,1000),这样它就以i = 1而不是i = 0开头了

相关问题 更多 >