我目前正在做一个迷你项目,用户输入一个数字,然后生成该数量的海龟并跑到中间。这些海龟是通过while
语句创建的,然后使用嵌套的if
语句以其颜色命名。
有没有办法列出这些海龟的列表,或者有办法将它们添加到一个列表中,我可以在比赛中使用随机函数来确保每个转弯都有随机颜色移动。我似乎无法列出包含海龟名称的列表。(下面是我的代码的简化和重点版本。
import turtle
y = turtle.turtle()
Racers = []
if Z == "Blue":
Blue = y
Racers.append(Blue)
elif Z == "Yellow":
Yellow = y
Racers.append(Blue)
etc.
目前还不完全清楚你想使用这些名称做什么,以及你想在哪里访问它们,但我会给你两种不同的设计,不同的功能。
首先,您可以保留一个字典,而不是对象列表,将名称映射到对象:
Racers = {}
y = turtle.turtle()
z = "Blue"
Racers[z] = y
现在,如果您想要所有名称的列表,那只是Racers
中所有键的列表:
list(Racers)
或者,如果你实际上不需要列表,你只需要循环访问它们,只需使用Racers
本身 - 当你循环字典时,你会得到它的键。
如果你想要一个对象列表,那就是值:
Racers.values()
如果要将名称和对象循环在一起,则为以下项:
for name, racer in Racers.items():
print(name)
racer.do_something()
这种设计的问题在于你有一只,你想知道他的名字,找出答案的唯一方法是遍历items()
的每一name, racer
,直到找到匹配的那只。如果你永远不必这样做,这是一个伟大的设计,但如果你这样做,它就不是。
或者,您可以将名称作为额外属性存储在 turtle 对象本身上。您不想调用属性color
,因为这在 turtle 对象上隐藏了一个有用的方法,但您可以调用它,比如说,name
:
Racers = []
y = turtle.turtle()
y.name = "Blue"
Racers.append(y)
现在你只有一个海龟名单。如果您想打印出获胜者的名字,那就更容易了:
print('The winning turtle is', winning_turtle.name)
但是,如果您想按名称查找,唯一的方法是遍历所有海龟并检查它们的name
,直到找到合适的。
因此,这两种设计都有权衡。还有其他可能的设计(当然包括结合上面的两个想法),它们都有自己的权衡。在选择数据结构之前,准确确定如何使用数据非常重要。但是,一旦你解决了这个问题,可能有一种方法可以做到这一点,如果你自己想不通,你可以在这里问一个新问题。