【问题标题】:Combine 2 for loops into one loop (Iterating objects)将 2 个 for 循环合并为一个循环(迭代对象)
【发布时间】:2020-11-17 18:14:03
【问题描述】:

所以我正在编写一个非常基本的纸牌游戏,其中有 2 个玩家,每个玩家都有一副纸牌。每张卡片(对象)都有健康点和伤害点。在“战斗”期间,每个玩家都必须对敌人造成伤害(遍历他卡组中的每张卡),然后轮到其他玩家。这是战斗的代码:

from project.player.player import Player


class BattleField:

    @staticmethod
    def fight(attacker: Player, enemy: Player):
        for x in (attacker, enemy):
            if x.is_dead:
                raise ValueError("Player is dead!")
            if x.__class__.__name__ == 'Beginner':
                x.health += 40
                for card in x.card_repository.cards:
                    card.damage_points += 30
            health_bonus = sum(card.health_points for card in x.card_repository.cards)
            x.health += health_bonus

        for card in attacker.card_repository.cards:
            enemy.health -= card.damage_points
            if enemy.is_dead:
                raise ValueError("Player is dead!")

        for card in enemy.card_repository.cards:
            attacker.health -= card.damage_points
            if attacker.is_dead:
                raise ValueError("Player is dead!")

我的问题是 - 这两个 for 循环(用于造成伤害)是否可以合并到一个循环中以及如何合并。提前致谢。

【问题讨论】:

    标签: python-3.x loops oop


    【解决方案1】:

    您可以创建一个新方法并调用它两次:

    @staticmethod
    def iterate_cards(attacker, enemy):
        for card in attacker.card_repository.cards:
            enemy.health -= card.damage_points
            if enemy.is_dead:
                raise ValueError("Player is dead!")
    

    在你的fight 方法中:

    def fight(self, attacker: Player, enemy: Player):
        ...
        self.iterate_cards(attacker, enemy)
        self.iterate_cards(enemy, attacker)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-05
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多