我在名为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)
通过for循环创建某种几何对象并为它们分配一些属性(HULL,BODY)。
我正在使用的应用程序允许我通过以下方式输出每个创建的主体的音量:
rocks.volume
所以,如果我写:
print rocks.volume
我获得了所有卷的打印列表。
我需要对这些值求和,我该怎么做?如果我使用:
print sum(rocks.volume)
我得float
对象不可迭代。
所以我认为我需要创建一个包含所有这些输出值的唯一列表,然后用普通的sum()
命令对它们进行总结。
答案 0 :(得分:3)
假设你有一张包含所有岩石的清单,你可以这样做:
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