początki w pythonie - pętla w fukcji

0

Mam do napisania pracę w pythonie, przy próbie wywołania funkcji z pętlą wyrzuca mi błąd którego nie rozumiem:


IndexError Traceback (most recent call last)
<ipython-input-20-e65022459895> in <module>()
106 return wynik_Ts , wynik_Twater_out, wynik_q_eq
107
--> 108 wynik_Ts, wynik_Twater_out, wynik_q_eq = TempRange(100)
109
110

<ipython-input-20-e65022459895> in TempRange(t)
100 Ts += TempRate(wynik_Twater_out[-1] + 273.15, dq_dt, wynik_q_eq[-1], dt)
101
--> 102 wynik_Ts[dt] = round(Ts - 273.15, 2)
103 wynik_q_eq[dt] = round(q_equilibrium(Ts), 2)
104 wynik_Twater_out[dt] = round(TempWaterOut(Ts), 2)

IndexError: list assignment index out of range

kod

def q_equilibrium(Ts):
    
    A_Ts = A0 + A1*Ts + A2*Ts**2 + A3*Ts**3
    B_Ts = B0 + B1*Ts + B2*Ts**2 + B3*Ts**3
    
    q_eq = A_Ts*pow(Ps_Tw/Antoine(Ts),B_Ts)
    return q_eq


def SorptionRate(Ts, q, q_start, i):

    ksap = 15*Dso*math.exp(-Ea/(R*(Ts)))/(Rp**2) # 1/s
    dq_dt = ksap*(q - q_start)*i 
    return dq_dt


def TempWaterOut(Ts):

    Twater_out = (Ts + (Twater_in - Ts)*math.exp(-Kad*Ahex/(mw*Cpw))) - 273.15   # K
    return Twater_out


def TempRate(Twater_out, dq_dt, q, i):
    
    dTad_dt = ((Qst*Ws*dq_dt) + mw*Cpw*(Twater_in - Twater_out))/(Ws*(Cps + Cpw*q) + (Cp_Cu*Wk_Hex + Cp_Al*Wf_Hex))*i
    return dTad_dt

def TempRange(t):
    wynik_Ts = []
    wynik_Twater_out = []
    wynik_q_eq = []
    Ts = 31 + 273.15 
    wynik_Ts.append(round(Ts - 273.15, 2)) 
    wynik_Twater_out.append(round(TempWaterOut(Ts), 2))
    wynik_q_eq.append(round(q_equilibrium(Ts), 2))
    
    for dt in range (1, t):
                
        #if dt <= 30: 
        dq_dt = 0
        #else:
        #   q_start = q_equilibrium(wynik_Ts[-2] + 273.15)
        #   dq_dt = SorptionRate(Ts, wynik_q_eq[-1], q_start)  
              
        Ts += TempRate(wynik_Twater_out[-1] + 273.15, dq_dt, wynik_q_eq[-1], dt)
        
        wynik_Ts[dt] = round(Ts - 273.15, 2)      
        wynik_q_eq[dt] = round(q_equilibrium(Ts), 2)
        wynik_Twater_out[dt] = round(TempWaterOut(Ts), 2)
        
    return wynik_Ts , wynik_Twater_out, wynik_q_eq

wynik_Ts, wynik_Twater_out, wynik_q_eq = TempRange(100)


print wynik_Ts

Proszę o pomoc ponieważ to moje początki z programowniem

0

Nie wiem z jakich bibliotek korzystasz to dokładnie nie sprawdzę, ale komunikat oznacza że wychodzisz poza zakres tablicy.

0

rozmiar listy wynik_Ts to 1, a próbujesz nadać wartości dla indeksów 1-99
możliwy fix to zamiast

wynik_Ts[dt] = round(Ts - 273.15, 2)  

może być

wynik_Ts.append(round(Ts - 273.15, 2))

i analogicznie dla dwóch pozostałych list

ewentualnie możesz zaalokować miejsce w liście
przed "for dt in range (1, t):"
możesz dodać dodać

wynik_Ts += [0] * (t - 1)
#lub
wynik_Ts.extend([0] * (t - 1))

i analogicznie dla dwóch pozostałych list

0

Jedyna biblioteka z jakiej korzystałem to math. Natomiast Wasze propozycje działają. Dzięki.

1 użytkowników online, w tym zalogowanych: 0, gości: 1