簡體   English   中英

盡管值不為None,但函數返回None

[英]Function returns None despite values not being None

我正在用Python編寫lokta volterra算法。

我有以下錯誤

File "abeille.py", line 73, in affichage_Lotka_Volterra_TL
    T,L,Y=Lotka_Volterra(l_0,y_0,tmin,tmax,h)

TypeError: 'NoneType' object is not iterable

這是代碼

import numpy as np
import matplotlib.pyplot as plt



a,b,c,d=1.5,0.05,0.48,0.05

'''a=taux de reproduction des proies (constant, indépendant du nombre de prédateurs)

b=taux de mortalité des proies dû aux prédateurs rencontrés

c=taux de mortalité des prédateurs (constant, indépendant du nombre de proies)

d=taux de reproduction des prédateurs en fonction des proies rencontrées et mangées'''



def lapin(l,y):
    return
    a*l-b*l*y



def lynx(l,y):
    return
    d*l*y-c*y



def Lotka_Volterra(l_0,y_0,tmin,tmax,h):
    liste_t=[0]    
    liste_l=[l_0]
    liste_y=[y_0]
    t=tmin
    dy=y_0
    dl=l_0
    while    t<=tmax:
        t+=h
        liste_t.append(t)
        dl+=(a*dl-b*dl*dy)*h
        dy+=(d*dl*dy-c*dy)*h
        liste_l.append(dl)
        liste_y.append(dy)
    return
    liste_t,liste_l,liste_y




def affichage_Lotka_Volterra_TL(l_0,y_0,tmin,tmax,h):
'''Population de lièvres en fonction du temps'''
    T,L,Y=Lotka_Volterra(l_0,y_0,tmin,tmax,h)
    plt.plot(T,L)
    plt.title('Population de lièvres au cours du temps\nConditions initiales : 4 kilolièvres pour 10 lynx sur une durée de 50 ans')
    plt.xlabel('Temps d-étude (en année)')
    plt.ylabel('L = Population de lièvres (en kilo)')
    plt.show()
affichage_Lotka_Volterra_TL(4,10,0,50,0.0005)



def affichage_Lotka_Volterra_TY(l_0,y_0,tmin,tmax,h):
    '''Population de lynx en fonction du temps'''
    T,L,Y=Lotka_Volterra(l_0,y_0,tmin,tmax,h)
    plt.plot(T,Y)
    plt.title('Population de lynx au cours du temps\nConditions initiales : 4 kilolièvres pour 10 lynx sur une durée de 50 ans')
    plt.xlabel('T = Temps d-étude (en année)')
    plt.ylabel('Y = Population de lynx (en unité)')
    plt.show()


def affichage_Lotka_Volterra_YL(l_0,y_0,tmin,tmax,h):
    '''Population de lynx en fonction de la population de lièvres'''
    T,L,Y=Lotka_Volterra(l_0-2,y_0-2,tmin,tmax,h)
    plt.plot(L,Y, label="L0=2 et Y0=8")
    T,L,Y=Lotka_Volterra(l_0,y_0,tmin,tmax,h)
    plt.plot(L,Y, label="L0=4 et Y0=10")
    T,L,Y=Lotka_Volterra(l_0+2,y_0+2,tmin,tmax,h)
    plt.plot(L,Y, label="L0=6 et Y0=12")
    T,L,Y=Lotka_Volterra(l_0+10,y_0+10,tmin,tmax,h)
    plt.plot(L,Y, label="L0=14 et Y0=20")
    T,L,Y=Lotka_Volterra(l_0+50,y_0+50,tmin,tmax,h)
    plt.plot(L,Y, label="L0=54 et Y0=60")
    T,L,Y=Lotka_Volterra(l_0+20,y_0+100,tmin,tmax,h)
    plt.plot(L,Y, label="L0=24 et Y0=110")
    T,L,Y=Lotka_Volterra(l_0+60,y_0+100,tmin,tmax,h)
    plt.plot(L,Y, label="L0=64 et Y0=110")
    T,L,Y=Lotka_Volterra(l_0+100,y_0+100,tmin,tmax,h)
    plt.plot(L,Y, label="L0=104 et Y0=108")
    plt.title('Population de lynx en fonction de la population de lièvres\nConditions initiales : L0 kilolièvres pour Y0 lynx sur une durée de 50 ans et des relevés tous les 0.0005 ans')
    plt.xlabel('L = Population de lièvres (en kilo)')
    plt.ylabel('Y = Population de lynx (en unité)')
    plt.legend(loc="upper right")#localisation de l'affichage de la légende sur le graphique
    plt.show()
affichage_Lotka_Volterra_YL(4,10,0,50,0.0005)

您不能像這樣拆分return線。

return # Implicitly returns None

# Then you have a pure expression
#  in an impure context after the return
liste_t,liste_l,liste_y

下一行的3個逗號分隔值不屬於return的一部分。

將這些行更改為

return liste_t,liste_l,liste_y

您將返回None因此,您將獲得None

return

相當於

return None

return語句之后的代碼就是無法訪問的代碼。

您可能想要:

return liste_t,liste_l,liste_y

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM