Функция которая вычисляет сумму цифр числа

Найти сумму цифр числа в Python

Для изу­че­ния ба­зо­вых кон­струк­ций язы­ка Python пре­по­да­ва­те­ли обыч­но все­гда пред­ла­га­ют про­стые и по­нят­ные за­да­чи школь­но­го уров­ня. Но, не смот­ря на это, та­кие за­да­чи по­лез­ны и учат не толь­ко язы­ку, но и уме­нию ре­а­ли­зо­вы­вать ал­го­рит­мы. Рас­смот­рим тут од­ну из та­ких за­дач.

Рас­смот­рим несколь­ко ва­ри­ан­тов ре­ше­ния этой за­да­чи. Про­стей­ший и самій оче­вид­ный спо­соб ре­ше­ния за­да­чи со­сто­ит в том, чтобы по­лу­чить каж­дую из цифр, со­став­ля­ю­щих дан­ное чис­ло. Для это­го по­сле­до­ва­тель­но бу­дем де­лить ис­ход­ное чис­ло n на 10 на­це­ло (на­хо­дит раз­ря­ды чис­ла). Де­ле­ние бу­дем вы­пол­нять в цик­ле, в ко­то­ром сра­зу же и бу­дем на­кап­ли­вать тре­бу­е­мую сум­му цифр — suma, а так­же за­по­ми­нать ре­зуль­тат де­ле­ния для но­вой ите­ра­ции цик­ла в ту же пе­ре­мен­ную n. Де­ле­ние (цикл) про­дол­жа­ет­ся по­ка чис­ло n не до­стигнет нуле­во­го зна­че­ния.

Но, мож­но обой­тись и без де­ле­ния. Для это­го за­дан­ное чис­ло n пре­об­ра­зу­ем в стро­ку s, а за­тем пе­ре­бе­рем в цик­ле по­сле­до­ва­тель­но все сим­во­лы (циф­ры) этой стро­ки. Но, чтобы их мож­но бы­ло сло­жить, они долж­ны быть пре­об­ра­зо­ва­ны в чис­ло­вые зна­че­ния — int(c). И даль­ше оста­ет­ся толь­ко вос­поль­зо­вать­ся функ­ци­ей sum(), чтобы сло­жить эти все циф­ры и по­лу­чить сум­му цифр чис­ла — suma.

Но, нам это­го ма­ло и мы идем даль­ше. А мож­но ли при ре­ше­нии этой за­да­чи из­ба­вить­ся от цик­ла. По­про­бу­ем. Ре­ше­ние бу­дет по­хо­же на преды­ду­щее, но цикл за­ме­ним встро­ен­ной функ­ци­ей map() при­ме­ня­е­мой к каж­до­му эле­мен­ту неко­то­ро­го объ­ек­та. В на­шем слу­чае это сим­во­лы стро­ки str(n), по­лу­чен­ной пре­об­ра­зо­ва­ни­ем ис­ход­но­го чис­ла в стро­ку и ее со­став­ля­ю­щих сим­во­лов в це­лые чис­ла.

Ес­ли код это­го при­ме­ра не со­всем по­ня­тен, то про­ще бу­дет по­нять сле­ду­ю­щий код — там ис­поль­зу­ем пре­об­ра­зо­ва­ние чис­ла в спи­сок из цифр и даль­ше про­хо­дим­ся по нему функ­ци­ей map()

Написать функцию, находящую сумму цифр целого числа

Описать функцию DigitCountSum(K), находящую количество C цифр целого положительного числа K, а также их сумму
Описать функцию DigitCountSum(K), находящую количество C цифр целого положительного числа K, а.

Написать функцию , возвращающую сумму цифр целого неотрицательного числа.
Помогите пожалуйста! Написать функцию sumDigit, возвращающую сумму цифр целого неотрицательного.

Описать процедуру, находящую количество C цифр целого положительного числа K, а также их сумму
Описать процедуру DigitCountSum(K, C, S), находящую количество C цифр целого положительного числа.

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

Сумма и произведение цифр числа

Одной из часто используемых задач для начинающих изучать программирование является нахождение суммы и произведения цифр числа. Число может вводиться с клавиатуры или генерироваться случайное число. Задача формулируется так:

Дано число. Найти сумму и произведение его цифр.

Например, сумма цифр числа 253 равна 10-ти, так как 2 + 5 + 3 = 10. Произведение цифр числа 253 равно 30-ти, так как 2 * 5 * 3 = 30.

Обычно предполагается, что данная задача должна быть решена арифметическим способом. То есть с заданным число должны производиться определенные арифметические действия, позволяющие извлечь из него все цифры, затем сложить их и перемножить.

И здесь на помощь приходят операции деления нацело и нахождения остатка. Если число разделить нацело на 10, произойдет «потеря» последней цифры числа. Например, 253 ÷ 10 = 25 (остаток 3). С другой стороны, эта потерянная цифра есть остаток от деления. Получив эту цифру, мы можем добавить ее к сумме цифр и умножить на нее произведение цифр числа.

