[python] Problema con 'None'

gerardoflotta
import matplotlib.pyplot as plt
import numpy as np

# in questo punto il diagramma rappresenta il costo totale della recinzione in funzione di R (raggio).
def diagramma(superficie_totale, costo_porzione_curva, costo_porzione_dritta) :
    R = 10
    r =[]
    costo = []
    while R >= 10 and R <= 25 :
        larghezza = 2 * R
        lunghezza = -((3.1415 * (R * R) - 3200) / (2 * larghezza))
        perimetro_rettangolo = lunghezza + (2 * larghezza)
        perimetro_cerchio = 3.1415 * R
        Costo_porzione_curva = costo_porzione_curva * perimetro_cerchio
        Costo_porzione_dritta = costo_porzione_dritta * perimetro_rettangolo
        Costo_totale = Costo_porzione_curva + Costo_porzione_dritta
        costo.append(Costo_totale)
        r.append(R)
        R = R + 0.01
    
    plt.plot(r, costo)
    plt.xlabel("Raggio")
    plt.ylabel("Costo (euro)")
    plt.title("Costi Totali in funzione del raggio")
    plt.grid('on')
    return plt.show()
        
        
        
def costi_minimi(superficie_totale, costo_porzione_curva, costo_porzione_dritta) :
    R = 10
    costo = []
    lunghezze = []
    r = []
    while R >= 10 and R <= 25 :
        r.append(R)
        larghezza = 2 * R
        lunghezza = -((3.1415 * (R * R) - 3200) / (2 * larghezza))
        lunghezze.append(lunghezza)
        perimetro_rettangolo = lunghezza + (2 * larghezza)
        perimetro_cerchio = 3.1415 * R
        Costo_porzione_curva = costo_porzione_curva * perimetro_cerchio
        Costo_porzione_dritta = costo_porzione_dritta * perimetro_rettangolo
        Costo_totale = Costo_porzione_curva + Costo_porzione_dritta
        costo.append(Costo_totale)
        R = R + 0.01
    
    smallest = costo[0]
    for i in range(1, len(costo)) :
        if costo[i] < smallest :
            smallest = costo[i]

    print("Il costo minimo e': %.2f" % smallest, "euro")
    
    pos = costo.index(smallest)
    
    print("La lunghezza corrispondente al costo totale piu' basso e': %.2f " % lunghezze[pos], "metri")
    print("Il raggio corrispondente al costo totale piu' basso e': %.2f " % r[pos], "metri")
    
    



def main() :
    superficie_totale = 1600  # m^2
    costo_porzione_curva = 40  # euro/metro
    costo_porzione_dritta = 30  #e euro/metro
    
    grafico = diagramma(superficie_totale, costo_porzione_curva, costo_porzione_dritta)
    print(grafico)
    costo_minimo1 = costi_minimi(superficie_totale, costo_porzione_curva, costo_porzione_dritta)
    print(costo_minimo1)
    
main()


alla funzione def costi_minimi mi da come stampa:

None
risultato 1
risultato 2
risultato 3
None

Perchè è presente None? Come dovrei fare a non farlo uscire?

Grazie in anticipo

Risposte
niccoset
La funzione
costi_minimi(...)
non ritorna nulla. Dovresti addirittura ricevere un messaggio di warning dall'editor che stai usando per scrivere il tuo codice in quanto stai assegnando il valore di una variabile col risultato di una funzione che non ritorna niente.

Discorso simile per l'altra funzione
diagramma(...)
dove al termine della funzione scrivi
return plt.show()
ma ciò non ha molto senso in quanto quest'ultima funzione non ritorna nulla ma serve esclusivamente per visualizzare un grafico. Ti basta scrivere
plt.show()
e non ritornare ed assegnare nessuna variabile.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.