Вычислить сумму цифр данной строки в python - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть эта строка, и я хочу вычислить сумму, но она не показывает правильный ответ, она печатает 51.

sumAndAverage = "English = 78 Science = 83 Math = 68 History = 65"

def sum_digits_string(str1):
    sum_digit = 0
    for x in str1:
        if x.isdigit():
            z = int(x)
            sum_digit = sum_digit + z

    return sum_digit 

print(sum_digits_string(sumAndAverage))

Ответы [ 7 ]

1 голос
/ 17 апреля 2020

Попробуйте использовать re:

sumAndAverage = "English = 78 Science = 83 Math = 68 History = 65"
nums = re.findall('\d+', sumAndAverage)
nums = [int(num) for num in nums]
print(sum(nums))
# 294

Regex попытается найти все числа в вашей строке, сохранить их в list, затем вам просто нужно их сложить.

1 голос
/ 17 апреля 2020

Лучший (Pythoni c) способ сделать это, используя понимание списка и sum () . Попробуйте это:

sumAndAverage = "English = 78 Science = 83 Math = 68 History = 65"

li = [int(x) for x in sumAndAverage if x.isdigit()]
print("List:", li, "=", sum(li))

Вывод:

List: [7, 8, 8, 3, 6, 8, 6, 5] = 51

Если вы хотите вычислить сумму чисел в вашей строке:

sumAndAverage = "English = 78 Science = 83 Math = 68 History = 65"

li = [int(x) for x in sumAndAverage.split() if x.isdigit()]
print("List:", li, "=", sum(li))

Вывод:

List: [78, 83, 68, 65] = 294
0 голосов
/ 17 апреля 2020

Этого также можно добиться с помощью одной строки кода

sumAndAverage = "English = 78 Science = 83 Math = 68 History = 65"

Решение 1:

from functools import reduce

>>> reduce(lambda a, x: int(a)+int(x), [int(s) for s in sumAndAverage.split() if s.isdigit()])
294

Решение 2:

>>> sum([int(s) for s in sumAndAverage.split() if s.isdigit()])
294
0 голосов
/ 17 апреля 2020

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

sumAndAverage = "English = 78 Science = 83 Math = 68 History = 65"

def sum_digits_string(str1):
    sum_digit = 0

    for x in str1.split():
        if x.isdigit():
            sum_digit += int(x)

    return sum_digit

print(sum_digits_string(sumAndAverage))

Выход: 294

0 голосов
/ 17 апреля 2020
str = 'English = 78 Science = 83 Math = 68 History = 65'    
a = sum([int(s) for s in str.split() if s.isdigit()])
print(a)
0 голосов
/ 17 апреля 2020

Это потому, что вы разыгрываете каждую ди git отдельно, так что вы делаете 7 + 8 + 8 + 3 + 6 + 8 + 6 + 5, что на самом деле 51. То, что вы хотите сделать здесь, это разбивая вашу строку и приводя целые числа, попробуйте что-то вроде этого:

sumAndAverage = "English = 78 Science = 83 Math = 68 History = 65"

def sum_digits_string(str1):
    sum_digit = 0

    for x in str1.split(" "):
        if x.isdigit():
            z = int(x)
            sum_digit = sum_digit + z

    return sum_digit 

print(sum_digits_string(sumAndAverage))

Это работает, давая 294.

0 голосов
/ 17 апреля 2020

Здесь у вас есть возможное решение. Теперь у вас есть 229 (78 + 83 + 65).

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

sumAndAverage = "English = 78 Science = 83 Math = 68 History = 65"

def sum_digits_string(str1):
    sum_digit = 0
    num = ""
    for x in str1:
        if x.isdigit():
            num += x
        else:
            if num != "":
                z = int(num)
                sum_digit += z
                num = ""
    return sum_digit 

print(sum_digits_string(sumAndAverage))
...