我试图用自己的方法制作一个简单的方程求解器来解决像(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)
这不是我对该计划的完整计划,我即将对其进行升级,但我发现这个程序并没有那么好用。当我输入等式时,程序不打印答案,也不打印任何错误 我需要了解这里有什么错误。
答案 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
您应该做的是为side1
和side2
的更改版本使用不同的临时变量。
修改的
您的代码段的其他问题:
最后一行应为print("x = %s" % (i+1))
,因为您在替换中使用了i+1
。否则,当使用x=11
解决方程式时,它将打印x=10
。
如果您不想担心何时需要i + 1
vs i
,则可以将您的范围调用改为range(1,1000)
- 这样就开始了i = 1
代替i = 0