我很好地开发基于文本的RPG。现在,我的商店系统非常冗长而且令人费解,因为有很多重复的代码。我目前正在进行的想法是,我有一个可供销售的物品清单,并且基于用户的原始输入,它会将这些物品与if/else语句相关联,假设我有适当的物品和玩家类,即:如何通过原始输入从课堂获取信息
store = ['sword', 'bow', 'health potion']
while True:
inp = raw_input("Type the name of the item you want to buy: ")
lst = [x for x in store if x.startswith(inp)
if len(lst) == 0:
print "No such item."
continue
elif len(lst) == 1:
item = lst[0]
break
else:
print "Which of the following items did you mean?: {0}".format(lst)
continue
if item == 'sword':
user.inventory['Weapons'].append(sword.name)
user.strength += sword.strength
user.inventory['Gold'] -= sword.cost
elif item == 'bow'
#Buy item
#Rest of items follow this if statement based off the result of item.
正如你所看到的,我使用的是“项目”变量的结果来确定行,如果/ elif的/为每个项目else语句,会发生什么,如果该项目名称等于到变量'item'。相反,我希望玩家能够输入项目名称,然后将原始输入转换为类名称。换句话说,如果我输入'剑',我希望Python从'剑'对象类中提取信息,并将这些值应用到玩家。例如,武器的伤害转移到玩家的技能上。如果一把剑造成5点力量伤害,那么玩家的力量会提高5.如何让python将一个类别的值添加到另一个类别而不需要大量的if/else语句?
感谢您花时间帮忙!当我使用getattr方法时,Python返回一条错误消息,说我的Item类中的'Item'对象没有属性'__name__'。这是什么意思? – PyDive
这应该是一个单独的问题。除了给出的相当好的答案之外,您还需要验证输入的数据/异常情况以完成“存储”功能。 – Wakaru44
上面的代码假定它从项目类中选择属性 - 如果它们已经实例化,则实例不具有“__name__”属性。但是你可以使用'item .__ class __.__ name__'。 – jsbueno