Python函数输出值的总和
我在一个叫做 Solfec
的Python应用程序中有一个函数:
n0 = 330
n1 = 1027
n2 = 1201
n3 = 1023
def make_rock (x, y, z, r, kind, material, solfec):
m = randint (8, 64)
points = [ ]
for n in range (m):
points.append (x + r * (1.0 - random()))
points.append (y + r * (1.0 - random()))
points.append (z + r * (1.0 - random()))
hull = HULL (points, 1, 1)
rocks = BODY (solfec, kind, hull, material)
SURFACE_MATERIAL (solfec, model = 'SIGNORINI_COULOMB', friction = 0.5)
bulk = BULK_MATERIAL (solfec, 'KIRCHHOFF', young = 1.5E5, poisson = 0.25, density = 2.6E-6)
# choose the rock radius(r,r1,r2,r3):
r = 16
r1 = 13
r2 = 11
r3 = 10
aint = int(w - 10)
bint = int(d - 10)
cint0 = int(p*n0/16)
cint1 = int(p*n1/16)
cint2 = int(p*n2/16)
cint3 = int(p*n3/16)
for a in range (10, aint, 30):
for b in range (10 , bint , 30):
for c in range (20 , 20 + cint0, p):
make_rock (a, b, c, r, 'RIGID', bulk, solfec)
for a1 in range (10, aint, 30):
for b1 in range (10, bint, 30):
for c1 in range (50, 50 + cint1, p):
make_rock (a1, b1, c1, r1, 'RIGID', bulk, solfec)
for a2 in range (10, aint, 30):
for b2 in range (10, bint, 30):
for c2 in range (40, 40 + cint2, p):
make_rock (a2, b2, c2, r2, 'RIGID', bulk, solfec)
for a3 in range (10, aint, 30):
for b3 in range (10, bint, 30):
for c3 in range (30, 30 + cint3, p):
make_rock (a3, b3, c3, r3, 'RIGID', bulk, solfec)
这个函数会创建一些几何形状的对象,并通过一个循环给它们分配一些属性(比如HULL和BODY)。
我使用的这个应用程序可以让我输出每个创建的物体的体积,方法是:
rocks.volume
所以如果我写:
print rocks.volume
我就能得到一个打印出来的所有体积的列表。
我需要把这些值加起来,我该怎么做呢?如果我用:
print sum(rocks.volume)
我会得到一个错误提示,内容是 float
对象不可迭代。
所以我想我需要先创建一个包含所有这些输出值的唯一列表,然后再用普通的 sum()
命令把它们加起来。
1 个回答
4
假设你有一个地方存放着所有的岩石列表,你可以这样做:
sum((rock.volume for rock in rocks_list))
如果没有的话,我们需要更多关于这个方法的代码信息(比如,它返回什么,在哪里被调用)以及你希望在哪里计算这个总和,计算的频率是多少。
我会根据你的评论来修改我的回答,但如果你能直接修改你的问题,提供完整的make_rock方法的代码和它被调用的地方,那会简单很多。现在,如果你只需要体积的总和,你可以这样做:
sum_v = 0
#These are your for loops
for a in ...
for b in ...
for c in ...
sum_v += make_rock(a, b, c ...)
最后在make_rock的结尾,确保你有:
return rocks.volume