函数递归后返回None

2024-09-30 10:33:36 发布

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

我已经写了一个函数来确定显示器的高度,给定宽度和格式。如果函数在尝试一行高度值时找不到与给定宽度和格式匹配的值,则该函数将递归操作。如果函数在进入递归之前找到匹配项,那么它就可以工作,但之后它总是返回none,而不是匹配的值对。我很不明白为什么会这样。我是不是缺少了一些原则?你知道吗

def getDisplayDimensions(width,FormatX,FormatY):
    Format = float(FormatX)/FormatY
    if FormatX < FormatY:
        return "illegal format."
    for height in range(1,int(width)+1):
        if float(width)/height == float(Format):
            return width,height
            break
        elif height == width:
            getDisplayDimensions(float(width)-1,FormatX,FormatY)

# example call:
print getDisplayDimensions(801,16,9)

Tags: 函数noneformatreturnif宽度高度格式
1条回答
网友
1楼 · 发布于 2024-09-30 10:33:36

您实际上并没有返回递归调用结果:

elif height == width:
    getDisplayDimensions(float(width)-1,FormatX,FormatY)

添加return

elif height == width:
    return getDisplayDimensions(float(width)-1,FormatX,FormatY)

如果没有return,outer调用将结束并返回默认的None。你知道吗

演示:

>>> def getDisplayDimensions(width,FormatX,FormatY):
...     Format = float(FormatX)/FormatY
...     if FormatX < FormatY:
...         return "illegal format."
...     for height in range(1,int(width)+1):
...         if float(width)/height == float(Format):
...             return width,height
...             break
...         elif height == width:
...             return getDisplayDimensions(float(width)-1,FormatX,FormatY)
... 
>>> print getDisplayDimensions(801,16,9)
(800.0, 450)

相关问题 更多 >

    热门问题