Python文件处理习题求助:读取书籍标题生成首字符+长度编码
Book Titles 习题正确实现方案
题目回顾
程序需要读取同目录下books.txt中逐行存储的书籍标题,按规则为每个标题生成专属编码并逐行输出:
- 编码规则:取标题首字符,拼接标题的字符总长度(包含空格,排除每行末尾的换行符
\n) - 示例:
标题Harry Potter总长度为12,对应编码H12
若books.txt内容为:
对应输出为:Some book Another bookS9 A12
题目提示可使用readlines()方法一次性读取所有行,注意除最后一行外,其余行末尾都附带不计入长度的\n换行符。
原代码问题排查
你之前写的代码无法得到正确结果,主要有几个问题:
- 循环逻辑错误:外层已经在逐行遍历文件对象,内层又调用
file.readlines()会一次性读完剩余所有文件内容,导致行遍历错位、漏读或重复处理 - 变量拼写错误:代码里写了不存在的变量名
titulo,运行会直接报错 - 文件操作错误:
file.close没有加括号,实际不会执行文件关闭操作 - 长度计算逻辑有漏洞:直接用
len(line)-1默认所有行都带换行符,但最后一行通常没有\n,会导致最后一个标题的长度少算1
正确实现代码
推荐使用with上下文管理器操作文件,会自动处理文件关闭,避免资源泄漏,逻辑更稳妥:
with open("books.txt", "r") as file: # 按题目提示读取所有行组成列表 lines = file.readlines() for line in lines: # 仅移除行尾的换行符,保留标题中所有合法字符(包括可能存在的首尾空格) title = line.rstrip('\n') # 拼接编码并输出 book_code = title[0] + str(len(title)) print(book_code)
如果不想用上下文管理器,基础写法如下,注意文件关闭要加括号:
file = open("books.txt", "r") lines = file.readlines() file.close() for line in lines: title = line.rstrip('\n') print(f"{title[0]}{len(title)}")
说明:用
rstrip('\n')处理换行比直接给长度减1更通用,无论行尾有没有换行符都能得到准确的标题长度,不会出现最后一行计算错误的问题。
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

