2015-02-09 74 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

相关问题