如何同时检查元组中同类对象的所有属性?Python游戏开发求助
问题分析与修复方案
你写的valid函数存在语法和逻辑双重问题,直接导致无法正确判断战斗是否继续:
- 语法错误:
>(opponents.health or opponents.health)写法完全不符合Python规则——既缺少左操作数,而且opponents是*参数接收的元组,不能直接用.health访问单个对象属性 - 逻辑错误:没有遍历所有传入的对手对象,也没实现「自身和所有对手血量都大于0才返回True」的核心需求
修复后的valid函数
def valid(*opponents: Character, *, self): # 检查自身血量大于0,且所有对手血量也都大于0 return self.health > 0 and all(opponent.health > 0 for opponent in opponents)
修复说明:
- 用
all()函数遍历opponents元组,批量验证每个对手的血量状态 - 直接返回布尔表达式结果,无需冗余的
if-else结构 - 保留了你原本设计的
*opponents可变参数和关键字-only参数self的结构
修正完整的main函数(原代码缩进不符合Python规范)
def main(): Raihan.equip(Sword) input() while valid(Cobra, self=Raihan): os.system('clear') Raihan.attack(Cobra) Cobra.attack(Raihan) input()
修改后,valid函数会正确判断:只有当玩家(self)和所有对手的血量都大于0时,战斗循环才会继续;一旦任何一方血量归0,循环立即终止。
内容的提问来源于stack exchange,提问作者Ethen
相关产品推荐
相关产品推荐

