Если вам разрешено делать такие вещи, как str(n)
или list*k
, или даже *
вообще, это как бы побеждает цель упражнения
def super_digit_sum (n, k):
return sum (map (int, list (str (n)))) * k
print (super_digit_sum (148, 3)) # 39
Но яуверен, что смысл этого заключается в использовании примитивных функций и операций в качестве средства обучения написанию простых рекурсивных программ ...
Мы начнем с простой функции, которая суммируетцифры одного входного числа
def sum_digits (n):
if n < 10:
return n
else:
return n % 10 + sum_digits (n // 10)
print (sum_digits (148))
# 13
Затем мы создаем простую функцию, которая может умножать два числа
def mult (n, m):
if n is 0:
return 0
else:
return m + mult (n - 1, m)
print (mult (3, 7))
# 21
Затем, объединяя два, мы пишем вашу основную функцию
def super_digit_sum (n, k):
return mult (sum_digits (n), k)
print (super_digit_sum (148, 3))
# 39
Если вам разрешено использовать *
, вы можете вообще пропустить mult
и просто написать
def super_digit_sum (n, k):
return sum_digits (n) * k
print (super_digit_sum (148, 3))
# 39
Это лучшая программа, потому что вы получите ответ простым способом.Сравните это с другим подходом: взять число, преобразовать его в строку, разделить на отдельные символы, преобразовать эти символы обратно в цифры, затем суммировать цифры и, наконец, умножить результат на константу.
Оба подхода приводят к одному и тому же результату, но только один результат дает программу, которую стоит прочитать, imo.Я говорю об этом окольном стиле программирования в другом питоне. Q & A: Как считать соседей в списке? Думаю, вы найдете это полезным.