我想回答一个关于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)中:...
您可能应该重新考虑这一点:
string = string.replace(char, string.upper())