在列表中添加命名的海龟?

时间:2018-03-15 21:54:05

标签: python list if-statement append turtle-graphics

我目前正在开发一个迷你项目,用户输入一个数字,然后生成数量的海龟并向中间竞赛。海龟是通过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.

1 个答案:

答案 0 :(得分:1)

您想要使用这些名称以及您想要访问它们的位置并不完全清楚,但我将为您提供两种具有不同功能的不同设计。

首先,您可以保留一个dict,将乌龟名称映射到乌龟对象,而不是乌龟对象列表:

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()

这个设计的问题在于你有一只乌龟,并且你想知道他的名字,找到的唯一方法是通过name, racer中的每个items(),直到找到一个匹配。如果你永远不必这样做,这是一个很棒的设计,但如果你这样做,那就不是。

或者,您可以将名称存储为龟对象本身的额外属性。你不想调用属性color,因为它隐藏了一个对龟对象有用的方法,但是你可以调用它,比如name

Racers = []
y = turtle.turtle()
y.name = "Blue"
Racers.append(y)

现在你只有一个海龟列表。如果你想打印出获胜者的名字,那就更容易了:

print('The winning turtle is', winning_turtle.name)

但如果你想通过名字查找一只乌龟,唯一的方法就是通过所有海龟并检查他们的name,直到找到合适的海龟。

因此,两种设计都有权衡。还有其他可能的设计(当然,包括上面两个想法的结合),都有自己的权衡。在选择数据结构之前,确切了解如何使用数据非常重要。但是,一旦你解决了这个问题,就有可能做到这一点,如果你自己无法弄清楚,你可以在这里提出一个新问题。