それがエラーを示して自分のコードに問題があります:PythonのはIndexError:範囲外のリストインデックス(スイープアルゴリズム)
File "C:\Users\gileu\Google Drive\FIME\Temas Selectos de Optimización\Heuristica de Barridos\Barridos.py", line 85, in <module>
elif(datos[j][2] <= ca):
IndexError: list index out of range
私は私は比較になってるの値を表示し、手動でしようと、それが動作しますただし、if
ステートメントで使用されると、クラッシュします。
ここでは、コードです:
import sys
from math import *
'''Inicialización: Obetener los datos necesarios para la funcionalidad del programa.
El formato del dato individual debe ser transformado al siguiente formato:
dato[i] = [x,y,d] donde:
x = coordenada x del dato
y = coordenada y del dato
d = demanda a atender del dato '''
datos = [[0,1,33],[1,0,15],[-1,1,10],[-1,-1,10],[1,1,20],[0,-1,17],[1,-1,13],[-1,0,9]]
#El origen pertenecerá a todos los grupos creados, y se tomará como el origen.
Or = [0,0]
#La capacidad de cada grupo debe ser mayor que el máximo de todas las demandas, esto para poder antende las necesidades de todos los datos.
c = 80
ang = []
angO = []
grupos = []
print("Paso 1: Conseguir los grados de cada punto.")
print()
for i in range(len(datos)):
#Cuadrante II:
if(datos[i][0] < 0 and datos[i][1] > 0):
ang.append(degrees(atan(datos[i][1]/datos[i][0]))+180)
angO.append(degrees(atan(datos[i][1]/datos[i][0]))+180)
#Cuadrante III:
elif(datos[i][0] < 0 and datos[i][1] < 0):
ang.append(270-degrees(atan(datos[i][1]/datos[i][0])))
angO.append(270-degrees(atan(datos[i][1]/datos[i][0])))
#Cuadrante IV:
elif(datos[i][0] > 0 and datos[i][1] < 0):
ang.append(degrees(atan(datos[i][1]/datos[i][0]))+360)
angO.append(degrees(atan(datos[i][1]/datos[i][0]))+360)
#Eje Y:
elif(datos[i][0] == 0 and datos[i][1] > 0):
ang.append(90)
angO.append(90)
#Eje -X:
elif(datos[i][0] < 0 and datos[i][1] == 0):
ang.append(180)
angO.append(180)
#Eje -Y:
elif(datos[i][0] == 0 and datos[i][1] < 0):
ang.append(270)
angO.append(270)
#Eje X:
elif(datos[i][0] > 0 and datos[i][1] == 0 or datos[i][0] == 0 and datos[i][1] == 0):
ang.append(0)
angO.append(0)
#Para cualquier otro ángulo:
else:
ang.append(degrees(atan(datos[i][1]/datos[i][0])))
angO.append(degrees(atan(datos[i][1]/datos[i][0])))
print("Paso 2: Ordenar los ángulos de menor a mayor.")
print()
angO.sort()
print("Coordenadas en posicion original: ", ang)
print("Coordenadas en posicion ordenada: ", angO)
print()
print("Paso 3: Proceso de asignación.")
print()
i = 0
j = 0
while(angO):
grupos.append([])
print(grupos[i])
ca = c
print("Capacidad Actual: ", ca)
print("Numeros por asignar: ", angO)
print("Grupo actual: ", i)
print("Numero actual: ", j)
print(datos[j][2])
print(ang.index(angO[0]))
while(ca>=0):
if(ca == 0):
i = i + 1
break
elif(datos[j][2] <= ca):
grupos[i].append(ang.index(angO[0]))
angO.remove(angO[0])
j = j + 1
elif(datos[j][2] > ca):
i = i + 1
break
for i in range(len(grupos)):
print("Grupo ", i, ": ", grupos[i])
ようこそ、Gilberto、ソースコードの場所を含め、完全なエラートレースを投稿するとよいでしょう。あなたはこの標準的な練習に合うようにあなたのポストを親切に更新してもよろしいですか? – user3666197
@ user3666197投稿を更新しました。推薦してくれてありがとう! –