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

Python读取txt文件循环异常:卡牌收集程序遍历失效

文本卡牌游戏收藏功能代码问题排查与修复

核心问题分析

你遇到的两个问题本质是文件读写逻辑错误和循环执行条件不满足:

  1. 无论卡牌是否存在都覆盖为1* 卡牌名称加空行:说明代码直接使用写入模式清空了原文件,没有先读取并保留原有收藏内容。
  2. 标记的for循环不执行:大概率是读取收藏文件时没有正确获取有效行,或者文件不存在时直接跳过了读取逻辑,导致循环没有可遍历的内容。

常见错误点排查

  • 文件打开模式错误:如果使用open(..., 'w')会直接清空文件内容,应该先以'r'模式读取现有内容,处理后再以'w'模式写入新内容。
  • 读取内容未处理:读取文件时没有过滤空行或去除换行符,导致列表为空或全是无效行,循环自然不会执行。
  • 卡牌匹配逻辑漏洞:判断卡牌是否存在时,没有处理字符串中的空格、换行符,导致明明存在的卡牌被判定为不存在。
  • 目录未初始化:如果collections目录不存在,打开文件时会报错,部分代码可能会直接跳过读取逻辑,转而写入错误内容。

修复后的代码示例

import random
import os

# 从cards.txt随机抽取有效卡牌
with open('cards.txt', 'r', encoding='utf-8') as card_file:
    # 过滤空行并去除每行的换行符
    valid_cards = [line.strip() for line in card_file if line.strip()]

if not valid_cards:
    print("cards.txt中没有可抽取的有效卡牌")
    exit()

selected_card = random.choice(valid_cards)
username = "test_user"  # 替换为实际用户名
collection_file_path = f"collections/{username}.txt"

# 确保收藏目录存在,避免文件打开失败
os.makedirs('collections', exist_ok=True)

# 读取现有收藏数据,转为字典便于操作
collection_data = {}
if os.path.exists(collection_file_path):
    with open(collection_file_path, 'r', encoding='utf-8') as coll_file:
        for line in coll_file:
            cleaned_line = line.strip()
            # 跳过空行和格式错误的行
            if not cleaned_line or '* ' not in cleaned_line:
                continue
            # 解析数量和卡牌名称
            count_str, card_name = cleaned_line.split('* ', 1)
            try:
                count = int(count_str)
                collection_data[card_name] = count
            except ValueError:
                # 跳过格式错误的行(比如数量不是数字)
                continue

# 更新收藏数据
if selected_card in collection_data:
    collection_data[selected_card] += 1
else:
    collection_data[selected_card] = 1

# 将更新后的数据写入收藏文件
with open(collection_file_path, 'w', encoding='utf-8') as coll_file:
    for card, cnt in collection_data.items():
        coll_file.write(f"{cnt}* {card}\n")

代码说明

  1. 卡牌抽取:先过滤cards.txt中的空行,确保抽取的是有效卡牌名称。
  2. 目录初始化:用os.makedirs确保collections目录存在,避免文件打开失败。
  3. 收藏读取:将现有收藏转为字典,方便快速判断卡牌是否存在,同时过滤空行和格式错误的行。
  4. 数据更新:直接操作字典修改数量,逻辑清晰不易出错。
  5. 文件写入:将字典内容按指定格式写入,不会产生多余空行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 17:15:47