Skip to content

Commit

Permalink
Merge pull request #43 from MIT-Emerging-Talent/challenge-sum-of-digits
Browse files Browse the repository at this point in the history
Challenge sum of digits
  • Loading branch information
SEMIRATESFAI authored Jan 12, 2025
2 parents 453223f + c21aa16 commit 05b7158
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 0 deletions.
Empty file.
45 changes: 45 additions & 0 deletions solutions/challenge_9/sum_of_digits.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
A module for calculating the sum of the digits of a positive integer.
Module contents:
sum_of_digits: calculates the sum of the digits of a positive integer.
Created on January 3rd, 2025
@author: Semira Tesfai
"""


def sum_of_digits(n: int) -> int:
"""Calculate the sum of the digits of a positive integer.
Parameters
----------
n : int
The non-negative integer whose digits will be summed.
Returns
-------
int
The sum of the digits of the given integer.
Raises
------
ValueError
If the argument is not a non-negative integer.
Examples
--------
>>> sum_of_digits(123)
6
>>> sum_of_digits(4567)
22
>>> sum_of_digits(0)
0
"""

if not isinstance(n, int) or n < 0:
raise ValueError("input must be a non-negative integer.")

return sum(int(digit) for digit in str(n))
Empty file.
39 changes: 39 additions & 0 deletions solutions/tests/challenge_9/test_sum_of_digits.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Unit tests for the sum_of_digits function.
Created on January 3rd, 2025
"""

import unittest

from solutions.challenge_9.sum_of_digits import sum_of_digits


class TestSumOfDigits(unittest.TestCase):
"""Tests for the sum_of_digits function."""

def test_with_positive_integer(self):
"""Ensure that the sum of digits of a positive integer is calculated correctly."""
self.assertEqual(sum_of_digits(123), 6)

def test_with_large_integer(self):
"""Ensure that the sum of digits of a large positive integer is calculated correctly."""
self.assertEqual(sum_of_digits(4567), 22)

def test_with_zero(self):
"""Ensure that the sum of digits of zero is zero."""
self.assertEqual(sum_of_digits(0), 0)

def test_with_invalid_input(self):
"""Ensure that the function raises an assertion error for invalid inputs."""
with self.assertRaises(ValueError):
sum_of_digits(-5)
with self.assertRaises(ValueError):
sum_of_digits(4.5)
with self.assertRaises(ValueError):
sum_of_digits("123")


if __name__ == "__main__":
unittest.main()

0 comments on commit 05b7158

Please sign in to comment.