2015-11-14 2 views
-1

J'ai ce code dans lequel je dois confrontate valeurs de 2 tableaux différents, l'un à partir de données réelles et un de calcule théoriques:code Python: IndexError: liste des index hors de portée

#import sys 
import datetime 
import time 
#import numpy as np 
from pysolar.solar import * \ 
# dati di input 
#posizione geografica 
latitudine = 43.8016626 
longitudine = 11.2558136 
# per sapere l'area captante mi serve la larghezza [m] 
pannello_mis_larghezza = 0.23 
# per sapere l'area captante mi serve la lunghezza [m] 
pannello_mis_lunghezza = 1.970 


# per calcolare ombra all'interno di una parabola devo sapere l'altezza 
parabola_altezza_ombra = 0.16 
#posizione superficie 
#inclinazione rispetto al piano in gradi, TILT 
pannello_tilt = 12 
pannello_tilt_radianti = math.radians(pannello_tilt) #conversione in radiati le funzioni math. richiedono radianti 

#angolo orientmento azimuth rispetto a sud , negativo verso ovest positivo verso est 
pannello_azimuth = 0 
pannello_azimuth_radianti = math.radians(pannello_azimuth) 

#il pannello può avere un limite di rotazione per motivi costruttivi funzionali 
pannello_limite_rotazione = 45 
# per studio su minuti 
range_studio_minuti = 1440 

#per studi con secondi 
range_studio_secondi = 86400 

#si apre il file lamma per i risultati reali 

file_lamma = open("/Users/costanzanaldi/Desktop/POLO_SCIENTIFICO_(LAMMA).txt",'r') 
#Il comando split non può essere dato su un'intera lista di stringhe ma solo su una 
#singola stringa, quindi si inserisce la variabile type per scandire tutte le stringhe 
#creo due variabili iiii e tttt per inizializzare i cicli for 
iiii = -1 
tttt = -1 
flusso_diretto_medio_W_mq_array = [] 
flusso_diretto_medio_W_mq_array_anno = [] 
for line in file_lamma: 

    iiii= iiii+1   
    Type = line.split(" ") 
    data_ = Type[0] 
    orario_ = Type[1] 
    radiazione_globale = Type[2] 
    radiazione_diffusa = Type[3] 
    #ora devo dividere la data in giorno, mese e anno e l'orario in ore e minuti 
    giorno1, mese1, anno1 = data_.split("/") 
    ora1, minuto1, secondo1 = orario_.split(":") 

    anno_ = int(anno1) 
    mese_ = int(mese1) 
    giorno_= int(giorno1) 
    ora_ = int(ora1) 
    minuto_ = int(minuto1) 

    d_ = datetime.datetime(anno_, mese_, giorno_, ora_, minuto_) 

    energia_su_metro_quadro_globale_int=int(radiazione_globale) 
    energia_su_metro_quadro_diffusa_int=int(radiazione_diffusa) 

     #si crea un array per le potenze medie e si usa append per i problemi legati al floating 

    flusso_diretto_medio_W_mq = (energia_su_metro_quadro_globale_int - energia_su_metro_quadro_diffusa_int)/(60*15) 
    if flusso_diretto_medio_W_mq < 0: 
     flusso_diretto_medio_W_mq = 0.0 
    flusso_diretto_medio_W_mq_array.append(flusso_diretto_medio_W_mq) 
    for conta in range(15): 
     tttt = tttt +1 
     flusso_diretto_medio_W_mq_array_anno.append(flusso_diretto_medio_W_mq) 

file_lamma.close() 


aaaa=-1 
bbbb=-1 
anno_array = [] 
k_array = [] 
#creo una lista dove avrò le date e gli orari di tutto l'anno 2014 
data = datetime.datetime(2014, 1, 1, 0, 0) 
#con la funzione timedelta incremento la data del 1 gennaio 2014 a mezzanotte 
#di un minuto fino ad arrivare al 31 dicembre 2014 alle 23 e 59 (ho così un range di 
#525600 minuti in un anno) 
for i in range(0,525599): 
    data += datetime.timedelta(minutes=1) 
    data_stringa = data.strftime("%Y-%m-%d %H:%M:%S") 
    anno_array.append(data_stringa) 
    flusso_diretto_medio_teorico_W_mq_array = [] 
    flusso_diretto_medio_teorico_W_mq_array_anno = [] 
    aaaa=aaaa+1 
    for line2 in anno_array: 
     Type2=line2.split(" ") 
     data_2 = Type2[0] 
     orario_2 = Type2[1] 
     #ora devo dividere la data in giorno, mese e anno e l'orario in ore e minuti 
     anno2, mese2, giorno2 = data_2.split("-") 
     ora2, minuto2, secondo2 = orario_2.split(":") 
     anno_2 = int(anno2) 
     mese_2 = int(mese2) 
     giorno_2 = int(giorno2) 
     ora_2 = int(ora2) 
     minuto_2 = int(minuto2) 

     d_2 = datetime.datetime(anno_2, mese_2, giorno_2, ora_2, minuto_2) 

#calcolo elevazione sole - altitude 
     sole_elevazione = get_altitude(latitudine, longitudine, d_2) 
     sole_elevazione_radianti = math.radians(sole_elevazione) 
     sole_zenith = 90 - sole_elevazione 
     sole_zenith_radianti = math.radians(sole_zenith) 

#visto che la libreria non è in grado di gestire valori di elevazione negativi si forza il codice 

     if sole_elevazione < 0: 
      sole_elevazione = 0 

#pysolar calcola anche l'irraggiamento diretto teorico 

     irraggiamento_diretto = radiation.get_radiation_direct(d_2, sole_elevazione) 

# per fare i confronti con dati lamma è utile sapere l'intensità di flusso diretto su un piano 
#il lamma misura sul piano la totale e la diffusa. la differenze possiamo dire che è la diretta su un piano 
#il calcolo è simile solo che come cos prendiamo quello dell'elevazione del sole 

     irraggiamento_diretto_su_piano_terreno = abs(math.cos(sole_zenith_radianti)) * irraggiamento_diretto 
     aaaa=aaaa+1 
     flusso_diretto_medio_teorico_W_mq_array_anno.append(irraggiamento_diretto_su_piano_terreno) 

     #ora creo il coefficiente moltiplicativo che rappresenti il rapporto fra 
     #il calcolo teorico sul pannello piano a terra e il dato sperimentale 
     for bbbb in range(525599): 
      bbbb=bbbb+1 
      if flusso_diretto_medio_W_mq_array_anno[bbbb] == 0: 
       k = 0 
      else: 
       k = (flusso_diretto_medio_teorico_W_mq_array_anno[bbbb])/(flusso_diretto_medio_W_mq_array_anno[bbbb]) 
     k_array.append(k) 

Mais il est dit " k = (flusso_diretto_medio_teorico_W_mq_array_anno [bbbb])/(flusso_diretto_medio_W_mq_array_anno [bbbb])

IndexError: liste des index hors de portée » des idées? Merci

Répondre

0

Vous essayez d'obtenir la valeur de la liste sur l'index plus puis la longueur d'une liste. Ce n'est pas juste.

Vous devriez vérifier l'index existe dans la liste

if index > len(arr): 
    # index not found