【问题标题】:Adding named turtles in list?在列表中添加命名海龟?
【发布时间】:2018-08-24 21:05:04
【问题描述】:

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

【问题讨论】:

  • 可以按照与海龟本身相同的顺序列出海龟的名字。您只需要顶部的Names = [],然后在if 内的Names.append('Blue')(或者,更简单地说,只需去掉if 并执行Names.append(z))。但这可能不是你想要的。使用两个完全独立的列表比使用单个列表或其他集合更复杂。

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


【解决方案1】:

目前尚不完全清楚您要将这些名称用于什么目的以及在何处访问它们,但我会为您提供两种具有不同功能的不同设计。

首先,你可以保留一个字典,而不是海龟对象的列表,将海龟名称映射到海龟对象:

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,直到找到匹配的那个。如果你永远不必这样做,这是一个很棒的设计,但如果你这样做了,那就不是了。


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

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

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

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

但如果你想通过名字查找一只乌龟,唯一的办法就是遍历所有乌龟并检查它们的name,直到找到正确的。


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

【讨论】:

    猜你喜欢
    • 2017-10-21
    • 2018-09-14
    • 2016-08-11
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多