如何编写以键作为递归数字总和而返回字典的函数,而值是发生的那些数字总和的计数

问题描述 投票:0回答:2

enter image description here

第一个函数返回该数字的递归数字总和。第二个函数返回字典,其中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
python dictionary recursion ordereddictionary
2个回答
0
投票
  • 我可以想到的问题是,您每个reg_dig_sum的数量都应该比应该少一个。这就是断言条件失败的原因。
  • 您可以通过将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
投票

查看有关将0更改为1的以前的评论和答案

也尝试对reg_dig_sum使用简单得多的代码,结果相同:

def reg_dig_sum(n):
    return (n - 1) % 9 + 1
© www.soinside.com 2019 - 2024. All rights reserved.