【发布时间】:2017-03-27 03:55:17
【问题描述】:
我的代码有问题,显示错误:
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 我已经更新了帖子。谢谢推荐!
标签: python algorithm list loops while-loop