我最近学习了高阶函数。我试图使用高阶函数编写一些代码,但被卡住了

时间:2019-09-04 00:35:26

标签: python

编写一个函数,该函数接受一个数字并确定数字是否包含两个相邻的8

def double_eights(n):
    """Return true if n has two eights in a row.
    >>> double_eights(8)
    False
    >>> double_eights(88)
    True
    >>> double_eights(2882)
    True
    >>> double_eights(880088)
    True
    >>> double_eights(12345)
    False
    >>> double_eights(80808080)
    False
    """
    "*** YOUR CODE HERE ***"

我试图通过传递double_eights作为参数来调用n//10。 当2882作为参数传递时,我一直遇到错误。传递该参数时,双八进制函数不返回任何内容。我附加了到目前为止已经尝试过的内容。

    if n < 10:
        return False
    elif (n % 10 == 8) and ((n // 10) % 10 == n % 10):
        return True
    double_eights(n //10)

双倍八度的医生测试

>>> from lab01_extra import *
>>> double_eights(8)
False
>>> double_eights(88)
True
>>> double_eights(2882)

# Error: expected
#     True
# but got

1 个答案:

答案 0 :(得分:1)

您需要return进行最后一次递归调用,否则默认情况下,在不满足Noneif语句条件的输入上将返回elif

def double_eights(n):
    if n < 10:
        return False
    elif (n % 10 == 8) and ((n // 10) % 10 == 8):  #  8 instead of n % 10
        return True
    return double_eights(n // 10)

                                #  Output:
print(double_eights(8))         #  False
print(double_eights(88))        #  True
print(double_eights(2882))      #  True
print(double_eights(880088))    #  True
print(double_eights(12345))     #  False
print(double_eights(80808080))  #  False

8 instead of n % 10之所以存在,是因为and仅在第一个为True时才评估第二项(在这种情况下,您知道n % 10 == 8,所以为什么要重新计算它?)。


笔记double_eights不是higher-order function,而是recursive function