You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python文件处理习题求助:读取书籍标题生成首字符+长度编码

Book Titles 习题正确实现方案

题目回顾

程序需要读取同目录下books.txt中逐行存储的书籍标题,按规则为每个标题生成专属编码并逐行输出:

  • 编码规则:取标题首字符,拼接标题的字符总长度(包含空格,排除每行末尾的换行符\n)
  • 示例:
    标题Harry Potter总长度为12,对应编码H12
    若books.txt内容为:
    Some book
    Another book
    
    对应输出为:
    S9
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 13:06:31