我需要将一个需要按特定顺序排列的坐标整数列表转换为可迭代对象,以便小海龟可以前往这些坐标

0 投票
2 回答
43 浏览
提问于 2025-04-13 18:34
listplaceloc = doornum-1
coordinatelist[listplaceloc] = turtle.pos()
coordinatelist = [1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,15,16,17,18,19,20,21,22,23,24]
coordlistnum = 0    
turtle.goto(coordinatelist[coordlistnum])
coordlistnum +=1
turtle.pendown()
turtle.color("black")
while coordlistnum!= 24:
    iter (coordinatelist[coordlistnum])
    turtle.goto(coordinatelist[coordlistnum])
    coordlistnum += 1

我试过使用iter这个函数,但它说无法进行迭代。

2 个回答

0

因为 goto() 需要同时指定 X 和 Y 坐标,所以我能理解你的代码片段的方式就是你想要移动到:

(1, 2) -> (2, 3) -> (3, 4) -> ... -> (22, 23) -> (23, 24)

如果是这样的话,我们可以这样做:

from turtle import Screen, Turtle

coordinatelist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24]

screen = Screen()

turtle = Turtle()
turtle.penup()

coordlistnum = 0

while coordlistnum < len(coordinatelist) - 1:
    turtle.goto(coordinatelist[coordlistnum:coordlistnum+2])
    turtle.pendown()
    coordlistnum += 1

screen.exitonclick()

如果不是这样,你需要进一步说明你的问题。

0

如果我理解得没错,你的问题是想要遍历一下 coordinatelist,而你现在已经在这么做了。

你可以直接去掉 iter (coordinatelist[coordlistnum]),因为你已经在用一个计数器通过 while 循环遍历这个列表了,并且在循环中还在不断增加这个计数器。

coordlistnum = 0 
...
coordinatelist = [1,2,3,4,5,6,7,8,9,10,11,12,13,13,14,15,16,17,18,19,20,21,22,23,24]
while coordlistnum!= 24:
    turtle.goto(coordinatelist[coordlistnum])
    coordlistnum += 1

这意味着你会一直调用 coordinatelist 中的所有元素,直到你到达第 24 个元素(也就是元素 1 到 23,因为你在进入循环之前已经把 coordlistnum 增加过一次,一旦增加到 24 就会退出循环)。

iter() 会返回一个迭代器对象,这也是可以的,你只需要在这个迭代器上调用 next(),并像这样处理异常:

coordinatelistIter = iter(coordinatelist)
try:
    while True:
        coordinates = next(coordinatelistIter)
        ...
except StopIteration:
    pass

不过你可能更适合用一个简单的 for 循环,同时对列表进行切片,这样就能在第 23 个元素时停止。

for coordinate in coordinatelist[:24]:
   ...

或者你可以使用 enumerate,这样就能同时拿到索引和对应的值,当达到需要的索引时就退出循环:

for index, value in enumerate(coordinatelistIter):
   if index > 23:
      break
   turtle.goto(value)

撰写回答