如何从列表中拉出元组,并让海龟将它连接为坐标?

问题描述:

编写一个名为connectTheDots的函数,它接受元组列表作为其输入,并输入一个可选的颜色输入。默认的颜色值应该是黑色的。每个元组都是一个乌龟的坐标对(x,y)。该功能将使龟从第一个坐标开始追踪图像,然后依次移动到每个坐标。如何从列表中拉出元组,并让海龟将它连接为坐标?

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

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

b。检查输入列表是否为空:如果它是空的,则不会发生其他情况!

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

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

这是我已经能够到目前为止做:

高清connectTheDots(列表1,颜色=“黑”):

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)   

你有你最需要什么,但很可能使它比需要更复杂,缺少一些小细节。

对于步骤“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()