指定时返回无的链表n

2024-04-28 22:34:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个单链表,它返回给定范围内的奇数,而不是返回1、3、5等,而是返回1、None、3、None、5等。我想使它停止返回no和仅返回奇数。你知道吗

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 

Tags: noselfnonereturnifinitdefstep
1条回答
网友
1楼 · 发布于 2024-04-28 22:34:48

返回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))

相关问题 更多 >