Python卡牌游戏不使用类存储卡牌名称与属性的实现问题求助
问题核心原因
- 你当前代码的核心问题是每次循环都复用
completeCard字典的同一个"name:"键,每次赋值都会直接覆盖上一轮的内容,自然只能存储最后一次迭代的卡牌数据 - 你定义的
completeCard是单个字典结构,不适合存储多组卡牌数据,需要调整存储结构
修正后的实现方案
不需要使用类,有两种常用的无类存储方案可选:
方案1:用列表存储所有卡牌字典(适合批量遍历卡牌场景)
每个卡牌单独存为一个字典,所有字典放到统一列表中,代码如下:
import random def cardValueGen(): # 四个属性可根据你的实际需求调整对应命名 return { "star": random.randint(1,5), "power": random.randint(1,100), "attack": random.randint(1,10), "defense": random.randint(1,10) } def fileReader(): all_cards = [] # with语法会自动处理文件关闭,避免资源泄露 with open("message.txt", "r", encoding="utf-8") as f: for line in f: # 去掉每行末尾的换行符和多余空白 card_name = line.strip() # 跳过文本中的空行,避免生成无效卡牌 if not card_name: continue single_card = { "name": card_name, "attributes": cardValueGen() } all_cards.append(single_card) return all_cards # 调用示例 complete_cards = fileReader() # 遍历验证所有卡牌 for card in complete_cards: print(card)
方案2:用总字典存储,键为卡牌名(适合按名称快速查询卡牌场景)
如果需要经常通过卡牌名检索对应属性,可以用总字典直接做名称到属性的映射:
import random def cardValueGen(): return [ random.randint(1,5), random.randint(1,100), random.randint(1,10), random.randint(1,10) ] def fileReader(): all_cards = {} with open("message.txt", "r", encoding="utf-8") as f: for line in f: card_name = line.strip() if not card_name: continue all_cards[card_name] = cardValueGen() return all_cards # 调用示例 complete_cards = fileReader() # 按名称查询属性示例:print(complete_cards.get("目标卡牌名"))
额外优化说明
- 读取文本行时调用
strip()方法可以去掉换行符、首尾空格,避免卡牌名称携带多余无效字符 - 新增空行跳过逻辑,可以避免文本中的空行生成无效的空白卡牌
内容的提问来源于stack exchange,提问作者QuestionHaver99
相关产品推荐
相关产品推荐

