Topic: Problema con 'None'  (Letto 177 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline crynow

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Problema con 'None'
« il: Settembre 17, 2020, 17:56 »
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

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 294
  • Punti reputazione: 0
    • Mostra profilo
Re:Problema con 'None'
« Risposta #1 il: Settembre 18, 2020, 07:50 »
...
    costo_minimo1 = costi_minimi(superficie_totale, costo_porzione_curva, costo_porzione_dritta)
    print(costo_minimo1)
...
...
risultato 3
None

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

L'istruzione evidenziata Ti da il "None", il perché è dato dal fatto che la funzione "costi_minimi" non ritorna nulla, quindi costo_minimo1 è None.

A proposito del "None" leggi questo interessante intervento di @RicPol.

Offline crynow

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:Problema con 'None'
« Risposta #2 il: Settembre 18, 2020, 16:44 »
import matplotlib.pyplot as plt
import numpy as np


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]
   
    return(smallest)

         
   
    #pos = costo.index(smallest)
   
    #return("La lunghezza corrispondente al costo totale piu' basso e': %.2f " % lunghezze[pos], "metri")
    #return("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)
    euro = costi_minimi(superficie_totale, costo_porzione_curva, costo_porzione_dritta)
    print(euro)
   
main()

ma il fatto anche se uso return mi da il risultato cosi:

None
risultato

come dovrei fare allora?

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 3.112
  • Punti reputazione: 9
    • Mostra profilo
Re:Problema con 'None'
« Risposta #3 il: Settembre 18, 2020, 19:27 »
un primo passo potrebbe essere formattare il codice che posti con il pulsante "pythoncode".

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 294
  • Punti reputazione: 0
    • Mostra profilo
Re:Problema con 'None'
« Risposta #4 il: Settembre 18, 2020, 19:29 »

import matplotlib.pyplot as plt ...

def diagramma(superficie_totale, costo_porzione_curva, costo_porzione_dritta) :
    R = 10
....
    return plt.show()
       
def costi_minimi(superficie_totale, costo_porzione_curva, costo_porzione_dritta) :
.....
    return(smallest)
...
    grafico = diagramma(superficie_totale, costo_porzione_curva, costo_porzione_dritta)
    print(grafico)
    euro = costi_minimi(superficie_totale, costo_porzione_curva, costo_porzione_dritta)
    print(euro)


ma il fatto anche se uso return mi da il risultato cosi:

None
risultato

come dovrei fare allora?

Forse, ma è solo una ipotesi di lavoro, potresti leggere la documentazione di matplotlib.pyplot.show,e, leggendola, magari qualche idea verrebbe, tipo che "show()" visualizza un grafico ma, magari, non restituisce nulla (quindi None)
Poi, magari, un pochino di base Ti potrebbe far comodo.

Ti confesso che io sono circa due anni che cerco di studiare python ma ancora non mi sono avventurato con faccende tipo pandas, numpy etc., un po' perché al momento non mi servono, un po' perché ritengo siano argomenti prematuri per la mia conoscenza delle basi ... unica avventura che mi son permesso con matplotlib la trovi qua ma era solo un giochino, niente più.

Se posso suggerire, guardati bene le basi, cerca di capirle, prima di avventurarti con librerie che un certo retroterra lo ritengono acquisito, risparmierai tempo.

Ciao :)

Offline crynow

  • python unicellularis
  • *
  • Post: 9
  • Punti reputazione: 0
    • Mostra profilo
Re:Problema con 'None'
« Risposta #5 il: Settembre 19, 2020, 11:30 »
import matplotlib.pyplot as plt
import numpy as np


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]

    pos = costo.index(smallest)
   
    risultati = []
    risultati.append(smallest)
    risultati.append(lunghezze[pos])
    risultati.append(r[pos])
   
    return(risultati)


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)
    Risultati = costi_minimi(superficie_totale, costo_porzione_curva, costo_porzione_dritta)
    print("Il costo minimo e': %.2f" %Risultati[0], "euro")
    print("La lunghezza della recinzione corrispondente al costo minimo e': %.2f" %Risultati[1], "metri")
    print("Il raggio corrispondente al costo minimo e': %.2f" %Risultati[2], "metri")
   
main()



Grazie prima di tutto per le risposte.

Infatti mi sono accorto che il 'none' me lo dava la funzione diagramma, adesso ho raggiustato qualcosina, ma come faccio a risolvere il problema della funzione diagramma senza che mi restituisca anche 'none'?

Se faccio 'return diagramma(superficie_totale, costo_porzione_curva, costo_porzione_dritta)' me lo stampa un 10000000 di volte cioè non si ferma mai

Offline nuzzopippo

  • python neanderthalensis
  • ****
  • Post: 294
  • Punti reputazione: 0
    • Mostra profilo
Re:Problema con 'None'
« Risposta #6 il: Settembre 19, 2020, 11:46 »
...
Infatti mi sono accorto che il 'none' me lo dava la funzione diagramma, adesso ho raggiustato qualcosina, ma come faccio a risolvere il problema della funzione diagramma senza che mi restituisca anche 'none'?
Se faccio 'return diagramma(superficie_totale, costo_porzione_curva, costo_porzione_dritta)' me lo stampa un 10000000 di volte cioè non si ferma mai

Dipende da quello che vuoi fare e da quello che sai fare. Un programma "si progetta", non si crea per tentativi.

"Potresti", ad esempio crearti una immagine, quindi visualizzarla e/o manipolarla ... questo, naturalmente, "se" hai idea di come si possa fare, se non lo sai, ovviamente, devi imparare come si fa, leggendo testi, consultando documentazione e cercando in rete, non c'è altro modo.