Python函数输出值的总和

-3 投票
1 回答
5256 浏览
提问于 2025-04-17 12:15

我在一个叫做 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

撰写回答