将for循环更改为while循环

时间:2019-03-19 01:07:57

标签: python loops for-loop while-loop

这是我需要转换为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)

3 个答案:

答案 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循环可能更高效,也更惯用。