[Python] Dimensionare serbatoio
Buongiorno, mi sono imbattuto su questo esercizio ma non so proprio come cominciare. Non ho capito come fare il grafico. Qualcuno mi potrebbe spiegare come fare?
Grazie
Grazie

Risposte
La libreria standard per fare grafici usando Python è matplotlib. In questa pagina puoi trovare un semplice esempio di utilizzo della funzione [tt]matplotlib.pyplot.plot[/url] che permette di fare semplici grafici come quello che ti è stato richiesto.
Incontri altre difficoltà?
Incontri altre difficoltà?
Più avanti nell'esercizio chiede di leggere un file txt e ordinarlo, di leggerlo lo so leggere ma poi non so scrivere la funzione per ordinarlo

Questa parte fa riferimento al file txt, di leggerlo lo so leggere ma poi quando devo andare a fare la funzione per ordinarla no
Qui vengono spiegate le funzioni per l'ordinamento in Python. Siccome ogni riga ha diversi campi dovrai fare uso dell'argomento [tt]key[/tt] di queste funzioni per specificare in base a quale campo debbano essere ordinate.
Una piccola critica al testo:
non ci sta alcuna necessità di leggere il file ordinato, per poter rispondere alla seconda parte del programma (mi riferisco alla sezione "implementare un secondo programma... etc. etc."
Volendo, il programma potrebbe essere unico, durante la lettura iniziale dei record, potrebbero essere calcolati i valori richiesti.
non ci sta alcuna necessità di leggere il file ordinato, per poter rispondere alla seconda parte del programma (mi riferisco alla sezione "implementare un secondo programma... etc. etc."
Volendo, il programma potrebbe essere unico, durante la lettura iniziale dei record, potrebbero essere calcolati i valori richiesti.
Grazie apatriarca per le pagine consigliate.
Umby e come dovrei fare?
Umby e come dovrei fare?
class Serbatoio: def __init__(self, Identificativo, DataCostruzione, Comune, Capienza, SuperficieOccupata, Uso) : self.Identificativo = Identificativo self.DataCostruzione = DataCostruzione self.Comune = Comune self.Capienza = Capienza self.SuperficieOccupata = SuperficieOccupata self.Uso = Uso def __str__(self) : Elenco = "Caratteristiche Serbatoio:\n Identificativo: "+self.Identificativo+"\n DataCostruzione: "+self.DataCostruzione+"\n Comune: "+self.Comune+"\n Capienza: "+self.Capienza+"\n SuperficieOccupata: "+self.SuperficieOccupata+"\n Uso: "+self.Uso print() return Elenco def __gt__(self, other) : if self.Capienza > other.Capienza: return True else : return False def stampa(lista): for elem in lista: print(elem) def mediana(ListaSerbatoi): for Capienza in ListaSerbatoi: mediana = (Capienza + 1 / 2) print(mediana) def main(): ListaSerbatoi = [] Serbatoio_1 = Serbatoio("SRB_01", "10-10-2018", "Cosenza", "500 m^3", "5 m^2", "Raccolta degli additivi del calcestruzzo") Serbatoio_2 = Serbatoio("SRB_02", "15-12-2019", "Crotone", "450 m^3", "4 m^2", "Raccolta del gasolio in ambiente esterno") Serbatoio_3 = Serbatoio("SRB_03", "20-11-2019", "Melissa", "700 m^3", "8 m^2", "Raccolta e conservazione acqua") Serbatoio_4 = Serbatoio("SRB_04", "30-12-2018", "Rende", "300 m^3", "15 m^2", "Raccolta oli alimentari") Serbatoio_5 = Serbatoio("SRB_05", "01-05-2020", "Caloveto", "100 m^3", "2 m^2", "Raccolta acqua piovana") ListaSerbatoi.append(Serbatoio_1) ListaSerbatoi.append(Serbatoio_2) ListaSerbatoi.append(Serbatoio_3) ListaSerbatoi.append(Serbatoio_4) ListaSerbatoi.append(Serbatoio_5) stampa(ListaSerbatoi) print() print("Lista Serbatoi ordinata in modo crescente in funzione della 'Capienza': ") print() ListaSerbatoi.sort() stampa(ListaSerbatoi) print() mediana = mediana(ListaSerbatoi) print(mediana) main()
questa classe fa parte anche dell'esercizio in cui chiede di creare una lista di serbatoi e poi ordinarla in base alla capienza in modo crescente e fino a qua ci siamo, subito dopo mi chiede di calcolare la mediana statistica ma non so scrivere la funzione, quella che ho scritto io è sbalgiata. Qualcuno a qualche consiglio
mediana statistica riferita alla capienza della listaserbatoi ordinata
"crynow":
Grazie apatriarca per le pagine consigliate.
Umby e come dovrei fare?
Python lo conosco pochissimo, non vorrei darti info errate...
Era solo per dire che,
non è necessario ordinare la lista, per poter rispondere alle domande successive.

NdM: Ti ho modificato il post in modo da inserire il codice in un blocco CODE. Premi modifica sul tuo post per vedere come ho fatto. In python la formattazione è fondamentale ed è quindi importante che venga mantenuta quando lo inserisci nel forum.
La mediana statistica è semplicemente l'elemento intermedio (lunghezza dispari) o la media dei due centrali (lunghezza pari) di un array ordinato. Si può calcolare usando le funzioni [tt]numpy.median[/tt] o [tt]statistics.median[/tt] ma siccome hai un array ordinato è più semplice scrivere qualcosa come (questo codice calcola la mediana di una lista a):
Ovviamente devi modificare il codice per sommare i valori che ti interessano in quanto non puoi sommare istanze della tua classe come nel codice che ho scritto.
n = len(a) if n % 2 != 0: return 0.5 * (a[n//2-1] + a[n//2]) else: return a[n//2]
Ovviamente devi modificare il codice per sommare i valori che ti interessano in quanto non puoi sommare istanze della tua classe come nel codice che ho scritto.
def __int__(self): Mediana = [] for self.Capienza in ListaSerbatoi: if self.Capienza % 2 != 0 : return 0.5 * (a[n//2-1] + a[n//2]) else : return a[n//2] return Mediana
tipo una cosa cosi? Cosi non mi viene
non so proprio
la funzione la devo richiamare nella classe o nel main?
"crynow":
tipo una cosa cosi? Cosi non mi viene
non so proprio
code.... non cose...

class Serbatoio: def __init__(self, Identificativo, DataCostruzione, Comune, Capienza, SuperficieOccupata, Uso) : self.Identificativo = Identificativo self.DataCostruzione = DataCostruzione self.Comune = Comune self.Capienza = Capienza self.SuperficieOccupata = SuperficieOccupata self.Uso = Uso def __str__(self) : Elenco = "Caratteristiche Serbatoio:\n Identificativo: "+self.Identificativo+"\n DataCostruzione: "+self.DataCostruzione+"\n Comune: "+self.Comune+"\n Capienza: "+self.Capienza+"\n SuperficieOccupata: "+self.SuperficieOccupata+"\n Uso: "+self.Uso print() return Elenco def __gt__(self, other) : if self.Capienza > other.Capienza: return True else : return False def stampa(lista): for elem in lista: print(elem) def main(): ListaSerbatoi = [] Serbatoio_1 = Serbatoio("SRB_01", "10-10-2018", "Cosenza", "500 m^3", "5 m^2", "Raccolta degli additivi del calcestruzzo") Serbatoio_2 = Serbatoio("SRB_02", "15-12-2019", "Crotone", "450 m^3", "4 m^2", "Raccolta del gasolio in ambiente esterno") Serbatoio_3 = Serbatoio("SRB_03", "20-11-2019", "Melissa", "700 m^3", "8 m^2", "Raccolta e conservazione acqua") Serbatoio_4 = Serbatoio("SRB_04", "30-12-2018", "Rende", "300 m^3", "15 m^2", "Raccolta oli alimentari") Serbatoio_5 = Serbatoio("SRB_05", "01-05-2020", "Caloveto", "100 m^3", "2 m^2", "Raccolta acqua piovana") ListaSerbatoi.append(Serbatoio_1) ListaSerbatoi.append(Serbatoio_2) ListaSerbatoi.append(Serbatoio_3) ListaSerbatoi.append(Serbatoio_4) ListaSerbatoi.append(Serbatoio_5) stampa(ListaSerbatoi) print() print("Lista Serbatoi ordinata in modo crescente in funzione della 'Capienza': ") print() ListaSerbatoi.sort() stampa(ListaSerbatoi) print() main()
Non so proprio come scrivere la funzione della mediana statistica in riferimento alla lista ordinata, ci sono da due giorni su questo punto.
Qualche anima pia che mi puo aiutare
A parte che apatriarca te lo ha già scritto, cos'è la mediana? Che rapporto ha con la lista ordinata?
mediana statistica.
devo fare la mediana della capienza della lista ordinata
ma non so proprio come scriverla
ancora sono bloccato a quel punto del codice delle domande di prima
devo fare la mediana della capienza della lista ordinata
ma non so proprio come scriverla
ancora sono bloccato a quel punto del codice delle domande di prima
Prima di tutto la mediana non è qualcosa che appartiene ad un singolo serbatoio, ma ad un insieme/lista di serbatoi. Quindi non può e non deve essere un campo della classe come hai tentato di fare nel tuo codice. Nel codice che ti avevo scritto la condizione del blocco if è calcolata a partire dalla dimensione della lista, certamente non dalla capienza di un particolare serbatoio. Di fatto si tratta semplicemente di scrivere una funzione come la seguente:
La lista passata alla funzione deve essere già ordinata ovviamente.
NOTA: mi sono accorto che avevo scritto la condizione al contrario nel codice precedente. Qui è quella corretta.
def mediana_capienze(serbatoi): n = len(serbatoi) if n == 0: return 0 elif n & 2 == 0: return 0.5 * (serbatoi[n//2-1].Capienza + serbatoi[n//2].Capienza) else: return serbatoi[n//2].Capienza
La lista passata alla funzione deve essere già ordinata ovviamente.
NOTA: mi sono accorto che avevo scritto la condizione al contrario nel codice precedente. Qui è quella corretta.
Prima cosa grazie di vero cuore se mi state aiutando.
Ho scritto cosi:
ma cosi non va
Sbaglio qualcosa?
Ho scritto cosi:
class Serbatoio: def __init__(self, Identificativo, DataCostruzione, Comune, Capienza, SuperficieOccupata, Uso) : self.Identificativo = Identificativo self.DataCostruzione = DataCostruzione self.Comune = Comune self.Capienza = Capienza self.SuperficieOccupata = SuperficieOccupata self.Uso = Uso def __str__(self) : Elenco = "Caratteristiche Serbatoio:\n Identificativo: "+self.Identificativo+"\n DataCostruzione: "+self.DataCostruzione+"\n Comune: "+self.Comune+"\n Capienza: "+self.Capienza+"\n SuperficieOccupata: "+self.SuperficieOccupata+"\n Uso: "+self.Uso print() return Elenco def __gt__(self, other) : if self.Capienza > other.Capienza: return True else : return False def mediana_capienze(ListaSerbatoi): n = len(ListaSerbatoi) if n == 0: return 0 elif n & 2 == 0: return 0.5 * (ListaSerbatoi[n//2-1].Capienza + ListaSerbatoi[n//2].Capienza) else : return ListaSerbatoi[n//2].Capienza def stampa(lista): for elem in lista: print(elem) def main(): ListaSerbatoi = [] Serbatoio_1 = Serbatoio("SRB_01", "10-10-2018", "Cosenza", "500 m^3", "5 m^2", "Raccolta degli additivi del calcestruzzo") Serbatoio_2 = Serbatoio("SRB_02", "15-12-2019", "Crotone", "280 m^3", "4 m^2", "Raccolta del gasolio in ambiente esterno") Serbatoio_3 = Serbatoio("SRB_03", "20-11-2019", "Melissa", "700 m^3", "8 m^2", "Raccolta e conservazione acqua") Serbatoio_4 = Serbatoio("SRB_04", "30-12-2018", "Rende", "300 m^3", "15 m^2", "Raccolta oli alimentari") Serbatoio_5 = Serbatoio("SRB_05", "01-05-2020", "Caloveto", "100 m^3", "2 m^2", "Raccolta acqua piovana") ListaSerbatoi.append(Serbatoio_1) ListaSerbatoi.append(Serbatoio_2) ListaSerbatoi.append(Serbatoio_3) ListaSerbatoi.append(Serbatoio_4) ListaSerbatoi.append(Serbatoio_5) stampa(ListaSerbatoi) print() print("Lista Serbatoi ordinata in modo crescente in funzione della 'Capienza': ") print() ListaSerbatoi.sort() stampa(ListaSerbatoi) print() stampa(mediana_capienze) main()
ma cosi non va
Sbaglio qualcosa?
Dovrebbe essere
print(mediana_capienze(listaSerbatoi))