我正在尝试制作一段将输入范围放入预定义范围的代码。它会检查start
和end
,然后使用相应的实例编号递增range
变量。下面的代码会增加前两个range.number
变量,但它也应该递增第三个变量,因为input1
的结束小于range3
的结束。我怎样才能做到这一点?
class Range:
def __init__(self, start, end, number):
self.start = start
self.end = end
self.number = number
def __str__(self):
return "%s, %s, %s" % (self.start, self.end, self.number)
class Input:
def __init__(self, start, end):
self.start = start
self.end = end
def __str__(self):
return "%s, %s" % (self.start, self.end)
range1 = Range(1,5,0)
range2 = Range(5,8,0)
range3 = Range(8, 15, 0)
rangesArray = []
rangesArray.append(range1)
rangesArray.append(range2)
rangesArray.append(range3)
input1 = Input(2, 14)
# print(range1)
# print(input1)
# print(rangesArray[0], rangesArray[1])
for i in range(len(rangesArray)):
if input1.start >= rangesArray[i].start:
rangesArray[i].number += 1
if input1.end > rangesArray[i].end:
rangesArray[i+1].number += 1
print(rangesArray[0].number, rangesArray[1].number, rangesArray[2].number)'
答案 0 :(得分:0)
问题是input1.start
比rangesArray[i]
的任何i >= 2
少,所以你只在第一次迭代时输入了if。
如果你将第二个条件设置在第一个条件之外,你可以解决它:
for i in range(len(rangesArray)):
if input1.start >= rangesArray[i].start:
rangesArray[i].number += 1
if input1.end > rangesArray[i].end:
rangesArray[i+1].number += 1
print(rangesArray[0].number, rangesArray[1].number, rangesArray[2].number)
答案 1 :(得分:0)
@Aviad Levy的解决方案可以很好地解决您的问题。
但我想对其做些修改。
如果您的输入在最后一次迭代中满足第二个条件,则代码将引发IndexError: list index out of range
。因为列表中没有剩余元素可以增加数量。
以下代码将有助于解决该问题。
for i in range(len(rangesArray)):
if input1.start >= rangesArray[i].start:
rangesArray[i].number += 1
if input1.end > rangesArray[i].end and i!= len(rangesArray)-1: #condition to ensure that list index doesn't go out of range
rangesArray[i+1].number += 1