将用户输入字符串转换为引用 pre-existing class object 的方法?
Method for translating a user input string to reference a pre-existing class object?
如果标题有点不正确,请原谅我,我是 Python 的 类 的新手,不完全 知道什么它的各种错综复杂的名称。最好的猜测!
你好!我正在做一个小示例项目,运行 遇到了障碍。目前我正在尝试为桌面游戏创建一个基本的战斗跟踪器。我目前的目标是创建一个系统,根据用户输入,只需输入名称,就可以提高或降低属于 class 'Entity' 的预设 object 的 HP具体实体编号及对应编号。
例如,如果 orkBoy 的伤害(又名 HP)默认设置为 12,而您想将其增加到 15,则可以输入:
orkBoy 3
或者,如果您希望减少 2:
orkBoy -2
虽然如果您在代码中直接引用 object 系统可以完美运行,但由于 str 属性错误 ,我无法通过用户输入的字符串引用 object ](AttributeError: 'str' object 没有属性 'woundChange')。我将把代码放在下面,包括一个 try/except,它在我想要完成的事情上尝试并失败,以及一个提供不令人满意但成功的异常 'solution'.
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
:
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()
如果标题有点不正确,请原谅我,我是 Python 的 类 的新手,不完全 知道什么它的各种错综复杂的名称。最好的猜测!
你好!我正在做一个小示例项目,运行 遇到了障碍。目前我正在尝试为桌面游戏创建一个基本的战斗跟踪器。我目前的目标是创建一个系统,根据用户输入,只需输入名称,就可以提高或降低属于 class 'Entity' 的预设 object 的 HP具体实体编号及对应编号。
例如,如果 orkBoy 的伤害(又名 HP)默认设置为 12,而您想将其增加到 15,则可以输入:
orkBoy 3
或者,如果您希望减少 2:
orkBoy -2
虽然如果您在代码中直接引用 object 系统可以完美运行,但由于 str 属性错误 ,我无法通过用户输入的字符串引用 object ](AttributeError: 'str' object 没有属性 'woundChange')。我将把代码放在下面,包括一个 try/except,它在我想要完成的事情上尝试并失败,以及一个提供不令人满意但成功的异常 'solution'.
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
:
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()