鱼C论坛

 找回密码
 立即注册
查看: 1159|回复: 8

python中关于自己实现range方法

[复制链接]
发表于 2018-7-2 16:28:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

  1. class MyRange:

  2.     def __init__(self, start, end=None, step=1):

  3.         if end is not None:
  4.             self.start = start
  5.             self.end = end
  6.         else:
  7.             self.start = 0
  8.             self.end = start

  9.         self.step = step

  10.     def __iter__(self):
  11.         return self

  12.     def __next__(self):

  13.         while True:
  14.             if self.step > 0:
  15.                 if self.start < self.end:
  16.                     current = self.start
  17.                     self.start += self.step
  18.                     return current

  19.             elif self.step < 0:
  20.                 if self.start > self.end:
  21.                     current = self.start
  22.                     self.start += self.step
  23.                     return current

  24.             else:
  25.                 raise ValueError("MyRange() step argument must not be zero")


  26. for i in MyRange(10):
  27.     print(i)
复制代码



能实现range的效果 可是执行程序后打印完后 程序一直处于执行状态 无法结束 该如何优化代码呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2018-7-2 16:58:35 | 显示全部楼层
  1.     def __next__(self):
  2.             current = self.start
  3.             if current > self.end:
  4.                 raise StopIteration
  5.             else:
  6.                 self.start += self.step
  7.                 return current
复制代码

  1.     def __next__(self):

  2.             if self.start > self.end:
  3.                 raise StopIteration
  4.             else:
  5.                 self.start += self.step
  6.                 return self.start
复制代码



2018-07-02_165752.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-2 18:59:44 | 显示全部楼层

你这个代码有问题呀
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-2 19:44:33 | 显示全部楼层
雪落千寒丶 发表于 2018-7-2 18:59
你这个代码有问题呀

有问题你不会自己改?什么都要人家帮你弄好,你自己还学什么。
真心不想多说
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-3 16:35:00 | 显示全部楼层
ba21 发表于 2018-7-2 19:44
有问题你不会自己改?什么都要人家帮你弄好,你自己还学什么。
真心不想多说

我只是给你指正错误,你不接受就算了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-3 16:35:48 | 显示全部楼层
iwanna 发表于 2018-7-2 22:00
因为你定义了一个死循环啊,range是一个生成器,定义__next__方法就可以不断的生成下一个值,到头就raise S ...

恩 我知道是死循环的问题 可是不加while true 他会一直返回None
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-3 17:32:35 | 显示全部楼层
  1.     def __next__(self):

  2.         while True:
  3.             if self.step > 0:
  4.                 if self.start < self.end:
  5.                     current = self.start
  6.                     self.start += self.step
  7.                     return current

  8.                 elif self.start == self.end:
  9.                     exit()

  10.                 else:
  11.                     raise ValueError("if step > 0, start must less than end.")

  12.             elif self.step < 0:
  13.                 if self.start > self.end:
  14.                     current = self.start
  15.                     self.start += self.step
  16.                     return current

  17.                 elif self.start == self.end:
  18.                     exit()

  19.                 else:
  20.                     raise ValueError("if step < 0 , start must great than end.")

  21.             else:
  22.                 raise ValueError("MyRange() step argument must not be zero")
复制代码


OK OK 问题解决了 现在再考虑考虑优化代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-7-3 19:33:22 | 显示全部楼层
雪落千寒丶 发表于 2018-7-3 16:35
我只是给你指正错误,你不接受就算了

用得着你指正吗?
我的代码有问题还是你有代码有问题?__next__方法内还用while 麻烦你还是把基础打牢。别乱指错误。

好心给你指点不接受还乱指错误;小小问题都不会纠正,还非得要别人给你上个全正确代码

敢问我的代码何处有问题????

11.png
22.png
33.png
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-12 19:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表