编写一个函数,该函数接受一个数字并确定数字是否包含两个相邻的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
答案 0 :(得分:1)
您需要return
进行最后一次递归调用,否则默认情况下,在不满足None
和if
语句条件的输入上将返回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。