鱼油们好!python 048讲动动手迭代器求闰年
这是题目这是我的代码,我想的是从0开始每次加一,每次加一后判断条件,符合的self.a就返回。但是运行起来既不报错也没有任何反应。。。希望大家指点迷津,谢谢{:10_281:}
class LeapYear:
def __init__(self, b=2020):
self.a = 0
self.b = b
def __iter__(self):
return self
def __next__(self):
self.a += 1
if self.a > self.b:
raise StopIteration
if (self.a%4) == 0 and (self.a%100 != 0):
self.a = self.a
return self.a
class LeapYear:
def __init__(self, b=2020):
self.a = 0
self.b = b
def __iter__(self):
return self
def __next__(self):
self.a += 1
if self.a > self.b:
raise StopIteration
if (self.a%4) == 0 and (self.a%100 != 0):
self.a = self.a
return str(self.a)+'是闰年'
return str(self.a)+'不是闰年'
l = LeapYear()
print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
好像是没有输出函数print? SyntaxError: cannot assign to function call 你的报错是这样吗 报错发来康康{:10_277:} Twilight6 发表于 2020-6-4 21:08
好.....好......好快{:10_285:} 小甲鱼的铁粉 发表于 2020-6-4 21:10
好.....好......好快
习惯就好 基本操作坐下 坐下 Twilight6 发表于 2020-6-4 21:12
习惯就好 基本操作坐下 坐下
{:10_266:} Twilight6 发表于 2020-6-4 21:08
这也不是理想的答案唉,有点不太灵活。还是说我的思路是不对的呢,这已经是能得到最好的改善 柿子饼同学 发表于 2020-6-4 21:10
你的报错是这样吗 报错发来康康
没有报错,什么东西都没有 柿子饼同学 发表于 2020-6-4 21:10
你的报错是这样吗 报错发来康康
这个报错可以认定是你自己的问题。 straightup 发表于 2020-6-4 21:19
这也不是理想的答案唉,有点不太灵活。还是说我的思路是不对的呢,这已经是能得到最好的改善
对啊这样就是手动打印闰年了,要不改成这种也行 加个循环 只显示闰年
class LeapYear:
def __init__(self, b=2020):
self.a = 0
self.b = b
def __iter__(self):
return self
def __next__(self):
while True:
self.a += 1
if self.a > self.b:
raise StopIteration
if (self.a%4) == 0 and (self.a%100 != 0):
self.a = self.a
return '闰年:'+str(self.a)+'年'
l = LeapYear()
print(next(l))
print(next(l))
print(next(l))
print(next(l))
print(next(l))
本帖最后由 永恒的蓝色梦想 于 2020-6-4 21:57 编辑
class LeapYear:
def __init__(self, b=2020):
self.a = 0
self.b = b
def __iter__(self):
return self
def __next__(self):
while self.a<self.b:
self.a+=1
if self.a%4==0 and (self.a%100!=0 or self.a%400==0):
return self.a
raise StopIteration Twilight6 发表于 2020-6-4 21:22
对啊这样就是手动打印闰年了,要不改成这种也行 加个循环 只显示闰年
谢谢你!不过照这个写法,那如果我想要获取2020年前的所有闰年,岂不是要弄好多个print函数,而且要弄多少个我自己也不知道。。。有没有能得到小甲鱼老师参考答案的那种效果(图在帖子开头) straightup 发表于 2020-6-4 21:29
谢谢你!不过照这个写法,那如果我想要获取2020年前的所有闰年,岂不是要弄好多个print函数,而且要弄多 ...
那直接加个循环就好了~
class LeapYear:
def __init__(self, b=2020):
self.a = 0
self.b = b
def __iter__(self):
return self
def __next__(self):
while True:
self.a += 1
if self.a > self.b:
raise StopIteration
if (self.a%4) == 0 and (self.a%100 != 0):
self.a = self.a
return self.a
l = LeapYear()
while True:
temp = next(l)
print(temp)
if temp > 2020:
break 永恒的蓝色梦想 发表于 2020-6-4 21:25
谢谢版主回复!但是我在IDLE里跑的时候,输入了题目的实现要求,还是什么都不显示...... straightup 发表于 2020-6-4 21:37
谢谢版主回复!但是我在IDLE里跑的时候,输入了题目的实现要求,还是什么都不显示......
把 else 块 和 break 去掉,第一次就 break 了能显示什么? Twilight6 发表于 2020-6-4 21:31
那直接加个循环就好了~
爱死你了{:10_281:}我在循环里加个try-except把StopIteration捕获后break,就能实现答案的效果了。谢谢你!那看来我之前测试没有反应就是因为没有输出内容,学习到了 straightup 发表于 2020-6-4 21:45
爱死你了我在循环里加个try-except把StopIteration捕获后break,就能实现答案的效果了。谢谢你 ...
哈哈哈 那就给个最佳吧 宝贝 永恒的蓝色梦想 发表于 2020-6-4 21:38
把 else 块 和 break 去掉,第一次就 break 了能显示什么?
对哦,谢谢版主提醒!因为我的是从小往上加的,把 else 块 和 break 去掉才能实现。不过我还有个问题,你发给我的代码,def __next__(self): 下面那行self.a+=1应该是要去掉的吧 straightup 发表于 2020-6-4 21:53
对哦,谢谢版主提醒!因为我的是从小往上加的,把 else 块 和 break 去掉才能实现。不过我还有个问题,你 ...
是的{:10_247:}又是一个只在交互式改了的 BUG{:10_262:}
页:
[1]
2