第一个函数返回该数字的递归数字总和。第二个函数返回字典,其中key是reg_dig_sum,value是该数字的计数。当我测试它失败给我这个
elf.assertEqual(sum_dict[0], 1)
AssertionError: 0 != 1
我该如何解决?
def reg_dig_sum(n):
x = sum(int(digit) for digit in str(n))
if x < 10:
return x
else:
return reg_dig_sum(x)
def distr_of_rec_digit_sums(low=0, high=1500):
distr = {}
for x in range(low, high):
if reg_dig_sum(x) not in distr:
distr[reg_dig_sum(x)] = 0
else:
distr[reg_dig_sum(x)] += 1
return distr
1
或删除else
条件来解决此逻辑错误。defaultdict
之类的其他替代方法来为您进行初始化。def distr_of_rec_digit_sums(low=0, high=1500):
distr = {}
for x in range(low, high):
if reg_dig_sum(x) not in distr:
distr[reg_dig_sum(x)] = 1 # this should be initialized to 1 for first occurance.
else:
distr[reg_dig_sum(x)] += 1
return distr
defaultdict
from collections import defaultdict
def distr_of_rec_digit_sums(low=0, high=1500):
distr = defaultdict(int)
for x in range(low, high):
distr[reg_dig_sum(x)] += 1
return distr
查看有关将0更改为1的以前的评论和答案
也尝试对reg_dig_sum使用更简单的代码,结果相同:
def reg_dig_sum(n):
return (n - 1) % 9 + 1
我使用一个简单的功能已经很长时间了:
def sum_digits(num):
if num <= 9:
return num
num = int(num / 10) + num - int(num / 10) * 10
''' takes the last digit of num off, and adds it to num. '''
return sum_digits(num)
您可以使用此功能找到很多东西。在幂级数上尝试一下,您会明白我的意思。实际上,您可以在数字行上使用的任何数学函数都将返回有趣的模式。此功能可帮助您了解部分内容。