Две функции, включающие рекурсивную сумму и словарь - PullRequest
0 голосов
/ 15 февраля 2020

Я делаю задание. Вот инструкции и предоставляемая им строка документации:

В этом задании вы напишете две функции. Сначала напишите функцию с именем rec_dig_sum, которая принимает целое число и возвращает рекурсивную сумму di git этого числа.

Пример рекурсивной суммы di git: 101 => 1 + 0 + 1 = 2.

Затем используйте эту функцию в другой функции с именем distr_of_rec_digit_sums, которая возвращает словарь, в котором ключи являются рекурсивными суммами di git, а значения - это число этих цифр, встречающихся между высокий (включительно) диапазон вводимых номеров. Предположим, что низкие и высокие являются положительными целыми числами, где высокое больше, чем низкое, и ни низкие, ни высокие не являются отрицательными. Ваша функция должна возвращать словарь, а не просто печатать его.

def rec_dig_sum(n):
    '''
    Returns the recursive digit sum of an integer.

    Parameter
    ---------
    n: int

    Returns
    -------
    rec_dig_sum: int
       the recursive digit sum of the input n
    '''

def distr_of_rec_digit_sums(low=0, high=1500):
    '''
    Returns a dictionary representing the counts
        of recursive digit sums within a given range.

    Parameters
    ----------
    low: int
        an integer, 0 or positive, representing
        the lowest value in the range of integers
        for which finding the recursive digit sum
    high: int
        a positive integer greater than low, the
        inclusive upper bound for which finding
        the recursive digit sum

    Returns
    -------
    dict_of_rec_dig_sums: {int:int}
        returns a dictionary where the keys are
        the recursive digit sums and the values
        are the counts of those digit sums occurring
    '''

Это код, который я пытался:

def rec_dig_sum(n):
  convert_to_int = [int(i) for i in lst]
  total = sum(convert_to_int)
  return total

def distr_of_rec_digit_sums(low=0, high=1500):
  if length >= 0 and length <= 1500 :
    d1 = {rec_dig_sum(n) : length}
  return d1

lst = list(str(n))
total = 0
length = len(lst)

print(distr_of_rec_digit_sums(5987))

Я не уверен, зачем вводить аргумент в конец функции вызывает ошибку, так как первая функция должна запускаться с использованием того же аргумента.

Правильно ли я подхожу к этому? Есть ли способ сделать это лучше?

1 Ответ

0 голосов
/ 15 февраля 2020

Сначала вашей функции передается аргумент n, представляющий собой целое число, цифры которого необходимо сложить вместе, но вы полностью игнорируете это значение и вместо этого вычисляете сумму, используя значение lst. Инициализация lst выполняет половину работы, необходимой для получения результата. Вся работа, необходимая для получения результата, должна выполняться в функции rec_dig_sum, которая должна использовать переданное ей значение n и ничего больше. Используя выбранный вами подход, который является удовлетворительным, мы получаем:

def rec_dig_sum(n):
    convert_to_int = [int(i) for i in str(n)]
    total = sum(convert_to_int)
    return total

Во-вторых, ваше утверждение lst = list(str(n)) сгенерирует ошибку, поскольку n определяется только как аргумент функции для rec_dig_sum и поэтому находится за пределами области действия.

В-третьих, моя интерпретация вашего упражнения заключается в том, что функции distr_of_rec_digit_sums будет передано два значения, low и high, и с помощью этих значений вы должны сгенерировать все целые числа. в диапазоне low, low + 1 ... high и для каждого вызова функции rec_dig_sum. Эти повторные вызовы rec_dig_sum приведут к возвращению конечного числа различных значений (это число составляет не менее 1 и не более high - low + 1). Для каждого отдельного значения подсчитайте, сколько раз это значение встречалось, и создайте словарь, в котором каждый ключ представляет собой отдельное значение, возвращаемое rec_dig_sum, а значение - это число раз, которое было возвращено. Например, вызов rec_dig_sum с аргументами 12 и 21 приведет к возвращению значения 2. Итак, если функция distr_of_rec_digit_sums вызывается с low=12 и high=21, то один из ключей словаря будет 2 со значением 2 (количество). Затем вы должны вернуть этот словарь. Теперь, когда я, надеюсь, объяснил это лучше, я оставлю вам более совершенную попытку. Если у вас есть проблемы с этим, задайте это как отдельный вопрос.

...