首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试着修复我的方程式程序

试着修复我的方程式程序
EN

Stack Overflow用户
提问于 2016-07-02 02:17:52
回答 1查看 44关注 0票数 0

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

代码语言:javascript
复制
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是什么。

EN

回答 1

Stack Overflow用户

发布于 2016-07-02 02:23:09

在您的循环中,每次调用:

代码语言:javascript
复制
side1=side1.replace("x", str(i+1))
side2=side2.replace("x", str(i+1))

您正在覆盖原始的辅助变量。因此,下一次循环运行时,当它替换字符串中的'x‘时,将不再有任何'x’字符。替换将恰好发生一次。

例如。

代码语言:javascript
复制
# 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(1,1000) --这样它就以i = 1而不是i = 0开头

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38151708

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档