Sum of digits in a string

前端 未结 8 2029
天涯浪人
天涯浪人 2020-12-06 12:35

if i just read my sum_digits function here, it makes sense in my head but it seems to be producing wrong results. Any tip?

def is_a_digit(s):
\         


        
相关标签:
8条回答
  • 2020-12-06 13:15

    An equivalent for your code, using list comprehensions:

    def sum_digits(your_string):
        return sum(int(x) for x in your_string if '0' <= x <= '9')
    

    It will run faster then a "for" version, and saves a lot of code.

    0 讨论(0)
  • 2020-12-06 13:23

    Just a variation to @oscar's answer, if we need the sum to be single digit,

    def sum_digits(digit):
        s = sum(int(x) for x in str(digit) if x.isdigit())
        if len(str(s)) > 1:
            return sum_digits(s)
        else:
            return s
    
    0 讨论(0)
  • 2020-12-06 13:24

    Notice that you can easily solve this problem using built-in functions. This is a more idiomatic and efficient solution:

    def sum_digits(digit):
        return sum(int(x) for x in digit if x.isdigit())
    
    sum_digits('hihello153john')
    => 9
    

    In particular, be aware that the is_a_digit() method already exists for string types, it's called isdigit().

    And the whole loop in the sum_digits() function can be expressed more concisely using a generator expression as a parameter for the sum() built-in function, as shown above.

    0 讨论(0)
  • 2020-12-06 13:24

    Another way of using built in functions, is using the reduce function:

    >>> numeric = lambda x: int(x) if x.isdigit() else 0
    >>> reduce(lambda x, y: x + numeric(y), 'hihello153john', 0)
    9
    
    0 讨论(0)
  • 2020-12-06 13:26

    One liner

    sum_digits = lambda x: sum(int(y) for y in x if y.isdigit())
    
    0 讨论(0)
  • 2020-12-06 13:29

    Another way of doing it:

    def digit_sum(n):
      new_n = str(n)
      sum = 0
      for i in new_n:
        sum += int(i)
      return sum
    
    0 讨论(0)
提交回复
热议问题