代码之家  ›  专栏  ›  技术社区  ›  PapeK24

Pycharm调试程序断开

  •  -1
  • PapeK24  · 技术社区  · 7 年前

    嗨,我有四个方向的列表和方法

    directions = ["NORTH", "EAST", "SOUTH", "WEST"]
    def rotate_left(self):
        cycled = cycle(self.directions)
        current = dropwhile(lambda x: x != self.direction, cycled)
        self.direction = next(current)
    

    但不知怎的,在这种方法之后,我的程序毫无例外地停止了

    知道为什么吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Wondercricket    7 年前

    我能够用以下代码重复您的问题描述

    from itertools import cycle, dropwhile
    
    direction = None
    directions = ["NORTH", "EAST", "SOUTH", "WEST"]
    cycled = cycle(directions)
    current = dropwhile(lambda x: x != direction, cycled)
    direction = next(current)
    

    没有剩下的代码很难说,但从外观上看 direction directions 列表意思是两者都不是 NORTH , SOUTH , EAST WEST (区分大小写)。这会导致在 cycle dropwhile

    如果您阅读以下文档: itertools , dropwhile

    制作一个迭代器,只要谓词为true,就从iterable中删除元素;然后,返回每个元素

    首先,给定 dropwhile公司 只要谓词为true,就会删除元素。一旦谓词达到false值,它将最终停止,然后返回剩余的元素。第二,使用 cycle 生成重复迭代器

    制作一个迭代器,从iterable返回元素,并保存每个元素的副本。当iterable用完时,从保存的副本返回元素。无限期重复

    方向 中不存在 , dropwhile公司 是通过一个无限长的迭代器进行查找,但从未达到破坏它的情况

        2
  •  0
  •   PapeK24    7 年前

    问题似乎是dropwhile()条件在我的代码中永远无法实现。由于pythons的延迟执行,似乎是我调用next()的问题,但这只是因为当时执行了dropwhile(),导致它在无尽的列表中循环,而从未完成条件。

    很抱歉浪费大家的时间。