【问题标题】:linked list returning none when specified not too链表在指定时不返回任何内容
【发布时间】:2017-09-25 03:46:11
【问题描述】:

我正在创建一个单链表,它返回给定范围内的奇数,而不是返回 1、3、5 等,而是返回 1、无、3、无、5 等。我想做以便它停止返回 None 并且只返回奇数。

class Odds:
    def __init__(self,end):
        self.__start = 1
        self.__end = end

    def __iter__(self):
        return OddsIterator(self.__end)

class OddsIterator:
    def __init__(self,finish): 
        self.__current = 0
        self.__step = 1
        self.__end = finish

    def __next__(self):
        x = None
        if self.__current > self.__end:
            raise StopIteration 
        else:
            self.__current += self.__step 
            if (self.__current - self.__step + 1) % 2 != 0:
                x = self.__current - self.__step + 1
        if x != None:
            return x 

【问题讨论】:

  • 停止使用双层名称修改

标签: python list return


【解决方案1】:

返回None 的原因是在没有return 语句的情况下有可能到达__next__ 的末尾,在这种情况下,任何Python 函数都会返回None。这里的解决方案是在初始化的时候设置self.__step = 2self.__current = 1。您也可以删除if x != None:,因为它什么都不做。为了适应self.__current 的新定义,我在下面做了一些其他的小改动。目前下面的代码不会包含最终值,如果你想把self.__current >= self.__end改为self.__current > self.__end

class Odds:
    def __init__(self,end):
        self.__start = 1
        self.__end = end

    def __iter__(self):
        return OddsIterator(self.__end)

class OddsIterator:
    def __init__(self,finish):
        self.__current = 1
        self.__step = 2
        self.__end = finish

    def __next__(self):
        x = None
        if self.__current >= self.__end:
            raise StopIteration
        else:
            return_value = self.__current
            self.__current += self.__step
            return return_value

odds = Odds(21)
print(list(odds))

【讨论】:

  • 将步长更改为 2 意味着如果最后使用奇数,那么它将返回比应有的多 1,即Odds(22) 将在末尾有 23
  • 好收获!我现在已经解决了这个问题,希望逻辑更清晰。
  • 谢谢,我在__init__ 函数的if 语句中添加了如果输入奇数,则从结束值减去1,干杯!
猜你喜欢
  • 2012-10-13
  • 2021-03-05
  • 2020-04-27
  • 2019-04-06
  • 2012-02-15
  • 2020-09-07
  • 2021-11-22
  • 2015-11-06
  • 2013-11-14
相关资源
最近更新 更多