range不可以使用小数做步长,实现一个可迭代对象,可以实现小数步长分析:

"""需求:range不可以使用小数做步长,实现一个可迭代对象,可以实现小数步长分析:

range() 报错
range(10) 0-9 传入的是结束值
range(1,10) 1-9 第一个值是起始值,第二个是结束值
range(1,10,2) 1 3 5 7 9 第一个值是起始值,第二个是结束值,第三个值是步长值
​
for i in range(10)
​
可以实现小数步长
​
校验-操作:
    要求:传入的数据应该是int类型或者是float类型

"""from decimal import Decimal

class Range:

def __init__(self,x,y=None,z=1):
    if not isinstance(x,(int,float)) or not isinstance(z,(int,float)):
        raise TypeError # 抛出异常,告知程序员不能这样调用,类型有问题
    elif y != None and not isinstance(y,(int,float)):
        raise TypeError
    else:
        if y == None:
            # 只传了一个值
            self.start = Decimal('0')
            self.end = x
        else:
            # 传了两个或三个值
            self.start = Decimal(str(x))
            self.end = y
            
        self.step = Decimal(str(z)) # 无论如何都记录z的值
​
def __iter__(self):
    return self
​
def __next__(self):
    # 返回起始值,修改起始值
    res = self.start # 保存操作之前的起始值,因为要包含开头
    if self.start >= self.end:
        raise StopIteration
    self.start += self.step # 修改起始值
    return float(res)
​
def __repr__(self):
    if self.step == 1:
        return 'range(%s, %s)' % (self.start,self.end)
    else:
        return 'range(%s, %s, %s)' % (self.start,self.end,self.step)

for i in Range(1,10,1.1):

print(i)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叽里呱啦呱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值