如何使用sympy在python中创建重复循环,而不更改循环中的一个变量

p4rjhz4m  于 2022-11-28  发布在  Python
关注(0)|答案(1)|浏览(202)

所以基本上我遇到了一个问题,我已经使我的循环,但由于其中一个变量是在实际的赋值之前定义的,代码停止工作。the code。另一件事是,我正在Spyder中工作,我不知道为什么,但如果我试图编码,使程序收集变量开始(这对于此目的是必不可少的),程序遇到了一个内部问题。关于如何在Spyder中请求用户输入,有什么想法吗?提前感谢大家
基本上,我想做的是对函数进行微分,然后用这些导数创建一个麦克劳林级数。当实际误差((r-j)/r)小于停止变量s时,我想让程序停止并显示结果,但我不知道哪里出了问题。我想做的第二件事是了解如何在程序中从用户那里获得输入。

sdnqo3pr

sdnqo3pr1#

所以,这里是,在文本形式,你的代码(对不起,剽窃的论点是无效的在这里)

q = sympy.Function('q')
q = sympy.diff(f)

def main():
    a = sympy.Function('a')
    a = sympy.diff(q)
    j = sympy.function
    j = 1+(1/sympy.factorial(count))*q
    r = sympy.Function('r')
    r = j+(1/sympy.factorial(count+1))*a
    if ((r-j)/r)>s:
        count = count + 1
        q = sympy.diff(a)
        j = r+(1/sympy.factorial(count))*q
        r = j+(1/sympy.factorial(count+1))*a
        main()
    else:
        print(f"Answer{r}")

在一个明显非常混乱的代码中间,甚至更混乱的情况下,与“剽窃”的东西(别担心,如果你有一个工作的代码在您的努力结束,没有办法看起来足够相似,你的原始代码被检测为剽窃,因为我已经张贴在这里:D)实际上有一个很好的问题,我记得我刚才我不得不挠我的头,以了解发生了什么在类似的情况。
这里的问题是,你不能先在main函数中计算sympy.diff(q),然后再在同一个函数中给q赋值。由于后面的q = sympy.diff(a)行,q必须是一个局部变量(除非你另有说明,见后面)。这是python的默认行为:在函数中赋值变量是局部变量。
但是因为你之前阅读过这个变量,在上一行(触发错误的那一行)a = sympy.diff(q)中,那么python就有问题了:局部变量a还不存在。
如果没有未来的q = sympy.diff(a)qmain中将是“只读”的,python将完成您可能期望的操作:读取全局变量q
所以,你真实的的问题不是那条线,而是q = sympy.diff(a)线。
因为即使没有当前错误,该行也不会执行您期望它执行的操作。您可能希望它更改q,以便在随后的main递归调用中,q从现在开始具有这个新值。不要创建本地值q,并使main的下一个调用以全局值q重新开始。
这里你有几个选择。一个是声明q有全局变量。只要在main的开头加上global q行,q就成了全局变量。
一种更简洁的方法是将q作为参数传递给main。
请注意,使用count时可能会遇到同样的问题。您还应该将其声明为全局的,或者更简洁地将其传递给main。
还要注意,这只解决了语法错误(当然,也不是所有的错误。例如,j=sympy.function都是无意义的)。但这里还有许多其他错误。最不严重的是,您有一个奇怪的习惯,即创建一个Function,然后立即用另一个函数或表达式覆盖它,将其删除。

相关问题