gpt4 book ai didi

python - 关于迭代我做错了什么

转载 作者:太空宇宙 更新时间:2023-11-04 10:20:10 25 4
gpt4 key购买 nike

我想打印出调用中给出的所有奇数:o = Odds(10),输出应该是1, 3, 5, 7, 9 但是我在评论区做错了,应该是相对的很简单,但我看不到。

class Odds:
def __init__(self, arg):
self.num = arg

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

class OddsIterator:
def __init__(self, arg):
self.high = arg
self.low = 1

def __next__(self):
if self.low <= self.high:
if (self.low % 2) == 0: #somethings wrong around here
self.low += 1
else:
self.low += 1
return self.low - 1
raise StopIteration

最佳答案

您的具体问题是第一个偶数将落入 StopIteration 行,使您的序列相当短:{ 1 }

在我看来,生成所有奇数应该容易得多。从 -1 开始,然后在每次调用时:

  • 加两个。
  • 如果太高,停止。
  • 否则返回当前值。

这可以通过以下方式实现:

class Odds:
def __init__(self, arg):
self.num = arg

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

class OddsIterator:
def __init__(self, arg):
self.high = arg
self.curr = -1

def __next__(self):
self.curr += 2
if self.curr > self.high:
raise StopIteration
return self.curr

o = Odds(10)
for i in o:
print (i)

话虽如此,我不确定我是否会像您那样实现它。当您可以将它们组合成一个时,似乎没有必要拥有两个单独的类:

class Odds:
def __init__(self, end):
self.curr = -1
self.lim = end

def __next__(self):
self.curr += 2
if self.curr > self.lim:
raise StopIteration
return self.curr

def __iter__(self):
return self

o = Odds(10)
for i in o:
print (i)

此外,您还可以通过提供 startstep 值使其更加通用:

class XFor:
def __init__(self, start, end, step):
self.curr = start - step
self.lim = end
self.step = step

def __next__(self):
self.curr += self.step
if self.curr > self.lim:
raise StopIteration
return self.curr

def __iter__(self):
return self

o = XFor(1,10,2)
for i in o:
print (i)

虽然它会危险地侵占 range() 的功能,但我还是会使用它。除非您的目的是自学,否则请玩得开心。

关于python - 关于迭代我做错了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32733656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com