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
相关产品推荐
相关产品推荐

