如何在禁用split、字典和with语句的前提下,将文件数据存入两个对应列表
如何在禁用split、字典和with语句的前提下,将文件数据存入两个对应列表
嘿,我看了你写的代码,发现几个小问题,咱们来一步步修正,刚好能满足你不能用split、字典和with语句的要求~
首先得指出你原代码里的两处明显问题:
- 那个
for item in FILENAME的循环完全没必要,而且是错误的——FILENAME是你的文件名字符串,遍历它会拿到每个字符,这和读取文件内容半毛钱关系都没有,只会让逻辑混乱。 - 你把同一行内容同时加到了两个列表里,这显然不对,毕竟咱们要的是第一行存名字、第二行存分数,交替对应。
根据你提供的game.txt格式(名字和分数各占一行,交替出现),我给你调整后的代码:
首先先定义好文件名和要用到的两个空列表:
FILENAME = 'game.txt' player_names = [] high_scores = []
然后是修正后的read_file函数:
def read_file(): infile = open(FILENAME, 'r') line = infile.readline().rstrip('\n') while line != '': # 把当前行(玩家名字)加入名字列表 player_names.append(line) # 读取下一行,也就是对应的高分 score_line = infile.readline().rstrip('\n') # 把分数转成整数后加入分数列表 high_scores.append(int(score_line)) # 读取下一个玩家的名字行,准备下一轮循环 line = infile.readline().rstrip('\n') infile.close()
咱们来理一理这段代码的逻辑:
- 打开文件后,先读取第一行(第一个玩家的名字),进入循环
- 每一轮循环里,先把当前的名字存入
player_names - 紧接着读取下一行,这行就是该玩家的高分,转成整数后存入
high_scores - 然后再读取下一行,作为下一个循环的“当前行”(也就是下一个玩家的名字)
- 当
line变成空字符串时,说明文件已经读完,关闭文件即可
你可以调用这个函数后打印两个列表测试一下:
read_file() print("玩家名字列表:", player_names) print("高分列表:", high_scores)
运行后会得到你想要的结果:
玩家名字列表: ['John', 'Mary', 'Larry', 'Mark'] 高分列表: [7, 5, 9, 4]
这样既完全遵守了不能用split、字典和with语句的要求,又完美把文件里的名字和对应高分分别存入了两个列表里~
备注:内容来源于stack exchange,提问作者Rebecca
相关产品推荐
相关产品推荐

