试图修复我的方程式

时间:2016-07-01 18:17:52

标签: 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)

这不是我对该计划的完整计划,我即将对其进行升级,但我发现这个程序并没有那么好用。当我输入等式时,程序不打印答案,也不打印任何错误 我需要了解这里有什么错误。

1 个答案:

答案 0 :(得分:2)

在你的循环中,每次你打电话:

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解决方程式时,它将打印x=10

如果您不想担心何时需要i + 1 vs i,则可以将您的范围调用改为range(1,1000) - 这样就开始了i = 1代替i = 0