CodeWars Strip Comments代码PyCharm正常但在线控制台输出异常求助
问题根源与解决方案
核心问题:错误使用repr()函数
你代码里的strng = repr(strng)[1:-1]是导致在线输出异常的直接原因。
repr()函数的作用是返回字符串的字面量表示形式,它会把原字符串中的实际换行符\n转换成转义后的\\n(也就是两个字符:反斜杠+n)。- 本地测试时,你可能误将经过
repr()处理的字符串作为输入,所以输出看起来正常;但CodeWars在线环境传入的是原生带实际换行符的字符串,经过repr()处理后,换行符被转义成\\n,最终输出自然会出现\\ngrapes\\n这类内容。
代码逻辑的其他隐患
除了repr()的问题,你的代码还存在逻辑漏洞:
- 使用
solution.replace(solution[start:i], "")会替换所有匹配的子串,而非仅当前标记对应的目标片段,容易引发意外修改。 - 嵌套循环中直接修改
i的值,会干扰外层循环的索引逻辑,增加越界和逻辑混乱的风险。
修正后的实现
以下是符合Kata要求的简洁可靠代码:
def strip_comments(strng, markers): lines = strng.split('\n') for i in range(len(lines)): for marker in markers: if marker in lines[i]: lines[i] = lines[i].split(marker)[0].rstrip() break return '\n'.join(lines)
逻辑说明:
- 将输入字符串按换行符分割为行列表,逐行处理。
- 对每行检查是否存在注释标记,若找到则从标记处截断内容,再用
rstrip()清除行尾多余空格。 - 最后将处理后的所有行用换行符拼接返回。
内容的提问来源于stack exchange,提问作者P1st1
相关产品推荐
相关产品推荐

