为了账号安全,请及时绑定邮箱和手机立即绑定

将 for 循环更改为 while 循环

将 for 循环更改为 while 循环

富国沪深 2021-12-09 10:43:31
这是我需要转换为 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 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

也许是这样的?


def moveAll(shapeList, dx, dy):

    while shapeList:

        shape = shapeList.pop(0)

        shape.move(dx, dy)

只要列表中有项目,我们就会删除一个并处理它。


不过,这个for循环可能更高效也更惯用。


查看完整回答
反对 回复 2021-12-09
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

奇怪的问题,奇怪的答案嘿嘿


def moveAll(shapeList, dx, dy): 

    try:

        ilist = iter(shapeList)

        while True:

            shape = next(ilist)

            shape.move(dx, dy)

    except:

        pass # done


查看完整回答
反对 回复 2021-12-09
?
米脂

TA贡献1836条经验 获得超3个赞

在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)


查看完整回答
反对 回复 2021-12-09
  • 3 回答
  • 0 关注
  • 306 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信