Python &引用;元组索引超出范围“;改变循环次数时
我有一个问题要问你。 在以下程序中,一架“飞机”从出发机场发送到各个机场,每次运送10人(变量:飞行中的乘客)。从柏林(BE)到慕尼黑(MU)的旅行需求为54人。因为它是所有目的地中需求量最高的,所以飞机将飞往慕尼黑,然后从那里飞往杜塞尔多夫(DÜ),因为这条航线也是慕尼黑所有目的地中需求量最高的。等等最后,飞机将把每个人送到他最喜欢的目的地 程序正在运行,我遇到的唯一问题是,如果运行超过85个周期,将出现以下错误消息:Python &引用;元组索引超出范围“;改变循环次数时,python,tuples,indexoutofrangeexception,Python,Tuples,Indexoutofrangeexception,我有一个问题要问你。 在以下程序中,一架“飞机”从出发机场发送到各个机场,每次运送10人(变量:飞行中的乘客)。从柏林(BE)到慕尼黑(MU)的旅行需求为54人。因为它是所有目的地中需求量最高的,所以飞机将飞往慕尼黑,然后从那里飞往杜塞尔多夫(DÜ),因为这条航线也是慕尼黑所有目的地中需求量最高的。等等最后,飞机将把每个人送到他最喜欢的目的地 程序正在运行,我遇到的唯一问题是,如果运行超过85个周期,将出现以下错误消息: Traceback (most recent call last):
Traceback (most recent call last):
File "<ipython-input-46-54a5efde663e>", line 1, in <module>
runfile('C:/Users/Ben/unbenannt4.py', wdir='C:/Users/Ben')
File "C:\Users\Ben\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 827, in runfile
execfile(filename, namespace)
File "C:\Users\Ben\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py", line 110, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/Ben/unbenannt4.py", line 90, in <module>
main()
File "C:/Users/Ben/unbenannt4.py", line 39, in main
vehicleA.output()
File "C:/Users/Ben/unbenannt4.py", line 61, in output
self.point_in_time = self.point_in_time + i[3]
IndexError: tuple index out of range
导致问题发生。如果我更改起始基准(“仓库”),可执行的循环数将更改。原因是什么?我已经把self.point整圆了,因为我想这可能是问题的原因
很抱歉给你留了这么长的信息。
你好,本
data = {}
data["airports"] = ["BE", "BR", "DR", "DÜ", "HAM", "MU"]
data["distance_matrix"] = [
# BE BR DR DÜ HAM MU
# [0] [1] [2] [3] [4] [5]
[ 0, 315, 165, 477, 255, 200],# [0]BE
[ 315, 0, 404, 248, 95, 582],# [1]BR
[ 165, 404, 0, 485, 376, 359],# [2]DR
[ 477, 248, 485, 0, 338, 486],# [3]Dü
[ 255, 95, 376, 338, 0, 612],# [4]HAM
[ 504, 582, 359, 486, 612, 0] # [5]MU
]
data["travel_demand"] = [
# BE BR DR DÜ HAM MU
# [0] [1] [2] [3] [4] [5]
[ 0, 100, 20, 35, 70, 20],# [0]BE
[35, 0, 40, 48, 95, 82],# [1]BR
[15, 4, 0, 45, 24, 59],# [2]DR
[ 47, 70, 12, 0, 33, 86],# [3]Dü
[ 25, 9, 36, 38, 0, 12],# [4]HAM
[ 54, 58, 35, 87, 62, 0] # [5]MU
]
data["num_vehicles"] = 4
data['vehicle_speed'] = 250 #kmh
data["depot"] = 0
data["passenger_in_flight"] = 10
data["starttime"] = 0
data["maintenance"] = []
data["store_index"] = None
store_index = 0
def main():
vehicleA = airplane(data["travel_demand"], data["depot"], data["passenger_in_flight"], data["distance_matrix"], data['vehicle_speed'], data["airports"], data["starttime"], data["store_index"], data["num_vehicles"])
vehicleA.output()
for n in range(len(data["travel_demand"])):
print((data["travel_demand"])[n])
class airplane():
def __init__(self, travel_demand, depot, passengers_in_flight, distance_matrix, vehicle_speed, airports, point_in_time, store_index, num_vehicles):
self.travel_demand = travel_demand
self.depot = depot
self.passengers_in_flight = passengers_in_flight
self.distance_matrix = distance_matrix
self.vehicle_speed = vehicle_speed
self.airports = airports
self.point_in_time = point_in_time
self.store_index = store_index
self.num_vehicles = num_vehicles
def output(self):
for n in range(0, 87):
i = airplane.max_in_row(self)
self.point_in_time = self.point_in_time + i[3]
self.point_in_time = round(self.point_in_time, 4)
print((i[0]), " --> " ,(i[1])," ; ", i[2]," ; ", i[3]," ; ", self.point_in_time)
def max_in_row(self):
b = self.travel_demand # ["travel_demand"] # liste der einzelnen Flughäfen, wieviele dahin wollen
level = [] # von welcher spalte starten wir
for i in range(len(b)):
if self.point_in_time == 0:
store_indexold = self.depot
else:
store_indexold = self.store_index # die reihe wird durchgegangen
level.append(b[i][store_indexold]) # der liste level werden die werte der reihe hinzugefügt, die spalte bleibt gleich
self.store_index = level.index(max(level)) # der index des maxwertes wird übergeben (zeile wird bestimmt, spalte ist gegeben)
#
if b[i][store_index] < 10:
return (store_index, b[i][store_index])
else:
y = max(level) - self.passengers_in_flight #der maxwert selbst wird übergeben
self.travel_demand[self.store_index][store_indexold] = y
traveltime = int(self.distance_matrix[self.store_index][store_indexold])/int(self.vehicle_speed)
airport_last = self.airports[store_indexold]
airport_next = self.airports[self.store_index]
return(airport_last, airport_next, y, traveltime)
if __name__ == "__main__":
main()
data={}
数据[“机场”]=“BE”、“BR”、“DR”、“DÜ”、“HAM”、“MU”]
数据[“距离矩阵”]=[
#我是穆德翰博士
# [0] [1] [2] [3] [4] [5]
[0,315,165,477,255,200],#[0]BE
[3150424895582],#[1]BR
[165,404,0,485,376,359],#[2]博士
[477248485,0338486],#[3]Dü
[255,95376338,0612],#[4]火腿
[50458235948612,0]亩
]
数据[“旅行需求”]=[
#我是穆德翰博士
# [0] [1] [2] [3] [4] [5]
[0,100,20,35,70,20],#[0]是
[35,0,40,48,95,82],#[1]BR
[15,4,0,45,24,59],#[2]博士
[47,70,12,0,33,86],#[3]Dü
[25,9,36,38,0,12],#[4]火腿
[54,58,35,87,62,0]亩
]
数据[“车辆数量”]=4
数据[‘车速’]=250公里小时
数据[“仓库”]=0
数据[“航班乘客”]=10
数据[“开始时间”]=0
数据[“维护”]=[]
数据[“存储索引”]=无
存储索引=0
def main():
车辆=飞机(数据[“出行需求”]、数据[“站点”]、数据[“飞行中的乘客”]、数据[“距离矩阵”]、数据[“车速”]、数据[“机场”]、数据[“开始时间”]、数据[“存储索引”]、数据[“车辆数量”])
车辆输出()
对于范围内的n(len(数据[“行程需求]):
打印((数据[“差旅需求])[n])
类飞机():
定义初始(自我、旅行需求、车辆段、航班乘客、距离矩阵、车速、机场、时间点、存储索引、车辆数量):
self.travel\u demand=旅行需求
self.depot=仓库
self.passengers\u in\u航班=passengers\u in\u航班
self.distance_矩阵=距离_矩阵
self.vehicle\u speed=车辆速度
self.airports=机场
self.point\u in\u time=point\u in\u time
self.store\u index=store\u index
self.num\u车辆=num\u车辆
def输出(自):
对于范围(0,87)内的n:
i=飞机。最大在行(自身)
self.point_in_time=self.point_in_time+i[3]
self.point\u in\u time=四舍五入(self.point\u in\u time,4)
打印((i[0]),“-->”,(i[1]),“;”,i[2],“;”,i[3],“;”,自我时间点)
def max_在行(自身):
b=self.travel#u demand#[“travel#u demand”]#列出了埃因泽尔宁·弗卢赫芬(wieviele dahin wollen)
级别=[]#von welcher Spalten starten wir
对于范围内的i(len(b)):
如果self.point\u in\u time==0:
存储\ u indexold=self.depot
其他:
store_indexold=self.store_index#die reihe wird durchgegangen
级别。附加(b[i][store_indexold])#在一个级别中,在一个级别中,在一个级别中添加
self.store_index=level.index(max(level))#der index des maxwertes wirdübergeben(zeile wird bestimmt,spalte ist gegegeben)
#
如果b[i][store_index]<10:
返回(存储索引,b[i][存储索引])
其他:
y=最大(高度)-在maxwert selbst wirdübergeben机场的航班上,乘客自己
self.travel\u demand[self.store\u index][store\u indexold]=y
旅行时间=int(自距离矩阵[self.store\u index][store\u indexold])/int(自车速)
airport\u last=self.airports[store\u indexold]
airport\u next=self.airports[self.store\u index]
返回(最后一个机场,下一个机场,y,旅行时间)
如果名称=“\uuuuu main\uuuuuuuu”:
main()
通过查看代码,可以在max_in_row方法中获得额外的返回值,该方法返回长度为2的元组。您尝试访问索引3,这导致超出范围 通过查看代码,在max_in_row方法中还有一个额外的返回,该方法返回长度为2的元组。您尝试访问索引3,这导致超出范围 谢谢你,我不笨,但有时我会有坏运气的想法,我认为这是其中的一个例子。谢谢你,我不笨,但有时我会有坏运气的想法,我认为这是其中的一个例子。
data = {}
data["airports"] = ["BE", "BR", "DR", "DÜ", "HAM", "MU"]
data["distance_matrix"] = [
# BE BR DR DÜ HAM MU
# [0] [1] [2] [3] [4] [5]
[ 0, 315, 165, 477, 255, 200],# [0]BE
[ 315, 0, 404, 248, 95, 582],# [1]BR
[ 165, 404, 0, 485, 376, 359],# [2]DR
[ 477, 248, 485, 0, 338, 486],# [3]Dü
[ 255, 95, 376, 338, 0, 612],# [4]HAM
[ 504, 582, 359, 486, 612, 0] # [5]MU
]
data["travel_demand"] = [
# BE BR DR DÜ HAM MU
# [0] [1] [2] [3] [4] [5]
[ 0, 100, 20, 35, 70, 20],# [0]BE
[35, 0, 40, 48, 95, 82],# [1]BR
[15, 4, 0, 45, 24, 59],# [2]DR
[ 47, 70, 12, 0, 33, 86],# [3]Dü
[ 25, 9, 36, 38, 0, 12],# [4]HAM
[ 54, 58, 35, 87, 62, 0] # [5]MU
]
data["num_vehicles"] = 4
data['vehicle_speed'] = 250 #kmh
data["depot"] = 0
data["passenger_in_flight"] = 10
data["starttime"] = 0
data["maintenance"] = []
data["store_index"] = None
store_index = 0
def main():
vehicleA = airplane(data["travel_demand"], data["depot"], data["passenger_in_flight"], data["distance_matrix"], data['vehicle_speed'], data["airports"], data["starttime"], data["store_index"], data["num_vehicles"])
vehicleA.output()
for n in range(len(data["travel_demand"])):
print((data["travel_demand"])[n])
class airplane():
def __init__(self, travel_demand, depot, passengers_in_flight, distance_matrix, vehicle_speed, airports, point_in_time, store_index, num_vehicles):
self.travel_demand = travel_demand
self.depot = depot
self.passengers_in_flight = passengers_in_flight
self.distance_matrix = distance_matrix
self.vehicle_speed = vehicle_speed
self.airports = airports
self.point_in_time = point_in_time
self.store_index = store_index
self.num_vehicles = num_vehicles
def output(self):
for n in range(0, 87):
i = airplane.max_in_row(self)
self.point_in_time = self.point_in_time + i[3]
self.point_in_time = round(self.point_in_time, 4)
print((i[0]), " --> " ,(i[1])," ; ", i[2]," ; ", i[3]," ; ", self.point_in_time)
def max_in_row(self):
b = self.travel_demand # ["travel_demand"] # liste der einzelnen Flughäfen, wieviele dahin wollen
level = [] # von welcher spalte starten wir
for i in range(len(b)):
if self.point_in_time == 0:
store_indexold = self.depot
else:
store_indexold = self.store_index # die reihe wird durchgegangen
level.append(b[i][store_indexold]) # der liste level werden die werte der reihe hinzugefügt, die spalte bleibt gleich
self.store_index = level.index(max(level)) # der index des maxwertes wird übergeben (zeile wird bestimmt, spalte ist gegeben)
#
if b[i][store_index] < 10:
return (store_index, b[i][store_index])
else:
y = max(level) - self.passengers_in_flight #der maxwert selbst wird übergeben
self.travel_demand[self.store_index][store_indexold] = y
traveltime = int(self.distance_matrix[self.store_index][store_indexold])/int(self.vehicle_speed)
airport_last = self.airports[store_indexold]
airport_next = self.airports[self.store_index]
return(airport_last, airport_next, y, traveltime)
if __name__ == "__main__":
main()