噪声卷轴
Hoppy 在侦探台的角落里摊开一卷薄薄的卷轴。上面的线索没有完全坏掉,但每一行都沾着一点噪声:前缀记号、挤在一起的波浪符、还有多出来的问号,让它一眼看上去比真实内容更乱。
这正是 Chapter 5 想确认你的地方:面对不太整洁的文本,你不会停在“看起来好乱”,而是知道先清理,再拆开,再把结果整理清楚。
带噪声的文本,通常要先清理,再解析
有些文本并不需要复杂 parser。它只是先被几种小噪声盖住了真正的形状。只要你按顺序做几步简单动作,比如 strip()、replace() 和 split(),原来的结构就会重新露出来。
sample_line = " ## room=ivy~bridge | clue=glow | status=ready?? "
cleaned_line = sample_line.strip().replace("## ", "").replace("~", " ").replace("??", "")
room_name = cleaned_line.split(" | ")[0].split("=")[1]
print(cleaned_line)
print(room_name)
这个示例只演示“先把一行清干净,再拿一个字段”的感觉,不是今天 starter 的整题答案。真正任务里,你会对一整份小卷轴连续做几步清理,然后再把结果收起来。
今天的任务:把一份噪声卷轴清成可用结果
starter 已经帮你读好了 noisy_scroll.txt,并先做了 scroll_lines = scroll_text.splitlines()。你要继续把三行卷轴都清理干净,得到 first_clean_line、middle_clean_line、last_clean_line 和 cleaned_lines,再从里面提取 first_room、middle_status、last_clue,最后整理成 scroll_report。
运行 starter,先看 scroll_text 和 scroll_lines。注意:它还不是干净结果,但已经帮你把整份卷轴拆成了一行一行的小片段。
每一行都先 strip(),再去掉开头的 "## ",再把 "~" 换成空格,把 "??" 去掉。这样三行都会回到同一种清楚的形状。
清理完以后,每一行都像 room=... | clue=... | status=...。这时再用 split(" | ") 和 split("="),分别拿出 first_room、middle_status 和 last_clue。
用 cleaned_count、first_room、middle_status 和 last_clue 构造一个 scroll_report 字典。这样你不只是把文本清干净了,也把结果整理清楚了。
这节课不是大型综合项目,也不是世界观终试炼。我们不引入新概念,不做复杂 parser,只确认你已经能把清理、拆解和组织结果这几步自然串起来。
参考答案点击展开点击收起
with open("noisy_scroll.txt", "r", encoding="utf-8") as file:
scroll_text = file.read().strip()
print("Scroll text:")
print(scroll_text)
scroll_lines = scroll_text.splitlines()
print("Scroll lines:", scroll_lines)
first_clean_line = scroll_lines[0].strip().replace("## ", "").replace("~", " ").replace("??", "")
middle_clean_line = scroll_lines[1].strip().replace("## ", "").replace("~", " ").replace("??", "")
last_clean_line = scroll_lines[2].strip().replace("## ", "").replace("~", " ").replace("??", "")
cleaned_lines = [first_clean_line, middle_clean_line, last_clean_line]
cleaned_count = len(cleaned_lines)
first_room = cleaned_lines[0].split(" | ")[0].split("=")[1]
middle_status = cleaned_lines[1].split(" | ")[2].split("=")[1]
last_clue = cleaned_lines[2].split(" | ")[1].split("=")[1]
scroll_report = {
"cleaned_count": cleaned_count,
"first_room": first_room,
"middle_status": middle_status,
"last_clue": last_clue,
}
print("First clean line:", first_clean_line)
print("Middle clean line:", middle_clean_line)
print("Last clean line:", last_clean_line)
print("Cleaned lines:", cleaned_lines)
print("Cleaned count:", cleaned_count)
print("First room:", first_room)
print("Middle status:", middle_status)
print("Last clue:", last_clue)
print("Scroll report:", scroll_report)高级技巧想更进一步?点击展开点击收起
这节 checkpoint 想确认的,不是你记住了多少字符串方法名,而是你已经形成了一条稳定路径:先把噪声清掉,再按形状拆开,再把结果组织成清晰输出。
到这里,Chapter 5 的文本侦探基础就收束好了。下一章会把这些习惯放进更连续的任务里,但不会靠新概念取胜。