如何比较多个对象以查看它们之间的属性是否相等?

2024-06-28 15:23:19 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python的业余爱好者,我正在尝试制作一个程序来确定我正在制作的游戏的主动性,其中一部分是确保两个角色的“滴答声速度”不相同。每个角色都是一个具有以下类代码的对象:

class Character(object):
        def __init__ (self, name, speed, agility, otick, tick):
                self._name = name
                self._speed = int(speed)
                self._agility = int(agility)
                self._otick = int(otick)
                self._tick = int(tick)

以及以下用于确定“滴答声速度”的代码:

if createCharacter._speed == 0: createCharacter.set_otick(-1)
        elif createCharacter._speed == 1: createCharacter.set_otick(30)
        elif createCharacter._speed == 2: createCharacter.set_otick(27)
        elif createCharacter._speed == 3: createCharacter.set_otick(24)
        elif createCharacter._speed == 4: createCharacter.set_otick(21)
        elif 5 <= createCharacter._speed <= 6: createCharacter.set_otick(18)
        elif 7 <= createCharacter._speed <= 9: createCharacter.set_otick(15)
        elif 10 <= createCharacter._speed <= 11: createCharacter.set_otick(14)
        elif 12 <= createCharacter._speed <= 13: createCharacter.set_otick(13)
        elif 14 <= createCharacter._speed <= 15: createCharacter.set_otick(12)
        elif 16 <= createCharacter._speed <= 17: createCharacter.set_otick(11)
        elif 18 <= createCharacter._speed <= 22: createCharacter.set_otick(10)
        elif 23 <= createCharacter._speed <= 28: createCharacter.set_otick(9)
        elif 29 <= createCharacter._speed <= 34: createCharacter.set_otick(8)
        elif 35 <= createCharacter._speed <= 43: createCharacter.set_otick(7)
        elif 44 <= createCharacter._speed <= 61: createCharacter.set_otick(6)
        elif 62 <= createCharacter._speed <= 97: createCharacter.set_otick(5)
        elif 98 <= createCharacter._speed <= 169: createCharacter.set_otick(4)
        elif 170 <= createCharacter._speed <= 225: createCharacter.set_otick(3)
        createCharacter.set_tick(createCharacter._otick)

我想知道如何编写代码,以便在一场战斗中,如果有三个或更多字符,一个命令可以检查其中至少两个字符是否具有相同的“勾号”值,这样当我执行倒计时程序时,我就不会让两个字符同时达到0

我的目的是让比较检查在角色创建时发生,并且当角色的翻转结束时,它们的“勾号”返回到其原始值(存储在“otick”中)。如果至少有两个值相等,则程序将比较两个角色的“敏捷性”属性,以较低者为准,将1添加到“勾号”中,并进行另一次比较,以确保未创建另一条领带。如果两个敏捷度相等,那么我希望它(基本上)掷骰子(基于所讨论的敏捷度),失败者得到+1

谢谢你的考虑

编辑: 虽然当前的答案确实有点帮助,但我觉得我应该澄清代码中的一些内容。我有上面提到的代码:

characterList = []
c=int(input("How many characters in this battle? "))
for x in range(c):
        Character = createCharacter()
        characterList.append(Character)

所以所有的角色对象都在一个列表中。因此,问题变成了如何比较列表中的对象


Tags: 对象代码nameself程序角色intspeed
1条回答
网友
1楼 · 发布于 2024-06-28 15:23:19

您可以覆盖角色类的比较方法(ltlegtgeeqne魔术方法)

例如,您可以这样做:

import random

class Character(object):
        def __init__ (self, name, speed, agility, otick, tick):
                self._name = name
                self._speed = int(speed)
                self._agility = int(agility)
                self._otick = int(otick)
                self._tick = int(tick)

        def __gt__(self,other):
            if not isinstance(other,Character):
                 return NotImplemented

            if self.agility == other.agility:
                # if they have the same values you can "roll a dice"
                return random.randint(0,100) % 2 == 0

            # Here you can check and compare the values of self and other
            return self.agility > other.agility

所以现在如果你比较一下实例

player1 = Character()
player2 = Character()

# Now you can compare them using normal operator and apply logic after

if player1 > player2: #if this are the same it will make a random choice
   player1.agility +=1
else:
    player2.agility +=2 # you could add any logic

相关问题 更多 >