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

Python读取文件无返回,调用file.readline()返回空值如何解决

问题原因分析
  • 核心错误为对readline()方法的参数理解偏差:file.readline(size)中的size参数代表单次读取最多返回的字节数,并非读取指定行号的内容,传入递增的question_number仅会改变单次读取的字节上限,无法实现按行号取值的需求。
  • 文件流为顺序读取逻辑,每次调用readline()都会自动将文件指针向后偏移,当指针移动到文件末尾后,后续所有readline()调用都会返回空字符串。
  • 额外匹配问题:readline()读取的行默认会携带末尾的换行符\n,直接和用户输入比对会因末尾多余字符永远匹配失败。
修正方案

推荐提前将文件所有内容加载到列表中存储,后续直接按下标访问对应内容即可,规避文件指针操作问题,修正后代码如下:

points = 0
question_number = 0

# 一次性读取所有行,同时去除每行末尾的空白字符(含换行符),过滤空行
with open("storage.txt", "r", encoding="utf-8") as f:
    content_list = [line.strip() for line in f if line.strip()]

while True:
    # 每道题对应两行:偶数下标为歌曲名,奇数下标为对应答案
    song_pos = question_number * 2
    answer_pos = song_pos + 1
    # 所有题目作答完成则结束游戏
    if answer_pos >= len(content_list):
        print(f"所有题目已作答完成,最终得分:{points}")
        break
    print("Who made this song?")
    user_input = input(f"{content_list[song_pos]}: ")
    if user_input == content_list[answer_pos]:
        print("You got it right, 1 point for you!")
        points += 1
        question_number += 1
    else:
        print("You lost with", points, "points.")
        break

print("All done.")

内容的提问来源于stack exchange,提问作者big T

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:06:03