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

如何同时检查元组中同类对象的所有属性?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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:45:02