2016-03-01 112 views
1

我必须在这里定义我自己的range()的浮点版本。它与内置的range()函数相同,但可以接受float值.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

,那么你需要首先把更大的数字。如果倒退 –

+0

找到这个答案(和其他人)http://stackoverflow.com/a/32536460/2308683 –

回答

2

你错了越来越答案的主要原因是顶级if陈述是错误的。在决定移动方式时,你不想看边界。要求一个没有任何内容的范围是合法的(例如stop小于start,积极的step)。

这里是如何我最小调整你的代码才能正常工作:

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 
+1

如果您的其他检查被删除或更改为'如果步骤<0',应该会自动发生。 (你可能也想举一个例外,就是'step'为零。) – Blckknght

+1

呵呵,实际上我没有读过你代码的所有细节。还有一些其他问题,但最初的部分是正确的。我将编辑更多的修复程序。 – Blckknght

+0

非常感谢!有效。我把所有东西都弄错了。谢谢 – TerasVallo

3

转换浮动步入整数步骤。你会因花车四舍五入得到误差不漂移:如果它应该像内置的功能范围内工作

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