9

如果我只是sum_digits在这里阅读我的函数,这在我的脑海中是有道理的,但它似乎产生了错误的结果。任何提示?

def is_a_digit(s):
''' (str) -> bool

Precondition: len(s) == 1

Return True iff s is a string containing a single digit character (between
'0' and '9' inclusive).

>>> is_a_digit('7')
True
>>> is_a_digit('b')
False
'''

return '0' <= s and s <= '9'

def sum_digits(digit):
    b = 0
    for a in digit:
        if is_a_digit(a) == True:
            b = int(a)
            b += 1

    return b

对于函数sum_digits,如果我输入sum_digits('hihello153john'),它应该产生9

4

9 回答 9

26

请注意,您可以使用内置函数轻松解决此问题。这是一个更惯用和有效的解决方案:

def sum_digits(digit):
    return sum(int(x) for x in digit if x.isdigit())

print(sum_digits('hihello153john'))
=> 9

特别要注意的是is_a_digit()字符串类型的方法已经存在,它被称为isdigit().

并且函数中的整个循环sum_digits()可以使用生成器表达式作为sum() 内置函数的参数更简洁地表示,如上所示。

于 2013-01-27T17:32:16.227 回答
9

如果是一个数字,您正在重置b每次迭代的值。a

也许你想要:

b += int(a)

代替:

b = int(a)
b += 1
于 2013-01-27T17:32:00.463 回答
5

使用内置函数的另一种方法是使用reduce函数:

>>> numeric = lambda x: int(x) if x.isdigit() else 0
>>> reduce(lambda x, y: x + numeric(y), 'hihello153john', 0)
9
于 2013-01-27T18:45:31.197 回答
1

一个班轮

sum_digits = lambda x: sum(int(y) for y in x if y.isdigit())
于 2013-01-27T18:25:46.170 回答
1

另一种方法:

def digit_sum(n):
  new_n = str(n)
  sum = 0
  for i in new_n:
    sum += int(i)
  return sum
于 2018-09-29T17:59:17.287 回答
1

我想提出一个使用 regx 的不同解决方案,涵盖两种情况:

1.
输入 = 'abcd45def05'
输出 = 45 + 05 = 50

import re
print(sum(int(x) for x in re.findall(r'[0-9]+', my_str)))

注意“+”表示出现一次或多次

2.
输入 = 'abcd45def05'
输出 = 4 + 5 + 0 + 5 = 14

import re
print(sum(int(x) for x in re.findall(r'[0-9]', my_str)))
于 2017-10-03T07:23:11.873 回答
0

您的代码的等效项,使用列表推导:

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

它将比“for”版本运行得更快,并节省大量代码。

于 2013-01-27T17:36:59.897 回答
0

只是@oscar 答案的一个变体,如果我们需要总和为个位数,

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
于 2017-08-17T09:35:48.930 回答
0
#if string =he15ll15oo10
#sum of number =15+15+10=40

def sum_of_all_Number(s):
    num = 0
    sum = 0

    for i in s:
        if i.isdigit():
            num = num * 10 + int(i)
        else:
            sum = sum + num
            num = 0
    return sum+num

#if string =he15ll15oo10
#sum of digit=1+5+1+5+1+0=13

def sum_of_Digit(s):
    sum = 0

    for i in s:
        if i.isdigit():
             sum= sum + int(i)

    return sum

s = input("Enter any String ")

print("Sum of Number =", sum_of_all_Number(s))
print("Sum Of Digit =", sum_of_Digit(s))
于 2021-12-09T15:03:37.207 回答