【问题标题】:Method for translating a user input string to reference a pre-existing class object?转换用户输入字符串以引用预先存在的类对象的方法?
【发布时间】:2021-08-02 06:30:43
【问题描述】:

如果标题有点不正确,请原谅我,我对 Python 的类非常陌生,并且不完全知道它的各种复杂名称是什么。最好的猜测!

你好!我正在做一个小示例项目,但遇到了障碍。目前我正在尝试为桌面游戏创建一个基本的战斗追踪器。我目前的目标是创建一个系统,在该系统中,根据用户输入,只需输入特定实体的名称和相应的数字,就可以提高或降低属于“实体”类的预设对象的 HP。

例如,如果 orkBoy 的伤口(又名 HP)默认设置为 12,而您想将其增加到 15,您可以输入:

orkBoy 3

或者如果您希望将其减少 2:

orkBoy -2

虽然如果您直接在代码中引用对象,系统可以完美运行,但由于 str 属性错误 (AttributeError: 'str' object has no attribute ',我无法通过用户的输入字符串引用对象伤口变化')。我将把代码放在下面,包括一个 try/except ,在我想要完成的事情上尝试并失败,以及一个提供不令人满意但成功的“解决方案”的异常。

class Entity:

    woundChange = 0

    def __init__(self, name, wounds, movement, weapon, melee):
        self.name = name
        self.wounds = wounds
        self.movement = movement
        self.weapon = weapon
        self.melee = melee

    def array(self):
        return '{}; HP: {}, {}, {}, {}'.format(self.name, self.wounds, self.movement, self.weapon, self.melee)

    def apply_damage(self):
        self.wounds = int(self.wounds + self.woundChange)



imperialGuard = Entity('Imperial Guardsman', 10, '3/6/9/18', 'Lasgun', 'Knife')
orkBoy = Entity('Ork Boy', 12, '3/6/9/18', 'Slugga', 'Choppa')


entity_damage = input('Input entity & wound change.\n')
entity_damage = entity_damage.split(' ')
print(entity_damage)
print('')

entityName = entity_damage[0]
entityNum = int(entity_damage[1])

try:
    entityName.woundChange = int(entityNum)
    entityName.apply_damage()
except AttributeError:
    print('No dice.')
    orkBoy.woundChange = int(entityNum)
    print(orkBoy.wounds)
    orkBoy.apply_damage()
    print(orkBoy.wounds)

感谢您的阅读,祝您周二快乐!

【问题讨论】:

  • 将实例存储在单个 dict 中,而不是单个变量中。

标签: python python-3.x class class-variables


【解决方案1】:

使用dict

entities = {
    'imperialGuard': Entity('Imperial Guardsman', 10, '3/6/9/18', 'Lasgun', 'Knife')
    'orkBoy': Entity('Ork Boy', 12, '3/6/9/18', 'Slugga', 'Choppa')
}

然后您可以使用用户输入来查找适当的对象。例如,

entities[entityName].apply_damage()

【讨论】:

  • 完美解决方案,谢谢chepner!
猜你喜欢
  • 2013-04-28
  • 2015-10-04
  • 1970-01-01
  • 1970-01-01
  • 2021-08-05
  • 1970-01-01
  • 2020-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多