Пусть n – само число, suma – сумма его цифр, а mult – произведение. Тогда алгоритм нахождения суммы и произведения цифр можно словесно описать так:

  1. Переменной suma присвоить ноль.
  2. Переменной mult присвоить единицу. Присваивать 0 нельзя, так как при умножении на ноль результат будет нулевым.
  3. Пока значение переменной n больше нуля повторять следующие действия:
    1. Найти остаток от деления значения n на 10, то есть извлечь последнюю цифру числа.
    2. Добавить извлеченную цифру к сумме и увеличить на эту цифру произведение.
    3. Избавиться от последнего разряда числа n путем деления нацело на 10.

    В языке Python операция нахождения остатка от деления обозначается знаком процента — % . Деление нацело — двумя слэшами — // .

    Код программы на языке Python

    Изменение значений переменных можно записать в сокращенном виде:

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

    Если число отрицательное, это не влияет на сумму его цифр. В таком случае достаточно будет использовать встроенную в Python функции abc(), которая возвращает абсолютное значение переданного ей аргумента. Она превратит отрицательное число в положительное, и цикл while с его условием n > 0 будет работать как и прежде.

    Если число равно нулю, то по логике вещей сумма его цифр и их произведение должны иметь нулевые значения. Цикл срабатывать не будет. Поскольку исходное значение mult — это 1, следует добавить проверку на случай, если заданное число — это ноль.

    Программа, обрабатывающая все целые числа, может начинаться так:

    Заметим, если в самом числе встречается цифра 0 (например, 503), то произведение всех цифр будет равно нулю. Усложним задачу:

    Вводится натуральное число. Найти сумму и произведение цифр, из которых состоит это число. При этом если в числе встречается цифра 0, то ее не надо учитывать при нахождении произведения.

    Для решения такой задачи в цикл добавляется проверка извлеченной цифры на ее неравенство нулю. Делать это надо до умножения на нее значения переменной-произведения.

    Обратим внимание, что заголовок условного оператора if digit != 0: в Python можно сократить до просто if digit: . Потому что 0 — это false. Все остальные числа считаются истиной.

    Приведенный выше математический алгоритм нахождения суммы и произведения цифр числа можно назвать классическим, или универсальным. Подобным способом задачу можно решить на всех императивных языках, независимо от богатства их инструментария. Однако средства языка программирования могут позволить решить задачу другим, зачастую более простым, путем. Например, в Python можно не преобразовывать введенную строку с числу, а извлекать из нее отдельные символы, которые преобразовывать к целочисленному типу int:

    Если добавить в код проверку, что извлеченный символ строки действительно является цифрой, то программа станет более универсальной. С ее помощью можно будет считать не только сумму и произведение цифр целых чисел, но и вещественных, а также цифр, извлекаемых из произвольной строки.

    Строковый метод isdigit() проверяет, состоит ли строка только из цифр. В нашем случае роль строки играет одиночный, извлеченный на текущей итерации цикла, символ.

    Глубокое знание языка Python позволяет решить задачу более экзотическими способами:

    Встроенная функция list() преобразует переданную ей строку в список. Так если заданная строка — «234» , то получится список [‘2’, ‘3’, ‘4’] .

    Выражение [int(digit) for digit in n] представляет собой генератор списка. В данном случае будет получен список чисел: [2, 3, 4] .

    Встроенная функция sum() считает сумму элементов переданного ей аргумента.

    Функция reduce() модуля functools() принимает два аргумента — лямбда-выражение и в данном случае список. Здесь в переменной x происходит накопление произведения, а y принимает каждое следующее значение списка.

    Нахождение суммы всех цифр числа при помощи рекурсии

    Программа принимает на вход число и при помощи рекурсии находит сумму всех цифр, из которых это число состоит.

    Решение задачи

    1. Создадим пустой список, в который будем записывать цифры данного числа.
    2. Определим рекурсивную функцию, которая будет принимать в качестве аргумента число.
    3. Далее, принимаем от пользователя число и передаем его этой функции в качестве аргумента.
    4. В рекурсивной функции базовое условие определено как равенство аргумента нулю. В этом случае программа выводит сформированный список, состоящий из всех цифр числа.
    5. В противном случае в список добавляется остаток от деления аргумента на 10 , а затем снова вызывается эта же функция, в которую в качестве аргумента передается результат целочисленного деления на 10 .
    6. Затем находится сумма элементов списка при помощи встроенной функции Python, а результат выводится на экран. Вместо встроенной в Python функции также можно использовать код, который мы приводили в этом же разделе ранее.
    7. Также для сравнения можно посмотреть, как мы решали ранее эту же задачу при помощи итераций.

    Исходный код

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

    Объяснение работы программы

    1. Создается переменная l , которая инициируется пустым списком.
    2. Определяется рекурсивная функция sum_digits() , принимающая в качестве аргумента число.
    3. В самой функции определяется базовое условие рекурсии. Оно состоит в равенстве аргумента функции 0 . В этом случае функция возвращает сформированный рекурсивным образом список l .
    4. В противном случае в список добавляется остаток от деления аргумента на 10 , а затем снова вызывается эта же функция, в которую в качестве аргумента передается результат целочисленного деления на 10 .
    5. Далее мы вызываем функцию sum_digits() , а в качестве аргумента передаем введенное пользователем число n .
    6. Затем вычисленная сумма всех цифр числа выводится на экран.

    Результаты работы программы

    python logo

    Английский для программистов

    Наш телеграм канал с тестами по английскому языку для программистов. Английский это часть карьеры программиста. Поэтому полезно заняться им уже сейчас

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *