python中浮点数的范围函数

时间:2016-03-01 05:37:10

标签: python python-3.x

我必须在这里定义我自己的range()浮点版本。它与内置range()函数的工作方式相同,但可以接受浮点值.start,stop和step是整数或浮点数,step是非零值,也可以是负值。

我曾尝试在stackoverflow上寻找答案,但所有这些只能用于积极的步骤。我一直卡在测试值的测试中(0,0.25,-1) 我百分百肯定有一个更快更快的实现这个,因为我的程序需要很长时间来测试所有的值。有人可以帮我创建一个功能来执行此操作,我无法使用导入的工具。

def float(start,stop,step):
  x = start
  my_list = []
  if start < stop:
    while x<stop:
        my_list.append(x)
        if x < 0:
            x-=step
        elif x > 0:
            x+=step
        else:
            x+=step
    return my_list
  if start > stop:
    while x<=start and x>stop:
        my_list.append(x)
        if x < 0:
            x=step
        elif x > 0:
            x+=step
        else:
            x+=step
    return my_list  

2 个答案:

答案 0 :(得分:3)

将浮动步骤转换为整数步骤。由于浮点数的四舍五入,您可以减少错误偏差:

def float_range(start,stop,step):
    istop = int((stop-start) // step)
    for i in range(int(istop)):
        yield start + i * step

答案 1 :(得分:2)

您获得错误答案的主要原因是顶级if语句错误。在决定移动方式时,您不想查看边界。要求其中没有任何内容的范围是合法的(例如,stop小于start并且step为正{/ p>。

以下是我如何最低限度地调整您的代码以便正常工作:

def float_range(start,stop,step):
    x = start
    my_list = []
    if step > 0:
        while x < stop:
            my_list.append(x)
            x += step
    else: # should really be if step < 0 with an extra check for step == 0 
        while x > stop:
            my_list.append(x)
            x += step
    return my_list