函数返回'无'

时间:2014-04-14 15:28:44

标签: python

我正在使用Python解决问题。以下是我要解释的问题的相关代码:

def no_to_words(n):
    num = str(n)
    s = ""
    if(len(num) == 3):
        hunds = n/100
        ten = n%100
        tens = ten/10
        units = ten%10
        if(n == 100):
            return "one hundred"

        if(hunds == 1):                        
            s = s + "one hundred and"
        elif(hunds == 2):
            s = s + "two hundred and"
        elif(hunds == 3):
            s = s + "three hundred and"
        elif(hunds == 4):
            s = s + "four hundred and"
        elif(hunds == 5):
            s = s + "five hundred and"
        elif(hunds == 6):
            s = s + "six hundred and"
        elif(hunds == 7):
            s = s + "seven hundred and"
        elif(hunds == 8):
            s = s + "eight hundred and"
        else:
            s = s + "nine hundred and"

        def final(t):
            ans = t
            return ans
        if(ten == 11):                         
            s = s + " eleven"
            final(s)

print no_to_words(111)

现在,这个函数将一个三位数字转换成它的字母等效字符串(我还没有在这里发布整个代码)。现在,如果有一个类似于' 111'是输入,然后是' ten'的值。将是11.这意味着,新的价值是'现在将是一百一十一'因此,为了返回此值并阻止程序进一步检查'单位'价值(这里没有包含这些代码),我试着打电话给最后一个'功能,用'作为参数。那个'最后的'函数的作用是返回'的值。

然而, 111'作为输入,我得到了没有'作为我的输出。我的代码出了什么问题?

4 个答案:

答案 0 :(得分:7)

虽然它看起来可能正确,但实际上并没有为每一个结果return做好准备。

尽管111在最后(111 / 10 == 11if ten == 11)符合条件,但您实际上并未为其返回值。

要解决此问题,您需要执行以下操作:

return final(s)  # If you don't return it here, you are just throwing it away.

return该分支的东西。虽然目前您正在调用final并返回一个值,但它处于更深的范围内(对调用者只有return)。要从整体函数返回,如果有意义,则需要“返回返回的值”。


此外,您获得None的原因是因为没有返回值时,它等同于返回None,因此这是您的输出。

答案 1 :(得分:4)

您忽略final()函数的输出:

if(ten == 11):                         
    s = s + " eleven"
    final(s)

仅仅因为final()返回某些东西并不意味着你的外部功能也会返回。嵌套函数与任何其他函数一样,它只将返回给调用者

答案 2 :(得分:4)

当您致电final()时,它会返回一个值,但您不会返回该值。

return final(s)

或只是

return s

答案 3 :(得分:3)

111 % 10 = 11

if ten == 11:分支机构中,您不会返回值。您需要return final(s)

在python中也不需要围绕if语句的parens,你通常应该删除它们。