字符串交替大写功能输出不符合预期,请求代码错误排查与修复
问题分析与修复
你的代码逻辑是只有遇到非空格字符时才切换大小写状态,这就是导致结果不符合预期的核心原因。咱们拆解下执行流程就能明白:
处理到第一个单词末尾的d时,状态i会从False切换为True;接着遇到空格,因为是空格,代码不会切换i的状态,所以i仍然保持True,下一个字符e就被转为了大写——但你的预期里e是小写,这说明你实际想要的是每个字符(包括空格)都参与状态交替的切换,只是空格本身不需要改变大小写。
修复后的代码
def mock(s): ret = "" i = True for char in s: if i: ret += char.upper() else: ret += char.lower() # 移除原有的空格判断,每个字符处理后都切换状态 i = not i return ret print(mock("abcd efgh ijkl"))
修复逻辑说明
现在不管当前字符是不是空格,每次处理完一个字符后都会切换i的状态:
- 处理完
d后i变为True,遇到空格时,添加空格后i切换为False; - 接下来的
e会以i=False的状态转为小写,之后i切换为True,f转为大写,以此类推; - 最终运行结果正好是你预期的:
AbCd eFgH IjKl。
内容的提问来源于stack exchange,提问作者user9660128
相关产品推荐
相关产品推荐

