Python 什么时候函数中不能使用None?

Python 什么时候函数中不能使用None?,python,Python,我正在尝试用python编写一个递归函数,它返回使用值为1、5、10、25的硬币(作为CS61A课程的一部分)对总计进行更改的方法数。 我正在使用此功能兑换硬币 def next_largest_coin(coin): if coin == 1: return 5 elif coin == 5: return 10 elif coin == 10: return 25 此函数输出的方式数 def count_coins(t

我正在尝试用python编写一个递归函数,它返回使用值为1、5、10、25的硬币(作为CS61A课程的一部分)对总计进行更改的方法数。 我正在使用此功能兑换硬币

def next_largest_coin(coin):
    if coin == 1:
        return 5
    elif coin == 5:
        return 10
    elif coin == 10:
        return 25
此函数输出的方式数

def count_coins(total):
    """Return the number of ways to make change for total using coins of value of 1, 5, 10, 25.
    >>> count_coins(15)
    6
    >>> count_coins(10)
    4
    >>> count_coins(20)
    9
    >>> count_coins(100) # How many ways to make change for a dollar?
    242
    """
    def helper(n, size):
        if n < 4:
            return 1
        elif n < 0 or size > n or size == None:
            return 0
        else:
            if size == 25:
                print(25)
            return helper(n - next_largest_coin(size), size) + helper(n, next_largest_coin(size))
    return helper(total, 1)
def count_硬币(总数):
“”“返回使用价值为1、5、10、25的硬币进行总计更改的方法数。
>>>清点硬币(15枚)
6.
>>>数硬币(10)
4.
>>>清点硬币(20枚)
9
>>>数硬币(100)#一美元有多少种兑换方法?
242
"""
def辅助程序(n,大小):
如果n<4:
返回1
elif n<0或size>n或size==无:
返回0
其他:
如果尺寸=25:
印刷品(25)
返回帮助者(n-下一个最大的硬币(大小)+帮助者(n,下一个最大的硬币(大小))
返回帮助器(总计1个)
我的代码适用于前三个测试用例,但不适用于100个测试用例。我目前得出的结论是,这一定是由于“25”硬币试图递增,因此返回了一个“无”值,但我已尝试将该条件包括在我的基本情况中(因此,size==None)


有什么想法吗?我是如何使用None的问题吗?

函数返回
None
,因为它实际上不返回任何内容(如果参数为
100
,则函数到达no return语句)

您可以添加
else
语句来处理
未处理的所有其他情况,如果
elif
,查看您的代码:

def下一个最大的硬币(硬币):
如果硬币=1:
返回5
埃利夫硬币==5:
返回10
埃利夫硬币==10:
返回25
如果硬币是2、6、9、11或任何其他不等于1、5或10的数字,此函数将返回什么? 您可以按如下方式重写代码:

def下一个最大的硬币(硬币):
如果硬币=1:
返回5
埃利夫硬币==5:
返回10
埃利夫硬币==10:
返回25
其他:
raise value ERROR(“参数coin的值%d无效;必须为1、5或10”%coin)

使用此代码,如果传入的值不等于1、5和10,您将得到一个错误。

请参见下面我的代码,了解身体中的helper函数,它通过了测试,我相信这确实是一个棘手的问题

def helper(m,n):        
    if m == 0:
        return 1
    
    elif m < 0:
        return 0

    elif n == 25:
        with_n = helper(m-n,n)            
        return with_n 
                 
    else:    
        with_n = helper(m-n,n)
        without_n = helper(m,next_largest_coin(n))
        return with_n + without_n
def助手(m,n):
如果m==0:
返回1
elif m<0:
返回0
elif n==25:
带_n=辅助对象(m-n,n)
随信返回
其他:
带_n=辅助对象(m-n,n)
没有辅币n=辅币(m,下一个最大的辅币(n))
带\n+返回,不带\n

“但不适用于100”-您能再详细一点吗?什么特别不起作用?函数是否返回了错误的值?这会引起错误吗?等等。如果这三个条件都不是真的,函数应该返回什么?只是一个旁注-这种类型的问题使用DP-动态规划比递归更有效,因为后者有太多的重复计算。您正在打印25而不是返回(或者更确切地说,您希望为25返回的任何值).请接受一个答案@Zenghoa感谢!关于如何在不改变“下一枚硬币”功能的情况下解决这个问题,有什么建议吗?当硬币从25增加到零时,“size==None”语句应该被捕获?