曲面多边形的递归错误

2024-05-16 14:59:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个递归错误,我认为这是非常基本的,但我没有看到问题,尽管我认为它处于停止状态。 基本上,我有一个列表,每个列表是一个楼层,大约有30个点。我在做一个递归,每个楼层做一个曲面多边形,然后在另一个函数中用每个曲面多边形做一个拉伸

下面是代码和错误信息,他让我做了75层我想做的,但一旦楼层列表是空的,他就会出错

    def pisos_generico(list_lists):
        if list_lists == []:
            pass
        else:
            return surface_polygon (list_lists[0]) + pisos_generico(list_lists[1:])

    def pisos (list_lists):
        return extrusion(pisos_generico (list_lists)

这是错误代码:

 Traceback (most recent call last):
      File "D:\Universidade\3o Ano\PCA\Projeto\First Try Base Planta 2.py", line 
    547, in <module>
        pisos (xy(0,0), 1.41, 0.02, 75)
      File "D:\Universidade\3o Ano\PCA\Projeto\First Try Base Planta 2.py", line 
    529, in pisos
        return extrusion(pisos_generico (piso_pisos_rodados (lista, n_andares, p, a, a_torcao)), vz(0.3))
      File "D:\Universidade\3o Ano\PCA\Projeto\First Try Base Planta 2.py", line 503, in pisos_generico
        return surface_polygon (list_lists[0]) + pisos_generico(list_lists[1:])
      File "D:\Universidade\3o Ano\PCA\Projeto\First Try Base Planta 2.py", line 503, in pisos_generico
        return surface_polygon (list_lists[0]) + pisos_generico(list_lists[1:])
      File "D:\Universidade\3o Ano\PCA\Projeto\First Try Base Planta 2.py", line 503, in pisos_generico
        return surface_polygon (list_lists[0]) + pisos_generico(list_lists[1:])
       [Previous line repeated 72 more times]
TypeError: unsupported operand type(s) for +: 'surface_polygon' and 'NoneType'

更新版本:

def pisos (p, a, a_torcao, n_andares):
     return pisos_generico (lista_listas)

def pisos_generico(list_lists):
    if list_lists == []:
        []    
    else:
        return [extrusion(surface_polygon (list_lists[0]), vz(0.3))] + pisos_generico(list_lists[1:])

新的错误消息与旧消息非常相似:

Traceback (most recent call last):
  File "D:\Universidade\3o Ano\PCA\Projeto\First Try Base Planta 2.py", line 
548, in <module>
    pisos (xy(0,0), 1.41, 0.02, 75)
  File "D:\Universidade\3o Ano\PCA\Projeto\First Try Base Planta 2.py", line 
530, in pisos
    return pisos_generico (lista_listas)
  File "D:\Universidade\3o Ano\PCA\Projeto\First Try Base Planta 2.py", line 
503, in pisos_generico
    return [extrusion(surface_polygon (list_lists[0]), vz(0.3))] + 
pisos_generico(list_lists[1:])
  File "D:\Universidade\3o Ano\PCA\Projeto\First Try Base Planta 2.py", line 
503, in pisos_generico
    return [extrusion(surface_polygon (list_lists[0]), vz(0.3))] + 
pisos_generico(list_lists[1:])
  File "D:\Universidade\3o Ano\PCA\Projeto\First Try Base Planta 2.py", line 
503, in pisos_generico
    return [extrusion(surface_polygon (list_lists[0]), vz(0.3))] + 
pisos_generico(list_lists[1:])
  [Previous line repeated 72 more times]
TypeError: can only concatenate list (not "NoneType") to list

非常感谢你的帮助


Tags: basereturnlinelistslistfilefirsttry
1条回答
网友
1楼 · 发布于 2024-05-16 14:59:39

如果返回noting,则函数隐式返回None。这种情况发生在

def pisos_generico(list_lists):
    if list_lists == []:
        pass
    else:
        return surface_polygon (list_lists[0]) + pisos_generico(list_lists[1:])
        #                                                        ^^^^^^^^^^^^
        #                                                     empty => returns None

   # exactly here on list_lists == [] is None returned

您可能需要以下内容:

def pisos_generico(list_lists):
    if list_lists == []:                          # you can delete the ``... == []: pass``
        pass                                      # part and make the next one
    elif len(list_lists) == 1:                    # a normal if instead of elif
        return surface_polygon (list_lists[0])    # just make sure you do not call it with    
    else:                                         # an empty list to start with
        return surface_polygon (list_lists[0]) + pisos_generico(list_lists[1:])

相关问题 更多 >