Quellcode durchsuchen

Implementazione

Andrea Gussoni vor 5 Jahren
Ursprung
Commit
b8a9d92624
1 geänderte Dateien mit 165 neuen und 3 gelöschten Zeilen
  1. 165 3
      mockup.tex

+ 165 - 3
mockup.tex

@@ -9,6 +9,50 @@
 %\addbibresource{bibliography.bib}
 \usepackage{comment}
 
+% Python stuff
+% Default fixed font does not support bold face
+\DeclareFixedFont{\ttb}{T1}{txtt}{bx}{n}{8} % for bold
+\DeclareFixedFont{\ttm}{T1}{txtt}{m}{n}{8}  % for normal
+
+% Custom colors
+\usepackage{color}
+\definecolor{deepblue}{rgb}{0,0,0.5}
+\definecolor{deepred}{rgb}{0.6,0,0}
+\definecolor{deepgreen}{rgb}{0,0.5,0}
+
+\usepackage{listings}
+
+% Python style for highlighting
+\newcommand\pythonstyle{\lstset{
+    language=Python,
+    basicstyle=\ttm,
+    otherkeywords={self},             % Add keywords here
+    keywordstyle=\ttb\color{deepblue},
+    emph={MyClass,__init__},          % Custom highlighting
+    emphstyle=\ttb\color{deepred},    % Custom highlighting style
+    stringstyle=\color{deepgreen},
+    frame=tb,                         % Any extra options here
+    showstringspaces=false,           %
+    commentstyle=\ttb
+}}
+
+% Python environment
+\lstnewenvironment{python}[1][]
+{
+  \pythonstyle
+  \lstset{#1}
+}
+{}
+
+% Python for external files
+\newcommand\pythonexternal[2][]{{
+    \pythonstyle
+\lstinputlisting[#1]{#2}}}
+%\lstset{inputencoding=utf8/latin1}
+
+% Python for inline
+\newcommand\pythoninline[1]{{\pythonstyle\lstinline!#1!}}
+
 % Todo red marker
 \usepackage{xcolor}
 \newcommand{\todo}[1]{}
@@ -48,12 +92,10 @@ Definire inoltre i prototipi delle seguenti funzioni:
 \begin{itemize}
   \item \textbf{prodotto\_caro}: Questa funzione, riceve in ingresso un magazzino, e restituisce il nome e il prezzo del prodotto più caro nel magazzino, non importa se disponibile o meno.
   \item \textbf{valore\_magazzino}: Questa funzione, riceve in ingresso un magazzino, e, per i soli prodotti presenti a magazzino, ne restituisce la somma dei loro prezzi.
-  \item \textbf{salva\_magazzino}: Questa funzione, riceve in ingresso un magazzino, e salva in formato csv il magazzino su un file, denominato "magazzino.csv" nella directory di esecuzione del programma. L'organizzazione del file sarà molto semplice, si salverà su ogni riga ogni prodotto presente nel magazzino, con i vari campi separati da virgole (ad esempio, il prodotto con nome "carta", prezzo "1" e disponibilità presente, corrisponderà nel file ad un riga "carta,1,True", e così via).
+  \item \textbf{salva\_magazzino}: Questa funzione, riceve in ingresso un magazzino, e salva in formato csv il magazzino su un file, denominato "magazzino.csv" nella directory di esecuzione del programma. L'organizzazione del file sarà molto semplice, si salverà su ogni riga ogni prodotto presente nel magazzino, con i vari campi separati da virgole (ad esempio, il prodotto con nome "carta", prezzo "1" e disponibilità presente, corrisponderà nel file ad un riga "carta,1,True", e così via). Aggiungere in testa al file csv una intestazione (header) per le colonne.
   \item \textbf{magazzini\_uguali}: Questa funzione, riceve in ingresso due oggetti di tipo magazzino, e controlla che i due magazzini siano identici. Per identici si intende che i prodotti presenti nei due magazzini devono comparire nello stesso ordine e avere lo stesso nome e lo stesso prezzo (la disponibilità invece non sarà controllata in questa funzione). In caso affermativo la funzione restituisce "True", altrimenti restituisce "False".
 \end{itemize}
 
-Implementare ora le funzioni prima elencate.
-
 \bigskip
 \noindent
 \paragraph{Soluzione:}\
@@ -62,4 +104,124 @@ Per rappresentare il magazzino invece, possiamo usare una semplice lista contene
 
 \clearpage
 
+\subsection{Implementazione}
+Implementare ora la funzione \textbf{prodotto\_caro}.
+
+\bigskip
+\noindent
+\paragraph{Soluzione:}\
+\begin{python}
+  def prodotto_caro(magazzino):
+      # Queste variabili conterranno il prodotto con
+      # il prezzo piu' alto. prodotto_caro e' inizializzato
+      # ad un valore nullo.
+      prodotto_caro = None
+      prezzo_massimo = 0
+
+      # Cicliamo su tutti i prodotti nel magazzino
+      for prodotto in magazzino:
+          # Se il prezzo del prodotto attuale e' piu' alto
+          # di quello trovato precedentemente lo sostituiamo
+          if prodotto["prezzo"] > prezzo_massimo:
+              prezzo_massimo = prodotto["prezzo"]
+              prodotto_caro = prodotto
+
+      # Controlliamo di aver trovato almeno un prodotto
+      if prodotto_caro != None:
+          return [prodotto_caro["nome"], prodotto_caro["prezzo"]]
+      else:
+          return ["non trovato", 0]
+\end{python}
+
+\clearpage
+
+\subsection{Implementazione}
+Implementare ora la funzione \textbf{valore\_magazzino}.
+
+\bigskip
+\noindent
+\paragraph{Soluzione:}\
+\begin{python}
+  def valore_magazzino(magazzino):
+    # Variabile che conterra' la somma parziale dei
+    # prezzi del prodotto
+    accumulatore = 0
+
+    # Cicliamo su tutti i prodotti nel magazzino
+    for prodotto in magazzino:
+
+        # Se il prodotto ha disponibilita', accumuliamo il suo
+        # prezzo nella variabile accumulatore
+        if prodotto["disponibile"] == True:
+            accumulatore = accumulatore + prodotto["prezzo"]
+
+    return accumulatore
+\end{python}
+\clearpage
+
+\subsection{Implementazione}
+Implementare ora la funzione \textbf{salva\_magazzino}.
+
+\bigskip
+\noindent
+\paragraph{Soluzione:}\
+\begin{python}
+from csv import writer
+def salva_magazzino(magazzino, nome_file):
+    print("Sto salvando il magazzino sul file " + nome_file)
+    # Apriamo il file in scrittura e creiamo un oggetto csv
+    output_file = open(nome_file, "w")
+    csv_writer = writer(output_file)
+
+    # Scriviamo nel file l'intestazione del csv
+    csv_writer.writerow(["nome", "prezzo", "disponibile"])
+
+    # Per tutti i prodotti in magazzino, serializziamoli
+    # nel csv
+    for prodotto in magazzino:
+        lista_riga = [prodotto["nome"], prodotto["prezzo"], prodotto["disponibile"]]
+        csv_writer.writerow(lista_riga)
+
+    # Rircordiamoci di chiudere il file
+    output_file.close()
+\end{python}
+
+\clearpage
+
+\subsection{Implementazione}
+Implementare ora la funzione \textbf{magazzini\_uguali}.
+
+\bigskip
+\noindent
+\paragraph{Soluzione:}\
+\begin{python}
+  def magazzini_uguali(magazzino1, magazzino2):
+    # Calcoliamo la dimensione dei due magazzini
+    dim_mag1 = len(magazzino1)
+    dim_mag2 = len(magazzino2)
+
+    # Se le dimensioni dei magazzini differiscono i magazzini
+    # non saranno uguali
+    if dim_mag1 != dim_mag2:
+        return False
+    else:
+        # Utilizziamo un indice di posizione per scorrere
+        # sui magazzini in sincronia
+        for i in range(0, dim_mag1):
+            nome1 = magazzino1[i]["nome"]
+            nome2 = magazzino2[i]["nome"]
+            prezzo1 = magazzino1[i]["prezzo"]
+            prezzo2 = magazzino2[i]["prezzo"]
+
+            # Al primo prodotto per il quale non
+            # corrispondono il nome o il prezzo restituiamo falso
+            if nome1 != nome2 or prezzo1 != prezzo2:
+                return False
+
+        # Se siamo arrivati fin qui, significa che i magazzini erano
+        # uguali
+        return True
+\end{python}
+\clearpage
+
 \end{document}