问题描述
我需要这段代码来忽略(而不是替换)空格。基本上,它应该只大写字母表中的每个第二个字母。
def spaces(test_space):
text = (str.lower,str.upper)
return ''.join(text[i%2](x) for i,x in enumerate(test_space))
print(spaces('Ignore spaces and other characters'))
print(spaces('Ignore spaces and 3rd characters!'))
iGnorE SpAcEs aNd oThEr cHaraCtErS
iGnorE SpAcEs aNd 3Rd cHaraCtErS
解决方法
这听起来像是家庭作业,所以我只会提供建议和资源,而不是完整的代码:
一种方法是:
- 将每个空格替换为 2 个无法出现在文本中的字符。例如使用“$$”。这可以通过 python 的
replace
函数轻松完成。我们用 2 个字符替换一个空格,因为每个空格都将索引“甩掉”一个(mod 2),因此通过用两个字符替换每个空格可以纠正问题(因为 2(mod 2)= 0)。 - 使用当前程序将所有其他字符大写
- 用空格替换每次出现的“$$”。
- 使用您保存的索引将空格放回
输出:iGnOrE sPaCeS aNd 3rD cHaRaCtErS!
或者,您可以遍历字符串(使用循环),保留位置计数器,但使用 regex 忽略计数器中的所有非字母字符。您也可以通过 list comprehension 简洁地完成此操作,尽管阅读起来可能会更加混乱。
,def spaces(test_space):
return " ".join(
[
"".join(
char.upper() if i % 2 == 1 else char.lower()
for i,char in enumerate(word)
)
for word in test_space.split()
]
)
输出
iGnOrE sPaCeS aNd oThEr cHaRaCtErS