函数返回异常:去除代码行#及后续内容的函数返回无结果
问题分析与修复方案
我看到你写的函数遇到了返回结果异常的问题——打印的时候正常,但return出来的内容不对对吧?其实问题出在你处理每行的逻辑和结果拼接的方式上。
问题根源
你的代码里,new_code在循环的每一次迭代中都会被重新赋值为当前行的内容,而不是把所有处理后的行都累积起来。比如循环到最后一行的时候,new_code就只保存了最后一行处理后的结果,前面所有行的处理结果都被覆盖了,所以返回的时候自然看不到完整的内容。
修复后的代码
我们可以换一种方式,用一个列表来收集每一行处理后的结果,最后再把列表里的所有行用换行符连接起来返回,这样就能保留所有行的处理内容了:
code_1=''' hello this is a test to remove anything after and to get #this letter out def hello_world(): # this is a comment print("Hello world!") # this is another comment print("I # like # pound sign # .") ''' def remove_octothorpe_and_after(code): code_in_lines = code.splitlines() processed_lines = [] # 用列表收集每一行处理后的结果 for line in code_in_lines: if '#' in line: index = line.index('#') line = line[:index] # 直接截取#号之前的内容,高效又准确 processed_lines.append(line) # 将处理后的行加入列表 return '\n'.join(processed_lines) # 用换行符拼接所有行,还原文本结构 # 测试验证 result = remove_octothorpe_and_after(code_1) print(result)
关键修改说明
- 新增
processed_lines列表:用来存储每一行处理后的内容,避免循环中结果被反复覆盖 - 优化#号处理逻辑:用
line[:index]直接截取第一个#号之前的内容,比replace更稳妥(不会误匹配其他相同子串) - 最终拼接方式:用
'\n'.join(processed_lines)还原原文本的换行结构,保证返回结果的格式和输入一致
内容的提问来源于stack exchange,提问作者NeebiePeru
相关产品推荐
相关产品推荐

