我目前正在开发一个迷你项目,用户输入一个数字,然后生成数量的海龟并向中间竞赛。海龟是通过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.
答案 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
,直到找到合适的海龟。
因此,两种设计都有权衡。还有其他可能的设计(当然,包括上面两个想法的结合),都有自己的权衡。在选择数据结构之前,确切了解如何使用数据非常重要。但是,一旦你解决了这个问题,就有可能做到这一点,如果你自己无法弄清楚,你可以在这里提出一个新问题。