在python中替换字符串时出现内存错误

问题描述 投票:2回答:1

我想回答一个关于stackoverflow的相当简单的问题。原始代码(不是我的代码):

def to_alternating_case(string):
    for char in string:
        if ord(char) in range(97, 123):
            string.replace(char, string.upper())
        elif ord(char) in range (65,91):
            string.replace(char, string.lower())
        elif ord(char) in range (32, 48):
            continue
        else:
            return '//Non-alphabetical characters are unaffected'
    return string

当然,因为字符串是不可变的,并且string.replace无法更改原始字符串,所以返回值仍然是原始字符串(原始程序员的意图应该将大小写互换)。所以我想提出以下简单的解决方法:

def to_alternating_case(string):
    for char in string:
        if ord(char) in range(97, 123):
            string = string.replace(char, string.upper())
        elif ord(char) in range (65,91):
            string = string.replace(char, string.lower())
        elif ord(char) in range (32, 48):
            continue
        else:
            return '//Non-alphabetical characters are unaffected'
    return string


print(to_alternating_case("Guten Tag"))

但是我得到了这个例外,而不是新的来之不易的声誉点和热烈的感谢,我是:

Traceback (most recent call last):
  File "main.py", line 14, in <module>
    print(to_alternating_case("Guten Tag"))
  File "main.py", line 4, in to_alternating_case
    string = string.replace(char, string.upper())
MemoryError

此刻我真的很困惑。到底是怎么回事?我没有检查数字,所以我目前希望有任何字符串-但不是MemoryError。

免责声明:

是的,我知道原始问题可以使用单线to_alternating_case = lambda s: ''.join(c.lower() if c.isupper() else c.upper() for c in s)]解决>

我想回答一个关于stackoverflow的相当简单的问题。原始代码(不是我的代码):def to_alternating_case(string):用于字符串中的char:如果ord(char)在range(97,123)中:...

python
1个回答
4
投票

您可能应该重新考虑这一点:

string = string.replace(char, string.upper())
© www.soinside.com 2019 - 2024. All rights reserved.