我知道这是一个非常简单的问题,但不幸的是我不知道足以有效地搜索答案。我应该已经知道的任何答案或链接将非常感激。
我想要做的是在Python中创建一个环境,我有一堆乌龟在做各种事情(它基本上就像麻省理工学院的StarLogo)。
class Turtle:
def __init__(self,x,y):
self.xpos = float(x)
self.ypos = float(y)
self.head = 0.0
numTurtles = 4
for i in range(numTurtles):
...
MyTurtles = [...]
每只乌龟都有一个x位置,一个y位置和一个标题(以弧度表示)。我想做的就是创建它们并告诉它们站在哪里(它们的x和y坐标),然后将所有的乌龟放入一个列表中,以便稍后我可以告诉整个组采取某种行动。
我希望能够改变海龟的数量,否则我只会称它们为[a,b,c,d]。但我认为必须有更好的方法。
答案 0 :(得分:6)
您应该在执行循环时直接将海龟添加到列表中,例如
my_turtles = []
for i in range(num_turtles):
x = ...
y = ...
h = ...
my_turtles.append(Turtle(x, y, h))
通常也可以将其写为“列表理解”:
my_turtles = [Turtle(..., ..., ...) for i in range(num_turtles)]
答案 1 :(得分:2)
如果您希望某些唯一名称可以访问它们,但避免使用十亿个变量,则可以始终将它们存储在dict
内。
{ "Norma": Turtle(1, 2), "Kyle": Turtle(3, 4) }
您可以根据需要修改字典,添加和删除字典。
turtles["Norma"] = Turtle(30, 40) # we just replaced Norma
turtles["Rackham"] = Turtle(0, 1) # a new turtle added.
如果您不想手动制作,可以通过多种方式生成这样的字典。
使用zip
我们可以进行两次迭代,并从连续值中成对:
zip(["Norma", "Rackham"], [Turtle(1, 2), Turtle(0, 1)])
结果是一个可循环的返回元组(维度由给zip的参数数量决定。)
很容易,字典构造函数可以采用这样的列表:
dict(zip(["Norma", "Rackham"], [Turtle(1, 2), Turtle(0, 1)]))
Etvoilá。字典。
您还可以使用字典表达式(可用性取决于Python版本):
{ name: turtle for name, turtle in zip(names, turtles) }
答案 2 :(得分:0)
class Turtle(object):
def __init__(self,x,y,name):
self.xpos = float(x)
self.ypos = float(y)
self.head = 0.0
self.name = name
my_turtles = []
for name, i in zip(xrange(num_turtles), names):
x = ...
y = ...
h = ...
my_turtles.append(Turtle(x, y, h, name))
答案 3 :(得分:0)
class Turtle:
def __init__(self,x,y):
self.xpos = float(x)
self.ypos = float(y)
self.head = 0.0
def certain_action():
# Do action
numTurtles = 4
MyTurtles = []
# Need to set x and y
for i in range(numTurtles):
MyTurtles.append(Turtle(x,y))
for t in MyTurtles:
t.certain_action()