我必须在这里定义我自己的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
答案 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