我正在试着自己做一个简单的方程解算器来解决像(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)这并不是我的完整计划,我正要升级它,但我发现这个程序运行得不是很好。当我输入一个等式时,程序不会打印答案,也不会打印任何错误,我需要了解这里的bug是什么。
发布于 2016-07-02 02:23:09
在您的循环中,每次调用:
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为ex求解方程时,它将打印x=10。
如果您不想担心什么时候需要i + 1和i,那么只需将范围调用改为range(1,1000) --这样它就以i = 1而不是i = 0开头
https://stackoverflow.com/questions/38151708
复制相似问题