如何正确遍历游戏文件并返回每行内容?代码正确性存疑
问题描述
需要编写代码遍历游戏文件并返回每一行的内容,当前的parseGameFile函数不确定是否能正确实现功能。
游戏文件内容示例:
- 7D
- AH 2D 5H 2H
- AC 3D 4C KC
- AS 2S 4S 3S
- AD 4H QD 6D
- 4D 7S 3H JD
- 7D 5D 7C 3C
- KS KD QS 5S
- 7H QC QH 2C
- JH JC KH 6C
- 5C 6S 6H JS
当前实现的代码:
def parseGameFile(fname): f = open(fname, 'r') for line in f: if (line[-1] == '\n'): data = line[:-1] else: data = line p_data = data.split(',')
预期效果:调用ts[0].show()时能返回包含7D的第一行内容。
代码问题分析
现有代码存在几个关键问题:
- 没有收集并返回数据:函数仅处理每行数据,但未存储结果,调用后拿不到任何内容。
- 行首符号未处理:文件每行开头的
-未去除,直接处理会保留多余字符。 - 分割符错误:文件里的牌用空格分隔,但代码用逗号
split(',')分割,结果完全错误。 - 文件未安全关闭:直接
open文件后未手动关闭,存在资源泄漏风险。 - 换行符处理冗余:Python的
strip()可以更简洁处理换行符,无需判断最后一个字符。
修正后的代码
class GameLine: def __init__(self, cards): self.cards = cards def show(self): return ' '.join(self.cards) def parseGameFile(fname): game_lines = [] with open(fname, 'r') as f: for line in f: # 去除首尾空白字符(含换行符) cleaned_line = line.strip() if not cleaned_line: continue # 跳过空行 # 移除行首的"- ",再按空格分割成牌列表 cards = cleaned_line[2:].split() # 将封装后的对象加入列表 game_lines.append(GameLine(cards)) return game_lines # 使用示例 ts = parseGameFile('你的游戏文件名.txt') print(ts[0].show()) # 输出: 7D
改动说明
- 新增
GameLine类:封装每行牌数据,实现show()方法匹配预期调用需求。 - 用
with语句管理文件:自动处理文件关闭,避免资源泄漏。 - 优化行数据处理:先清理首尾空白、跳过空行,再移除行首符号并按空格分割牌数据。
- 收集并返回结果:将每行数据封装后存入列表,调用
ts[0].show()即可获取第一行内容。
内容的提问来源于stack exchange,提问作者Jayden
相关产品推荐
相关产品推荐

