如何从列表中拉出元组并将乌龟连接为坐标?

时间:2017-03-18 07:30:14

标签: python-3.x tuples turtle-graphics

编写一个名为connectTheDots的函数,它接受一个元组列表作为输入和一个可选的颜色输入。默认颜色值应为黑色。每个元组都是乌龟的坐标对(x,y)。该函数将通过从第一个坐标开始然后依次移动到每个坐标来让乌龟描绘出图片。

您的功能应该执行以下操作:

一个。创建一只乌龟,适当地设置乌龟的颜色和速度

湾检查输入列表是否为空:如果它是空的,则不会发生任何其他事情!

℃。在不留下线的情况下,将乌龟移动到列表中给出的第一个位置。然后再开始留下一条线。注意:回想一下如何从列表中提取值,并且还知道goto方法可以将单个(x,y)元组作为其输入:myTurtle.goto((25,25))将myTurtle移动到x = 25并且y = 25。

d。乌龟在起始坐标后,依次将其移动到列表中的每个坐标。

这是我迄今为止所做的:

def connectTheDots(list1,color =“black”):

myTurtle = turtle.Turtle()
myTurtle.speed(1)
myTurtle.goto(list1[0])
for x,y in list1[1:]: #I'm unsure if this is correct
   myTurtle.goto(x,y)        

1 个答案:

答案 0 :(得分:0)

你拥有自己需要的大部分东西,但可能会使它变得比需要的更复杂,并且缺少一些小细节。

对于步骤“a”,您需要明确设置颜色(您将其传递给了它)。你可能最好使用符号速度而不是数字速度。

对于步骤“b”,如果您有一个正确的for ... in循环,则无需显式检查列表是否为空,因为如果循环不会运行是。分离第一个项目myTurtle.goto(list1[0])会对您不利,因为可能没有,导致IndexError

对于步骤“c”,您需要添加另一个命令。海龟的笔在他们的笔下开始生活在屏幕的中心。你需要在创建乌龟后抬起笔。但是你不需要明确地移动到起始位置,让你的循环处理它。

我们将用于步骤“c”步骤“d”的技巧是将笔放在循环中goto()之后。第一次,这实际上把笔放下了,之后,这是一个无害的无操作:

import turtle

def connectTheDots(coordinates, color="black"):
    myTurtle = turtle.Turtle()
    myTurtle.speed("slowest")
    myTurtle.color(color)
    myTurtle.penup()

    for coordinate in coordinates:
        myTurtle.goto(coordinate)
        myTurtle.pendown()  # redundant after first iteration

dots = ((34, 56), (100, 240), (230, 105), (34, 56))

connectTheDots(dots, "green")

turtle.done()

如果让我们感到困扰的是我们将笔不必要地放在循环中,那么我们可以将myTurtle.pendown()替换为:

if not myTurtle.isdown():
            myTurtle.pendown()