2015-02-09 75 views
-3

x和y是兩個整數:的Python:會是什麼範圍內的輸出中(X,Y),如果X> Y

如何range(x,y)這樣x>y將在Python考慮?
我試圖在兩個蟒2.7和python 3.3以下代碼:

for i in range(10,3): 
    print i 

我想範圍(10,3)應被視爲列表[0,3,6,9],但這個代碼部沒有渲染任何東西。

+1

默認情況下,步長爲1,那麼如何添加10到3? – 2015-02-09 15:55:59

+0

我認爲開始是0,並在這裏考慮爲3但我認爲我忽略了參數的順序 – mounaim 2015-02-09 15:58:16

+0

你應該閱讀文檔 - 檢查['範圍(開始,停止[,步驟])'](https:// docs .python.org/2 /庫/功能。html#range) – 2015-02-09 16:00:10

回答

1

你有兩個選擇:

  1. 重新輸入值,

    range(0, 10, 3)  # => (0, 3, 6, 9) 
    
  2. 編寫一個包裝函數重新安排他們爲你:

    def safe_range(a, b): 
        return range(0, max(a,b), min(a,b)) 
    
    safe_range(3, 10) # => (0, 3, 6, 9) 
    

編輯:經過多思考後,我明白了;你試圖做類似

range({start=0,} stop, step) 

,但如果你只給兩個值是沒有辦法告訴和

range(start, stop, {step=1}) 

之間的差異要解決這種不確定性,即默認 - Python語法要求值參數只能出現在所有位置參數之後 - 也就是說,第二個示例是有效的Python,第一個不是。

4

的​​3210的簽名是

範圍(啓動,停止[步驟])

range(10, 3)分別開始停止至10和圖3,,因此如果您會提供步驟的說法,您需要提供開始論點:

In [1]: range(0, 10, 3) # list(range(0, 10, 3)) in Python3+ 
Out[1]: [0, 3, 6, 9] 

步驟的默認值是1和(引用的文檔頁面我以前的鏈接)

對於正步驟,範圍r的內容由式- [R [I] =確定啓動+步驟* I其中I> = 0- [R [I] <停止

range(10, 3)爲空,因爲- [R [I] <停止是從一開始假(R [0]是 + 1 * 0 = 10和10大於3)。

+0

也添加了答案:「但這部分代碼沒有渲染任何東西。」 (關於 - 我們在做什麼) – 2015-02-09 15:57:39

2

range()只有兩個參數將這些參數解釋爲startstop。從range() function documentation

range(stop)
range(start, stop[, step])

注意[, step]是第二種形式可選。通過提供小於或等於startstop,而將step保留爲默認1,您創建了一個空範圍。該文檔包括這種情況下,明確地爲給出的一個例子:

>>> range(1, 0) 
[] 

Python 3 version of the documentation是一個小更明確的還是:

Range對象將是空的,如果r[0]不滿足值約束。

如果你想提供一個step值,你指定開始:

for i in range(0, 10, 3): 

的Python拒絕猜測這裏;對於startstop參數都使用變量的合法用法,其中給定算法的某些運行時,停止值結束等於或低於開始;此類代碼預計range()在這種情況下爲空。

+0

好吧,我已經忘記了第二個範圍()簽名中的可選步驟,非常感謝你@Martjin – mounaim 2015-02-09 16:18:01

相關問題