Python中的内存错误或返回的列表为空
第一个函数计算湖泊的深度,并将体积作为参数。在第二个例子中,我必须传递一个卷和一个时间增量(我必须增量),它返回两个列表。第一个列表:当湖泊为空时,时间增量和此列表中的最后一个时间/元素对应于体积=0。第二个列表:每次对应的深度。例如,对于dt=1000s秒,z(深度)=10m,对于dt=150000s,dt=0m。对不起,这是太多的流体力学,我只想让它尽可能清楚。 当我调用函数abfluss时,当V0较小或较大时,它返回空列表,当V0较大时,它显示内存错误。我尝试了许多不同的vo和dt,我从来没有一个填充列表,只有当我在没有while循环的情况下尝试它时才会发生(然后每个列表中有一个元素)。有什么建议吗Python中的内存错误或返回的列表为空,python,Python,第一个函数计算湖泊的深度,并将体积作为参数。在第二个例子中,我必须传递一个卷和一个时间增量(我必须增量),它返回两个列表。第一个列表:当湖泊为空时,时间增量和此列表中的最后一个时间/元素对应于体积=0。第二个列表:每次对应的深度。例如,对于dt=1000s秒,z(深度)=10m,对于dt=150000s,dt=0m。对不起,这是太多的流体力学,我只想让它尽可能清楚。 当我调用函数abfluss时,当V0较小或较大时,它返回空列表,当V0较大时,它显示内存错误。我尝试了许多不同的vo和dt,我从来
from numpy import pi
p = 0.036
def tiefe(V):
a = (3*V*p**2)/pi
z = a**(1/3)
return z
U_unten = 35.56
A = 2
def abfluss(V0, dt):
V_geblieben = V0 - (U_unten*A*dt)/V0
neu_tiefe = tiefe(V_geblieben)
t_list = []
Z_list = []
while V_geblieben >=0:
dt = dt+100
t_list.append(dt)
Z_list.append(neu_tiefe)
return t_list, Z_list
print(abfluss(50000,3600))
在循环内重新计算V_geblieben,它就工作了
from math import pi
p = 0.036
def tiefe(V):
a = (3 * V * p ** 2) / pi
z = a ** (1 / 3)
return z
U_unten = 35.56
A = 2
def abfluss(V0, dt):
V_geblieben = V0 - (U_unten * A * dt) / V0
neu_tiefe = tiefe(V_geblieben)
t_list = []
Z_list = []
while V_geblieben >= 0:
dt = dt + 100
t_list.append(dt)
Z_list.append(neu_tiefe)
V_geblieben = V0 - (U_unten * A * dt) / V0
print(V_geblieben)
return t_list, Z_list
print(abfluss(50000, 3600))
这将从函数中返回两个列表。我对代码做了很多修改,如果您对代码有任何疑问,请告诉我
##This program outputs the depth of a draining lake at different time intervals
##Imports
from math import *
##Function
def abfluss(V0,dt):##functon that takes the intial volume of the lake and a time interval
t_list = []
Z_list = []
while V0 >=0:
z= ((3*V0*0.036**2)/pi)**(1/3)
t_list.append(dt)
Z_list.append(z)
U_unten = 35.56
V0 = V0 - (U_unten*2*dt)/V0
dt = dt+0.01
return t_list, Z_list
##Main Program
V0 = float(input('Please enter an initail volume for the lake:')) ##Take initial lake volume from user in *define units for volume*
dt = float(input('Please enter a time interval for dt:'))
res_abfluss = abfluss(V0,dt) ##passes the user inputs to the finction
print(res_abfluss) ##prints the two resulting of the lists of the fucniton
你正在使用的pi值是多少?我从numpy import pi中得到它,我认为这不是问题的根源,因为函数Tiefe返回正确的值。如果列表可能会超过可用内存,请不要将其存储在内存中。也许可以将值写入文件或其他内容?嗨,谢谢。这是大学的家庭作业,函数必须返回两个列表。在上面的示例中,V_geblieben值不会改变,因此循环一直持续到资源被消耗。这是一个新的(Python 3.8+)赋值表达式可以方便使用的示例,以消除代码重复。您可以在(v_geblieben:=V0-(U_unten*A*dt)/V0)>=0:时执行
,它在将值与零进行比较之前计算值。你将不再需要在循环结束时重复计算。好提示,谢谢,实际上你可以完全摆脱V_gebliebenwhile(V0-(U_unten*A*dt)/V0)>=0:
您好,非常感谢。实际上,这是一份大学学期论文,我们需要单独实现第一个功能(Tiefe)。