2016-03-01 143 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