Python:调用定义时使用变量
我目前正在为CompSci课程制作一个游戏,我想缩短我们的随机怪物战斗。有没有办法让我在调用def时可以根据随机变量更改名称?这就是我要说的片段 我有Python:调用定义时使用变量,python,Python,我目前正在为CompSci课程制作一个游戏,我想缩短我们的随机怪物战斗。有没有办法让我在调用def时可以根据随机变量更改名称?这就是我要说的片段 我有 def Monster1 def Monster2 def Monster3 . . . def Monster20 我希望第一个代码片段中的*是变量MonsterType,有没有办法让它这样做?也就是说,当它运行时,如果MonsterType=15,则调用的将是Monster13()。是的,有一种方法,创建一个字典并将每个函数映射到一个整数
def Monster1
def Monster2
def Monster3
.
.
.
def Monster20
我希望第一个代码片段中的*是变量MonsterType,有没有办法让它这样做?也就是说,当它运行时,如果MonsterType=15,则调用的将是Monster13()。是的,有一种方法,创建一个
字典
并将每个函数映射到一个整数:
import random
def monster1():
print "Hello monster1"
def monster2():
print "Hello monster2"
def monster3():
print "Hello monster3"
def monster4():
print "Hello monster4"
d = {1:monster1, 2:monster2, 3:monster3, 4:monster4}
#When you need to call:
monsterType = random.randint(1, 4)
d[monsterType]()
是的,有一种方法,创建一个
字典
并将每个函数映射到一个整数:
import random
def monster1():
print "Hello monster1"
def monster2():
print "Hello monster2"
def monster3():
print "Hello monster3"
def monster4():
print "Hello monster4"
d = {1:monster1, 2:monster2, 3:monster3, 4:monster4}
#When you need to call:
monsterType = random.randint(1, 4)
d[monsterType]()
在阅读了您试图实现的目标后,我相信使用OOP将更适合您的情况:
# A class for a bunch of monsters
class Mob(object):
def __init__(self, num_monsters):
self._num_monsters = num_monsters
self._monsters = []
for i in range(self._num_monsters):
# randomly create a type of monster based on the number of monsters
self._monsters.append(Monster(random.randint(0, self._num_monsters)))
# Each monster has a type that is attacks with
class Monster(object):
def __init__(self, monster_type):
self._type = monster_type
def attack(self):
print(self._type)
test = Mob(20)
在阅读了您试图实现的目标后,我相信使用OOP将更适合您的情况:
# A class for a bunch of monsters
class Mob(object):
def __init__(self, num_monsters):
self._num_monsters = num_monsters
self._monsters = []
for i in range(self._num_monsters):
# randomly create a type of monster based on the number of monsters
self._monsters.append(Monster(random.randint(0, self._num_monsters)))
# Each monster has a type that is attacks with
class Monster(object):
def __init__(self, monster_type):
self._type = monster_type
def attack(self):
print(self._type)
test = Mob(20)
听起来你使用了一点OOP。我建议:
class Monster(object):
def __init__(self, name):
self.name = name
def do_work(self):
print self.name
然后创建一个可以生成n个怪物对象的管理器,并提供一个静态方法来管理要调用的对象:
class MonsterManager(object):
monsters = []
def call_monster(self, index):
monsters[i].do_work()
有了它,您可以有更好的用途,如:
manager = MonsterManager();
manager.monsters.append(Monster('Monster1')
manager.monsters.append(Monster('Monster2')
# etc
# then call a single monster
manager.call_monster(i)
听起来你用了一点OOP。我建议:
class Monster(object):
def __init__(self, name):
self.name = name
def do_work(self):
print self.name
然后创建一个可以生成n个怪物对象的管理器,并提供一个静态方法来管理要调用的对象:
class MonsterManager(object):
monsters = []
def call_monster(self, index):
monsters[i].do_work()
有了它,您可以有更好的用途,如:
manager = MonsterManager();
manager.monsters.append(Monster('Monster1')
manager.monsters.append(Monster('Monster2')
# etc
# then call a single monster
manager.call_monster(i)
我不明白。你是在谈论继承吗?你能发布你的实际代码并更清楚地解释你的问题吗?我澄清了一点。基本上,*将是一个由类型决定的数字。只是想知道是否有办法将数字设置为怪物类型,而不是为每个怪物创建一组if和elif语句。创建一个基本怪物类型,然后创建一组从中继承的怪物。然后制作一个包含所有怪物的阵列。然后使用你生成的随机整数访问数组中的怪物。我会注意到,你通常想要的不是这个,而是一种可以根据需要为你生成怪物的方法。我不明白。你是在谈论继承吗?你能发布你的实际代码并更清楚地解释你的问题吗?我澄清了一点。基本上,*将是一个由类型决定的数字。只是想知道是否有办法将数字设置为怪物类型,而不是为每个怪物创建一组if和elif语句。创建一个基本怪物类型,然后创建一组从中继承的怪物。然后制作一个包含所有怪物的阵列。然后使用您生成的随机整数访问数组中的怪物。我会注意到,您通常想要的不是这个,而是一种可以根据需要为您生成怪物的方法。我甚至不会向不熟悉这是一个坏主意的人建议
eval()
。那只会很危险。也许说永远不要使用eval()
,如果有的话:)我甚至不会向不知道为什么一开始使用eval()
的人建议。那只会很危险。也许说永远不要使用eval()
如果有的话:)哈哈,我的想法正是如此。我喜欢你的容器类名“mob”哈哈,我的想法正是如此。我喜欢你的容器类名“mob”