-1

我是编码新手,并尝试提取和打印无数字。我编写了 2 个不同的代码,但无法将它们组合起来。我会很感激一些建议。(我尝试使用*args但没有用)

def SumOfDigits(str1):
    sum_digit = 0
    for x in str1:
        if x.isdigit():
            z = int(x)
            sum_digit += z
    print("The sum of digits operation is", sum_digit, end=".")
    return   
def SumOfDigits(input):
    valids = []
    for character in input:
        if character.isalpha():
            valids.append(character)
    print("The extracted non-digits are:", ''.join(valids))
    return
4

1 回答 1

0

埃尔。Nik,我相信这两个函数不会被合并,因为它们的行为不同,这会导致更复杂的函数,这可能会让人有点困惑。

无论如何,您想要的是将两个 for 循环合并为一个。由于str.isalpha匹配项不会与匹配项发生冲突str.isdigit,因此您可以安全地使用if后跟 an 的语句elif来检查每个字符并应用所需的行为。

然后,您只需将 2 个结果作为元组返回。

def digit_extraction(string):
    sum_digits = 0
    extracted_alphas = ""

    for char in string:
        if char.isdigit():
            sum_digits += int(char)

        elif char.isalpha():
            extracted_alphas += char

    return sum_digits, extracted_alphas

这是一个简单的例子:

>>> digit_extraction("1a2b3c4d5e6f7g8h9i")
(45, 'abcdefghi')

如果您不知道多个返回值在 python 中是如何工作的,我建议您查看以下教程:

https://datagy.io/python-return-multiple-values/

要进入更高级的内容,分离 2 函数将允许编写被认为更 Pythonic 的内容:


def sum_of_digits(string):
    return sum(int(c) for c in string if c.isalpha())

def extract_alphas(string):
    return ''.join(filter(str.isalpha, c))
于 2021-12-07T20:51:31.097 回答