Range() 包括其正步和负步的边界



我想做一个简单的程序,打印A到B范围内的所有数字,包括B。

对于边界按递增顺序排列的范围,我知道我必须在上限上加 1,例如:

range(A, B+1)

但是,当边界按递减顺序时,将 1 添加到B将不起作用,例如range(17, 15, -1).

如何对其进行编码以同时适用于增加和减少的范围?

我明白你为什么面临这个问题。这是因为您在range中使用较大的值作为第一个参数,而在第二个参数中使用较小的值(这是由于负号而发生的(。

对于这种情况,以下代码将起作用:

a = 5
b = -5
step = 1   
if b < 0:
step = -1
range (a, b + step, step)

我想我没有正确理解这个问题。有3种情况:

  1. AB都是积极的
  2. A阴性,B阳性
  3. AB都是负面

现在,如果我这样做(在Python 2中,为了避免list(range(...)):这使解释更清晰(:

>>> A = 10; B = 20     # case 1
>>> range(A,B+1)
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20]
>>> A = -10; B = 2     # case 2
>>> range(A,B+1)
[-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2]
>>> A = -10; B = -2    # case 3
>>> range(A,B+1)
[-10, -9, -8, -7, -6, -5, -4, -3, -2]

因此,您的评论不包括范围内的最后一个数字似乎与我所看到的不符。

如果您接收的输入数据A > B,那么问题不在于负数,而在于range()期望值按升序排列。

为了涵盖这一点:

>>> A = 2; B = -2     # case 4
>>> A,B = sorted((A,B))
>>> range(A,B+1)
[-2, -1, 0, 1, 2]

这也适用于情况 1、2 和 3。

如果我误解了这个问题,请编辑它以澄清。

请检查这是否有效。谢谢。

if A>B and A < 0 and B < 0:
print(list(range(A,B,-1)))
elif A<B:
print(list(range(A,B)))
else:
print(list(range(A,B,-1)))

您可以创建一个函数,将正常范围转换为包含两个边界的范围,例如:

def inclusive(r):
return range(r.start, r.stop + r.step, r.step)

你应该给它传递一个范围,它将返回一个范围:

increasing_range = range(2, 5)
print(list(inclusive(increasing_range)))
# [2, 3, 4, 5]
decreasing_range = range(5, -5, -1)
print(list(inclusive(decreasing_range)))
# [5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5]
even = range(2, 10, 2)
print(list(inclusive(even)))
# [2, 4, 6, 8, 10]
for odd in inclusive(range(1, 5)):
print(odd)
# 1 2 3 4 5 

最后一个数字永远不会包含在python范围内。您需要相应地调整代码。
例如 要打印从 -5 到 -1(包含(的值,请使用,

>>> print(list(range(-5, 0)))
[-5, -4, -3, -2, -1]

以相反的顺序

>>> print(list(range(-1, -6, -1)))
[-1, -2, -3, -4, -5]

最新更新