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

如何正确遍历游戏文件并返回每行内容?代码正确性存疑

问题描述

需要编写代码遍历游戏文件并返回每一行的内容,当前的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:35:21