gpt4 book ai didi

python - Python中的递归: what am I doing wrong?

转载 作者:行者123 更新时间:2023-12-01 05:51:21 32 4
gpt4 key购买 nike

我正在用 python 编写我的第一个程序,它必须模拟粒子(两种气体)的混合。我不知道我这个功能做错了什么。我不希望颗粒离开某些区域,即容器的壁。我使用 VPython。

def poruszanie(lista,pozycja,numCell):
flaga = 0
pozycjaTmp = (pozycja[0]+choice([-1,0,1]),pozycja[1]+choice([-1,0,1]),0)
for i in range( 0, len(lista) ):
if pozycjaTmp==lista[i].pos:
flaga=1

if flaga==1:
return poruszanie(lista,(pozycja[0]+choice([-1,0,1]),pozycja[1]+choice([-1,0,1]),0),numCell)
elif pozycjaTmp[0]==0 or pozycjaTmp[0]==numCell or pozycjaTmp[0]==-numCell or pozycjaTmp[1]==numCell or pozycjaTmp[1]==-numCell:
return poruszanie(lista,(pozycja[0]+choice([-1,0,1]),pozycja[1]+choice([-1,0,1]),0),numCell)

return pozycjaTmp

poruszanie - 函数名称

pozycja - 球体的位置

0,numCell,-numCell - 容器的边界(0是开始时分隔气体的中间墙)

所有这些都在 x,y 平面上,并且 z 始终为 0这就是我开始使用这个功能的地方:

while 1:
rate(20)
for i in range(0,len(self.listBalls)):
self.listBalls[i].pos=poruszanie(self.listBalls,self.listBalls[i].pos,self.numCell)

最佳答案

我认为你每次都调用完全相同并且没有正确返回:

if flaga==1:
return poruszanie(lista,(pozycja[0]+choice([-1,0,1]),pozycja[1]+choice([-1,0,1]),0),numCell)
else:
if pozycjaTmp[0]==0 or pozycjaTmp[0]==numCell or pozycjaTmp[0]==-numCell:
poruszanie(lista,(pozycja[0]+choice([-1,0,1]),pozycja[1]+choice([-1,0,1]),0),numCell)
elif pozycjaTmp[1]==numCell or pozycjaTmp[1]==-numCell:
poruszanie(lista,(pozycja[0]+choice([-1,0,1]),pozycja[1]+choice([-1,0,1]),0),numCell)

从第一个调用开始,您会返回,但从接下来的两个调用中,您不会返回。此外,您传递的参数看起来完全相同。

编辑

考虑编辑和新错误(已达到最大深度)。

该错误意味着您的函数的递归范围超出了 python 允许的范围。

我仍然不确定你在做什么,但你需要一个基本条件,无论什么递归都会停止。如果每次调用函数时都满足 if ... elif ... 语句的任一分支,则递归将永远不会停止。您需要一些总是会损坏的东西,最好应该将其放在 if .. elif ... block 之前。

关于python - Python中的递归: what am I doing wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14221641/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com