我正在做以下练习:
通过将数字的数字组成一个新数字,直到它被看到为止之前例如:
44→32→13→10→1.→1
85→89→145→42→20→4.→16→37→58→89
因此,任何到达1或89的链条都将卡在无尽的循环。
最令人惊奇的是,每一个起始数字最终都会在1点或89点到达。
有多少低于1000万的起始数字将达到89?
我刚才的代码是:
def start () :
start_range = range(4)
res = map(getDigits, start_range)
print(list(res))
def getDigits (num) :
check = checkNum(num)
if check is False :
strNum = str(num)
numList = map(toInt, strNum)
squareList = map(getSquareOfDigits, numList)
sumOfSquares = sum(squareList)
getDigits(sumOfSquares)
else :
return check
def checkNum(num) :
if num == 0 or num == 1 :
print(type(num))
print(num)
return 0
elif num == 89 :
print(type(num))
print(num)
return 1
else :
return False
def toInt (char) :
return int(char)
def getSquareOfDigits (num) :
return num * num
start()
输出为
<class 'int'>
0
<class 'int'>
1
<class 'int'>
89
<class 'int'>
89
[0, 0, None, None]
我不明白为什么,如果它正确地通过elif
,它就不会返回"1"并正确地将其添加到列表中。
在递归函数中,递归调用中必须有返回值
def getDigits (num) :
check = checkNum(num)
if check is False :
strNum = str(num)
numList = map(toInt, strNum)
squareList = map(getSquareOfDigits, numList)
sumOfSquares = sum(squareList)
---------> return getDigits(sumOfSquares)
else :
return check