删除字符串中所有奇数的递归函数;如何包含负号

基本上就是标题所说的。它接受一个字符串,通过递归删除字符串中的所有奇数,并返回一个修改后的字符串。比如“54364”变成“464”,“4234”变成“424”等等。

def removeOddDigits(inString):
#base case
    if inString == "":
        return inString
    else:
#if it's an even number keep it
        if int(inString[0]) % 2 == 0:
            return str(inString[0]) + str(removeOddDigits(inString[1:]))
        else:
#if it's an odd number skip it
            return removeOddDigits(inString[1:])
        
        
print(removeOddDigits(input("Enter String:")))

在大多数情况下,代码可以正常工作,但我也希望它也包含负数。问题是它只比较 int 值,而“-”字符会导致无效的文字错误。而且我也不能使用 type() != int 比较,因为它都是由字符串组成的。有没有办法绕过这个,这样它不仅可以保留偶数,还可以保留非数字字符?

l787922411 回答:删除字符串中所有奇数的递归函数;如何包含负号

您似乎想要删除所有单位数,其中“单位数”可能包含 servo.duty_u16(1350) 之类的内容。您可以根据字符串是否以 postgres=# show maintenance_work_mem ; maintenance_work_mem ---------------------- 20MB (1 row) postgres=# vacuum analyze mdm_context; VACUUM postgres=# show shared_buffers; shared_buffers ---------------- 128MB (1 row) PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 62246 postgres 20 0 422892 165996 139068 R 57.1 15.7 25:06.34 postgres: postgres postgres [local] VACUUM postgres=# show default_statistics_target; default_statistics_target --------------------------- 100 (1 row) postgres=# set default_statistics_target=3000; SET postgres=# vacuum analyze mdm_context; VACUUM PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 62246 postgres 20 0 876132 474384 2976 R 62.9 47.6 25:11.41 postgres: postgres postgres [local] VACUUM 开头,而不是从字符串中获取第一个字符,而是获取一个或两个字符的子字符串。您可以利用布尔值的行为类似于 "-5""-" 的事实,具体取决于值来简化事情:

1

这将只为 0 产生一个 def removeOddDigits(inString): if inString == "": return inString s_length = inString.startswith('-') + 1 n = int(inString[0: s_length]) if n % 2 == 0: return str(n) + removeOddDigits(inString[s_length:]) else: return removeOddDigits(inString[s_length:]) removeOddDigits("1-234567-89") # '-246-8' ,这看起来是正确的,但很容易调整。

,

如果我理解正确的话,您是否试图保留所有非数字,包括 -,除非它位于奇数前面?

您可以添加另一个 if 语句,检查下一个字符是否是数字,如果不是,如果它是 - 后跟一个数字,您将检查它是否是奇数,就像你以前做过。

我更改了您的代码来执行此操作,因此例如 abc123-1-2-3 将导致 abc2-2

def remove_odd_digits(in_string):
    # base case
    if in_string == "":
        return in_string
    else:
        # check if the next character is a number or not
        if in_string[0].isdecimal():
            # if it's an even number keep it
            if int(in_string[0]) % 2 == 0:
                return in_string[0] + remove_odd_digits(in_string[1:])
            else:
                # if it's an odd number skip it
                return remove_odd_digits(in_string[1:])
        # check if the next character is a - followed by a number
        elif (len(in_string) > 1 and in_string[0] == "-"
              and in_string[1].isdecimal()):
            # if it's an even number keep it
            if int(in_string[1]) % 2 == 0:
                return in_string[:2] + remove_odd_digits(in_string[2:])
            else:
                # if it's an odd number skip it
                return remove_odd_digits(in_string[2:])
        # if the next character is not a number keep it
        else:
            return in_string[0] + remove_odd_digits(in_string[1:])


print(remove_odd_digits(input("Enter String:")))

另请注意,在 Python 中,您通常不会使用混合大小写的函数名和变量名,就像在您的示例中一样,而是使用带下划线的小写。所以 removeOddDigits 将是 remove_odd_digits

您可以在 Style Guide for Python Code

中找到更多相关信息

函数名称应为小写,单词之间用下划线分隔以提高可读性。
变量名遵循与函数名相同的约定。
混合大小写仅在已经成为流行风格的上下文中才被允许(例如 threading.py),以保持向后兼容性。

本文链接:https://www.f2er.com/3601.html

大家都在问