Python &引用;元组索引超出范围“;改变循环次数时

Python &引用;元组索引超出范围“;改变循环次数时,python,tuples,indexoutofrangeexception,Python,Tuples,Indexoutofrangeexception,我有一个问题要问你。 在以下程序中,一架“飞机”从出发机场发送到各个机场,每次运送10人(变量:飞行中的乘客)。从柏林(BE)到慕尼黑(MU)的旅行需求为54人。因为它是所有目的地中需求量最高的,所以飞机将飞往慕尼黑,然后从那里飞往杜塞尔多夫(DÜ),因为这条航线也是慕尼黑所有目的地中需求量最高的。等等最后,飞机将把每个人送到他最喜欢的目的地 程序正在运行,我遇到的唯一问题是,如果运行超过85个周期,将出现以下错误消息: Traceback (most recent call last):

我有一个问题要问你。 在以下程序中,一架“飞机”从出发机场发送到各个机场,每次运送10人(变量:飞行中的乘客)。从柏林(BE)到慕尼黑(MU)的旅行需求为54人。因为它是所有目的地中需求量最高的,所以飞机将飞往慕尼黑,然后从那里飞往杜塞尔多夫(DÜ),因为这条航线也是慕尼黑所有目的地中需求量最高的。等等最后,飞机将把每个人送到他最喜欢的目的地

程序正在运行,我遇到的唯一问题是,如果运行超过85个周期,将出现以下错误消息:

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()