鱼C论坛

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

python中关于自己实现range方法

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

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

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

x
class MyRange:

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

        if end is not None:
            self.start = start
            self.end = end
        else:
            self.start = 0
            self.end = start

        self.step = step

    def __iter__(self):
        return self

    def __next__(self):

        while True:
            if self.step > 0:
                if self.start < self.end:
                    current = self.start
                    self.start += self.step
                    return current

            elif self.step < 0:
                if self.start > self.end:
                    current = self.start
                    self.start += self.step
                    return current

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


for i in MyRange(10):
    print(i)


能实现range的效果 可是执行程序后打印完后 程序一直处于执行状态 无法结束 该如何优化代码呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

            if self.start > self.end:
                raise StopIteration
            else:
                self.start += self.step
                return self.start 


2018-07-02_165752.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你这个代码有问题呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

有问题你不会自己改?什么都要人家帮你弄好,你自己还学什么。
真心不想多说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我只是给你指正错误,你不接受就算了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

恩 我知道是死循环的问题 可是不加while true 他会一直返回None
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

        while True:
            if self.step > 0:
                if self.start < self.end:
                    current = self.start
                    self.start += self.step
                    return current

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

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

            elif self.step < 0:
                if self.start > self.end:
                    current = self.start
                    self.start += self.step
                    return current

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

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

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

OK OK 问题解决了 现在再考虑考虑优化代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

11.png
22.png
33.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-7-7 08:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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