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],但這個代碼部沒有渲染任何東西。
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],但這個代碼部沒有渲染任何東西。
你有兩個選擇:
重新輸入值,
range(0, 10, 3) # => (0, 3, 6, 9)
編寫一個包裝函數重新安排他們爲你:
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,第一個不是。
的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)。
也添加了答案:「但這部分代碼沒有渲染任何東西。」 (關於 - 我們在做什麼) – 2015-02-09 15:57:39
range()
只有兩個參數將這些參數解釋爲start
和stop
。從range()
function documentation:
range(stop)
range(start, stop[, step])
注意[, step]
是第二種形式可選。通過提供小於或等於start
的stop
,而將step
保留爲默認1
,您創建了一個空範圍。該文檔包括這種情況下,明確地爲給出的一個例子:
>>> range(1, 0)
[]
的Python 3 version of the documentation是一個小更明確的還是:
Range對象將是空的,如果
r[0]
不滿足值約束。
如果你想提供一個step
值,你有指定開始:
for i in range(0, 10, 3):
的Python拒絕猜測這裏;對於start
和stop
參數都使用變量的合法用法,其中給定算法的某些運行時,停止值結束等於或低於開始;此類代碼預計range()
在這種情況下爲空。
好吧,我已經忘記了第二個範圍()簽名中的可選步驟,非常感謝你@Martjin – mounaim 2015-02-09 16:18:01
默認情況下,步長爲1,那麼如何添加10到3? – 2015-02-09 15:55:59
我認爲開始是0,並在這裏考慮爲3但我認爲我忽略了參數的順序 – mounaim 2015-02-09 15:58:16
你應該閱讀文檔 - 檢查['範圍(開始,停止[,步驟])'](https:// docs .python.org/2 /庫/功能。html#range) – 2015-02-09 16:00:10