这是我需要转换为while循环的for循环。我以为这会行得通,但这给了我一个错误,那就是没有任何可动的属性。这是一个创建人脸图形图像的程序,因此“ shapeList”中的所有“形状”都是头部,鼻子,嘴巴,眼睛。面需要沿着窗口的边缘移动。
def moveAll(shapeList, dx, dy):
for shape in shapeList:
shape.move(dx, dy)
def moveAll(shapeList, dx, dy):
shape = []
while shape != shapeList:
shapeList.append(shape)
shape.move(dx, dy)
答案 0 :(得分:0)
在代码的while
循环版本中,shape
变量被初始化为列表,因此自然没有move
方法。要将for
循环转换为基本上与遍历形状对象列表有关的while
循环,可以将列表转换为collections.deque
对象,以便有效地将队列从队列中移出。调整对象直到其为空:
from collections import deque
def moveAll(shapeList, dx, dy):
queue = deque(shapeList)
while queue:
shape = queue.popleft()
shape.move(dx, dy)
答案 1 :(得分:0)
奇怪的问题,奇怪的答案呵呵
def moveAll(shapeList, dx, dy):
try:
ilist = iter(shapeList)
while True:
shape = next(ilist)
shape.move(dx, dy)
except:
pass # done
答案 2 :(得分:0)
也许是这样吗?
def moveAll(shapeList, dx, dy):
while shapeList:
shape = shapeList.pop(0)
shape.move(dx, dy)
只要列表中有项目,我们就将其删除并进行处理。
for
循环可能更高效,也更惯用。