Relazione · 2018. 9. 1. · libreria, aggiungere canzoni ad una libreria già esistente, cercare...

34
Corso di laurea triennale in Disegno industriale A.A. 2016/2017 Docente: Azzurra Ragone Studen: Adriana Perniola (566752), Giulio Pappolla (566819) Progeo 3 Relazione Traccia Titolo: Creare un programma che gessca una libreria musicale Il programma deve memorizzare su **file** tu i da crea/modifica con il seguente programma. Il programma deve gesre una libreria musicale e dare la possibilità all’utente di creare delle playlist persona- lizzate. Per ogni canzone il programma deve memorizzare il tolo della canzone, l’arsta che la interpreta, la durata, il genere. Le playlist sono memorizzate su un file diverso rispeo a quello delle canzoni. L’utente che che accede alla libreria musicale deve poter eseguire le seguen operazioni: 1. Cercare una canzone per tolo e visualizzare tue le informazioni relave (arsta, durata, genere) 2. Inserire una nuova canzone con tue le informazioni relave 3. Recuperare dalla libreria musicale tue e sole le canzoni di un singolo arsta (es. tue le canzoni di “Lukas Graham”). Questa funzione deve restuire il risultato correo anche se l’utente inserisce solo una parte del nome dell’arsta (ad es. solo “Graham” invece del suo nome completo) 4. Creare una propria playlist: a. Aggiungere nuove canzoni alla lista b. Ogni volta che si aggiunge una nuova canzone bisogna verificare che questa non sia già presente nella playlist c. L’utente deve poter aggiungere canzoni alla playlist fino a quando decide di uscire. 5. Modificare una playlist creata in precedenza: a. Cancellare una canzone già inserita b. Aggiungere una nuova canzone ad una playlist già creata c. Sostuire una canzone già inserita con una nuova canzone 6. Calcolare la durata totale di una specifica playlist 7. Uscire dal programma Il programma deve gesre eventuali errori e inserimen non corre da parte dell’utente. Il codice deve essere modulare (composto da funzioni, ciascuna con una compito specifico). La relazione finale, oltre al codice (commentato), deve contenere: la descrizione del programma, i flowchart e i diagrammi IPO delle funzioni definite.

Transcript of Relazione · 2018. 9. 1. · libreria, aggiungere canzoni ad una libreria già esistente, cercare...

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Traccia

    Titolo: Creare un programma che gestisca una libreria musicale

    Il programma deve memorizzare su **file** tutti i dati creati/modificati con il seguente programma.

    Il programma deve gestire una libreria musicale e dare la possibilità all’utente di creare delle playlist persona-lizzate. Per ogni canzone il programma deve memorizzare il titolo della canzone, l’artista che la interpreta, la durata, il genere. Le playlist sono memorizzate su un file diverso rispetto a quello delle canzoni.

    L’utente che che accede alla libreria musicale deve poter eseguire le seguenti operazioni:

    1. Cercare una canzone per titolo e visualizzare tutte le informazioni relative (artista, durata, genere) 2. Inserire una nuova canzone con tutte le informazioni relative 3. Recuperare dalla libreria musicale tutte e sole le canzoni di un singolo artista (es. tutte le canzoni di “Lukas Graham”). Questa funzione deve restituire il risultato corretto anche se l’utente inserisce solo una parte del nome dell’artista (ad es. solo “Graham” invece del suo nome completo) 4. Creare una propria playlist: a. Aggiungere nuove canzoni alla lista b. Ogni volta che si aggiunge una nuova canzone bisogna verificare che questa non sia già presente nella playlist c. L’utente deve poter aggiungere canzoni alla playlist fino a quando decide di uscire. 5. Modificare una playlist creata in precedenza: a. Cancellare una canzone già inserita b. Aggiungere una nuova canzone ad una playlist già creata c. Sostituire una canzone già inserita con una nuova canzone 6. Calcolare la durata totale di una specifica playlist 7. Uscire dal programma

    Il programma deve gestire eventuali errori e inserimenti non corretti da parte dell’utente.

    Il codice deve essere modulare (composto da funzioni, ciascuna con una compito specifico).

    La relazione finale, oltre al codice (commentato), deve contenere: la descrizione del programma, i flowchart e i diagrammi IPO delle funzioni definite.

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Descrizione del programma

    Per la risoluzione di questa traccia ci siamo approcciati innanzitutto suddividendo il problema in due gran-di parti: la prima consiste nella creazione della libreria musicale e la seconda, invece, nella creazione della playlist. Abbiamo in ogni caso cercato di scrivere il programma in un unico file senza che perdesse la sua modularità.

    In generale all’inizio abbiamo creato delle classi e dei dizionari serializzati in modo tale da poter essere salvati su file sul pc, solo successivamente a causa della nostra inesperienza, abbiamo deciso di riscrivere il programma da capo utilizzando i record, facilitandoci di molto il lavoro.

    All’inizio del programma abbiamo anche creato un menu di scelta in modo tale da coinvolgere l’utente nella scelta delle operazioni da svolgere e abbiamo inserito una funzione supplementare che permette di ritornare al menu principale anche dopo un errore.

    Creazione della libreriaPer la creazione della libreria abbiamo cinque opzioni: creare una libreria inserendo canzoni, visualizzare la libreria, aggiungere canzoni ad una libreria già esistente, cercare una canzone per titolo visualizzandone tutte le caratteristiche e cercare una canzone per autore (visualizzandone tutte le caratteristiche). Abbiamo utilizzato dei record per poter salvare le canzoni nel file “lista_canzoni.txt” con titolo, autore, durata e genere, applicando le giuste eccezioni affinchè il programma non si bloccasse improvvisamente a causa di un input sbagliato o per altri errori in generale. Abbiamo aggiunto l’opzione “visualizza” in quanto abbiamo ritenuto utile dare all’utente la possibilità di visualizzare le canzoni inserite e in ogni caso abbiamo inserito dei cicli while affinchè l’utente potesse inserire un numero di dati da lui deciso.

    Creazione della playlistPer la creazione della playlist abbiamo altre cinque opzioni: creare una playlist aggiugendo canzoni, aggiun-gere una canzone ad una playlist già esistente, eliminarne una e sostituirne un’altra sempre da una playlist precedentemente creata. Inoltre la quinta opzione ci permette di calcolare la durata di una playlist.Così come per le librerie, abbiamo utilizzato dei record per salvare su file le canzoni con titolo e durata. Per calcolare la durata totale abbiamo ritenuto più comodo far visualizzare all’utente le canzoni inserite nella playlist per poi inserire i dati da sommare per ricevere il totale. Questi dati vengono anch’essi salvati in un file sul computer.

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Flowchart - main()

    Inizio

    Inizializza la variabile scelta == 0

    elif scelta ==CREA_PLAYLIST

    Ottiene la scelta scelta = get_scelta_menu()

    if scelta == CREA_LIBRERIA

    elif scelta == CERCA_TITOLO

    elif scelta == AGGIUNGI

    crea_libreria()

    visualizza() elif scelta == VISUALIZZA

    elif scelta == CERCA_AUTORE

    elif scelta == CERCA_TITOLO

    elif scelta == AGGIUNGI_ CANZONE

    elif scelta == CANCELLA

    elif scelta == SOSTITUISCI

    elif scelta == CALCOLA_ DURATA

    aggiungi()

    cerca_titolo()

    cerca_autore()

    crea_playlist()

    aggiungi_canzone()

    cancella()

    sostituisci()

    calcola_durata()

    Esci dal programma

    Fine

    false

    false

    false

    false

    false

    false

    false

    false

    false

    false

    false

    true

    true

    true

    true

    true

    true

    true

    true

    true

    true

    true

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Flowchart - torna()

    Inizio

    Visualizza a schermo

    Fine

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Inizio

    Visualizza il menu

    Richiede la scelta dall’utente

    try

    whilescelta < CREA_LIBRERIAscelta > ESCI

    return scelta()

    Fine

    true

    true

    Inserisci una scelta valida

    print except ValueErrorfalse

    false

    Relazione

    Flowchart - get_scelta_menu()

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Inizio

    Ottiene num_canzoni

    try

    whilenum_canzoni

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Inizio

    try

    Legge la prima riga

    Fine

    print except IOErrorfalse

    Relazione

    Flowchart - visualizza() e visualizza_playlist()

    whiletitolo != “ ”

    Legge il campo del codice

    true

    visualizza a schermo i record scritti

    Legge il campo del nome successivo

    Apre il file in scrittura

    true

    Elimina \n

    Chiude il file

    visualizza a schermo unmessaggio

    torna()

    false

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Inizio

    Legge il campo del ti-tolo del primo record

    Fine

    Relazione

    Flowchart - cerca_titolo() e cerca_autore()

    whiletitolo != “ ”

    Legge il campo del codice

    true

    visualizza a schermo i record scritti

    Legge il campo del nome successivo

    found = False

    Elimina \n

    Chiude il file

    torna()

    false

    Ottiene un valore

    Apre il file

    if titolo == ricerca

    found = True

    visualizza a schermo un messaggio

    true

    false

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Inizio

    try

    visualizza_playlist()

    Fine

    print except ValueErrorfalse

    Relazione

    Flowchart - crea_playlist()

    whilenum_canzo-ni

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Inizio

    try

    Apre il file in aggiunta

    Fine

    print except ValueErrorfalse

    Relazione

    Flowchart - aggiungi() e aggiungi_canzone()

    whileripeti == ‘s’

    true

    Ottiene i dati dall’utente

    Scrive i dati

    true

    Chiude il file

    visualizza a schermo unmessaggio

    torna()

    visualizza a schermo un messaggio

    Ripetere?

    ifdurata

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Inizio

    found = False

    Relazione

    Flowchart - cancella() [PARTE 1]

    whiledescr != “ ”

    true

    Ottiene canzone da eliminare

    importa os

    false

    visualizza_playlist()

    Visualizza il contenuto

    apre un file temporaneo

    apre il file originale

    Legge il campo del ti-tolo del primo record

    Legge il campo del codice

    Elimina \n

    iftrue

    false

    found = True

    Legge il campo del nome successivo

    Chiude il file

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Flowchart - cancella() [PARTE 2]

    Elimina file originale

    Rinomina filetemporaneo

    if

    true

    visualizza a schermo unmessaggio

    torna()

    Fine

    visualizza a schermo un messaggio

    false

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Inizio

    found = False

    Relazione

    Flowchart - sostituisci() [PARTE 1]

    whiletitolo != “ ”

    true

    Ottiene titolo

    importa os

    false

    visualizza_playlist()

    Visualizza il contenuto

    apre un file temporaneo

    apre il file originale

    Legge il campo del ti-tolo del primo record

    Legge il campo del codice

    Elimina \n

    if

    true

    false

    Scrive nel file temporaneo

    found = True

    Ottiene la durata

    Chiude il file

    Scrive nel file temporaneo

    Legge il campo successivo

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Flowchart - sostituisci() [PARTE 2]

    Elimina file originale

    Rinomina filetemporaneo

    if

    true

    visualizza a schermo unmessaggio

    torna()

    Fine

    visualizza a schermo un messaggio

    false

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Flowchart - calcola_durata()

    Inizio

    try print except ValueErrorfalse

    true

    visualizza_playlist()

    Visualizza il contenuto

    Ottiene quantità

    Apre un file

    Ottiene i dati dall’utente

    Scrive i dati

    for

    true

    Chiude il file

    false

    Inizializza un accumulatore

    Apre il file

    for

    Somma i valori

    Chiude il file

    visualizza a schermo unmessaggio

    torna()

    Fine

    true

    false

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Diagrammi IPO

    Input Processing Output

    Nessuno - Inizializza la variabile per la scelta dell’u-tente- Elabora la scela dell’utente fin quando non decide di uscire dal programma

    - Restituisce la scelta

    Diagramma IPO della funzione main()

    Input Processing Output

    - Premi INVIO - Permette di tornare al menu principale - Torna al menu princi-pale

    Diagramma IPO della funzione torna()

    Input Processing Output

    - Scelta del menu - Convalida la scelta- Restituisce la scelta- Eccezione: ValueError

    - Visualizza il menu- Restituisce la scelta

    Diagramma IPO della funzione get_scelta_menu()

    Input Processing Output

    - Numero di canzoni da inserire- Titolo, autore, durata, genere

    - Ottiene il numero di canzoni dall’utente- Apre un file (se non esiste lo crea)- Ottiene le canzoni dall’utente- Scrive i dati nel file lista_canzoni.txt- Visualizza una riga vuota e chiude il file- Torna al menu principale- Eccezione: ValueError

    - Visualizza le canzoni inserite- Torna al menu

    Diagramma IPO della funzione crea_libreria()

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Diagrammi IPO

    Input Processing Output

    Nessuno - Apre il file lista_canzoni.txt e ne legge il contenuto- Elimina i caratteri di nuova riga- Chiude e restituisce il contenuto- Torna al menu principale- Eccezione: IOError

    - Visualizza il contenuto del file- Torna al menu

    Diagramma IPO della funzione visualizza()

    Input Processing Output

    Nessuno - Apre il file playlist.txt e ne legge il conte-nuto- Elimina i caratteri di nuova riga- Chiude e restituisce il contenuto- Torna al menu principale- Eccezione: IOError

    - Visualizza il contenuto del file- Torna al menu

    Diagramma IPO della funzione visualizza_playlist()

    Input Processing Output

    - Titolo, artista, durata e genere- Variabile per ripetere il ciclo while

    - Apre il file lista_canzoni.txt- Una volta ottenuti i dati li aggiunge al file- Chiede all’utente se vuole ripetere l’ope-razione- Chiude il file e torna al menu principale- Eccezione: ValueError

    - Visualizza a schermo un messaggio di avvenuta scrittura- Torna al menu

    Diagramma IPO della funzione aggiungi()

    Input Processing Output

    - Titolo della canzone - Ottiene il titolo dall’utente- Apre il file lista_canzoni.txt- Legge il contenuto eliminando i caratteri di nuova riga- Se il record corrisponde alla ricerca visua-lizza la canzone e torna al menu principale- Se non è stato trovato torna al menu

    Se il titolo viene trovato:- Visualizza il titolo con le sue caratteristicheAltrimenti:- Viene visualizzato a schermo un messaggio- Torna al menu

    Diagramma IPO della funzione cerca_titolo()

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Diagrammi IPO

    Input Processing Output

    - Autore della canzone - Ottiene l’autore dall’utente- Apre il file lista_canzoni.txt- Legge il contenuto eliminando i caratteri di nuova riga- Se il record corrisponde alla ricerca visua-lizza la canzone e torna al menu principale- Se non è stato trovato torna al menu

    - Se l’autore viene trovato visualizza l’autore con le caratteristiche della canzoni, altrimenti viene visualizzato a schermo un messaggio- Torna al menu

    Diagramma IPO della funzione cerca_autore()

    Input Processing Output

    - Numero di canzoni da inserire- Dati della canzone

    - Fa visualizzare la libreria- Ottiene e convalida il numero di canzoni- Apre il file playlist.txt - Ottiene i dati dall’utente e li scrive nel file- Chiude il file e torna al menu principale- Eccezione: ValueError

    - Visualizza a schemo un messaggio di avvenuta scrittura- Torna al menu

    Diagramma IPO della funzione crea_playlist()

    Input Processing Output

    - Titolo e durata della canzone - Apre il file playlist.txt- Ottiene i dati dall’utente e li aggiunge - Se il valore non è stato trovato visualizza a schermo un messaggio- Chiede all’utente se vuole ripetere- Chiude il file e torna al menu principale- Eccezione: ValueError

    - Visualizza a schermo un messaggio di avvenuta scrittura- Torna al menu

    Diagramma IPO della funzione aggiungi_canzone()

    Input Processing Output

    - Canzone da eliminare - Fa visualizzare le canzoni disponibili- Ottiene la canzone dall’utente- Apre il file playlist.txt e uno temporaneo- Legge il contenuto del file eliminando \n- Chiude i due file ed elimina la canzone- Rinomina il file temporaneo e se il valore non è stato trovato visualizza un messaggio

    - Visualizza le canzoni disponibili- Visualizza a schermo un messaggio di avvenuta scrittura oppure che il file non è stato trovato- Torna al menu

    Diagramma IPO della funzione cancella()

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Diagrammi IPO

    Input Processing Output

    - Titolo da cercare- Titolo della canzone nuova

    - Fa visualizzare le canzoni disponibili- Ottiene i dati dall’utente- Apre il file originale e uno temporaneo- Legge il contenuto del file eliminando \n- Scrive sul file temporaneo - Chiude entrambi i file eliminando il file originale e sostituendo quello temporaneo

    - Visualizza un messaggio di avvenuta scrittura op-pure che il file esiste già- Torna al menu

    Diagramma IPO della funzione sostituisci()

    Input Processing Output

    - Numero di dati da inserire- Durata delle canzoni

    - Fa visualizzare le canzoni disponibili- Ottiene il numero dall’utente e apre il file- Ottiene le durate e le scrive nel file - Chiude il file e inizializza un accumulatore- Apre il file, legge il contenuto e li somma- Chiude il file e stampa il totale- Eccezione: ValueError

    - Visualizza le canzoni disponibili- Visualizza a schermo il totale

    Diagramma IPO della funzione calcola_durata()

  • Corso di laurea triennale in Disegno industriale A.A. 2016/2017Docente: Azzurra RagoneStudenti: Adriana Perniola (566752), Giulio Pappolla (566819)Progetto 3

    Relazione

    Codice del programma

    # Questo programma gestisce una libreria musicale e delle playlist permettendo all’utente# di svolgere alcune operazioni

    print(‘Benvenuto. Con questo programma potrai gestire una libreria musicale e creare le tue playlists.’)

    # Costanti globali per la scelta di menuCREA_LIBRERIA = 1VISUALIZZA = 2AGGIUNGI = 3CERCA_TITOLO = 4CERCA_AUTORE = 5CREA_PLAYLIST = 6AGGIUNGI_CANZONE = 7CANCELLA = 8SOSTITUISCI = 9CALCOLA_DURATA = 10ESCI = 11

    # Definisce la prima parte del programmadef main():

    # Inizializza la variabile per la scelta dell’utente scelta = 0

    # Elabora le scelte di menu fintantochè l’utente # non vuole uscire dal programma while scelta != ESCI: # Ottiene la scelta dall’utente scelta = get_scelta_menu()

    # Elabora la scelta if scelta == CREA_LIBRERIA: crea_libreria() elif scelta == VISUALIZZA: visualizza() elif scelta == AGGIUNGI: aggiungi() elif scelta == CERCA_TITOLO: cerca_titolo() elif scelta == CERCA_AUTORE: cerca_autore() elif scelta == CREA_PLAYLIST: crea_playlist()

  • elif scelta == AGGIUNGI_CANZONE: aggiungi_canzone() elif scelta == CANCELLA: cancella() elif scelta == SOSTITUISCI: sostituisci() elif scelta == CALCOLA_DURATA: calcola_durata()

    # Questa funzione ausiliaria permette di tornare al menu anche dopo un erroredef torna(): print(input(‘Premi il tasto INVIO per continuare’))

    # La funzione get_scelta_menu visualizza il menu# e ottiene la scelta dell’utente, convalidandoladef get_scelta_menu(): print() print(‘------------------------------------------------------------------’) print(‘Menu’) print(‘------------------------------------------------------------------’) print(‘1. Crea una nuova libreria.’) print(‘2. Visualizza la libreria che hai creato.’) print(‘3. Aggiungi una canzone ad una libreria già esistente.’) print(‘4. Cerca il titolo di una canzone e visualizzane tutti i dati.’) print(‘5. Cerca un autore e visualizzane tutte le canzoni.’) print(‘6. Crea una nuova playlist.’) print(‘7. Aggiungi una canzone ad una playlist già esistente.’) print(‘8. Cancella una canzone dalla playlist.’) print(‘9. Sostituisci una canzone nella playlist.’) print(‘10. Calcola la durata di una playlist.’) print(‘11. Esci dal programma.’) print(‘------------------------------------------------------------------’) print()

    # Ottiene la scelta dell’utente print(‘Ogni numero corrisponde a un\’operazione differente’)

    #Solleva una eccezione try: scelta = int(input(‘Inserisci il numero corrispondente alla tua scelta: ‘))

    # Convalida la scelta while scelta < CREA_LIBRERIA or scelta > ESCI: scelta = int(input(‘Inserisci una scelta valida: ‘))

    # Restutuisce un messaggio di errore quando l’utente inserisce una stringa al posto di un numero except ValueError: print(‘ERRORE: Affinchè la scelta sia valida digita un numero compreso tra 1 e 11’) torna() return get_scelta_menu()

    # Restituisce la scelta dell’utente

  • return scelta

    def crea_libreria(): #Solleva una eccezione try: # Ottiene la scelta dell’utente num_canzoni = int(input(‘Quante canzoni vuoi inserire? ‘))

    # Convalida la scelta while num_canzoni

  • # Legge la prima riga del file, ossia # il campo del nome della prima canzone titolo = file_canzoni.readline()

    # Se il campo è stato letto, continua while titolo !=’’: # Legge il campo del codice autore = file_canzoni.readline()

    durata = file_canzoni.readline()

    genere = file_canzoni.readline()

    # Elimina i caratteri di nuova riga dei campi titolo = titolo.rstrip(‘\n’) autore = autore.rstrip(‘\n’) durata = durata.rstrip(‘\n’) genere = genere.rstrip(‘\n’)

    # Visualizza il record print(‘Titolo: ‘, titolo) print(‘Autore: ‘, autore) print(‘Durata: ‘, durata) print(‘Genere: ‘, genere) print(‘’)

    # Legge il campo del nome del record successivo titolo = file_canzoni.readline()

    # Chiude il file file_canzoni.close()

    print(‘Ecco visualizzata la tua libreria’) torna()

    except IOError: print(‘ATTENZIONE, non hai ancora creato nessuna libreria’) print(‘Prima di digitare questa opzione assicurati di aver creato il file’) torna()

    # Questa funzione visualizza i record salvati nel file lista_canzoni.txtdef visualizza_playlist(): # Solleva un’eccezione try: # Apre il file lista_canzoni.txt in lettura file_canzoni = open(‘playlist.txt’, ‘r’)

    # Legge la prima riga del file, ossia # il campo del nome della prima canzone titolo = file_canzoni.readline()

    # Se il campo è stato letto, continua while titolo != ‘’:

  • # Legge il campo del codice durata = file_canzoni.readline()

    # Elimina i caratteri di nuova riga dei campi titolo = titolo.rstrip(‘\n’) durata = durata.rstrip(‘\n’)

    # Visualizza il record print(‘Titolo: ‘, titolo) print(‘Durata: ‘, durata) print(‘’)

    # Legge il campo del nome del record successivo titolo = file_canzoni.readline()

    # Chiude il file file_canzoni.close()

    print(‘Ecco visualizzata la tua playlist’) torna()

    except IOError: print(‘ATTENZIONE, non hai ancora creato nessuna libreria’) print(‘Prima di digitare questa opzione assicurati di aver creato il file’) torna()

    # Questa funzione aggiunge record alla libreria delle canzoni già creatadef aggiungi(): # Solleva un’eccezione try: # Crea una variabile per controllare il ciclo ripeti = ‘s’

    # Apre il file lista_canzoni.txt in modalità di aggiunta file_canzoni = open(‘lista_canzoni.txt’, ‘a’)

    # Aggiunge record al file ripeti = input(‘Vuoi inserire una canzone? s=si altrimenti no: ‘) while ripeti == ‘s’ or ripeti == ‘S’: # Ottiene i dati del record riguardanti la libreria print(‘Inserire i dati della canzone: ‘) titolo = input(‘Titolo: ‘) autore = input(‘Autore: ‘) durata = int(input(‘Durata in secondi: ‘)) while durata

  • file_canzoni.write(genere + ‘\n’)

    # Determina se l’utente desidera aggiungere un’altra canzone al file print(‘Vuoi inserire un\’altra canzone? ‘) ripeti = input(‘s=si, altrimenti = no: ‘)

    # Chiude il file file_canzoni.close() print(‘Dati aggiunti a lista_canzoni.txt’) torna()

    # Rileva un errore nel caso l’utente inserisca una stringa lì dove sono richiesti dei numeri except ValueError: print(‘ERRORE: Affinchè la scelta sia valida digita un valore corretto.’) aggiungi()

    # Questa funzione consente all’utente di cercare un titolo di una canzone presente nella libreria# e visualizzarne tutte le informazionidef cerca_titolo():

    # Crea una variabile boleana da usare come flag found = False

    # Ottiene il valore da ricercare ricerca = input(‘Inserire il titolo da cercare: ‘)

    # Apre il file lista_canzoni.txt file_canzoni = open(‘lista_canzoni.txt’, ‘r’)

    # Legge il campo del titolo del primo record titolo = file_canzoni.readline()

    # Legge il resto del file while titolo != ‘’: # Legge il campo dell’ autore autore = file_canzoni.readline() durata = file_canzoni.readline() genere = file_canzoni.readline()

    # Elimina il carattere \n dai vari campi titolo = titolo.rstrip(‘\n’) autore = autore.rstrip(‘\n’) durata = durata.rstrip(‘\n’) genere = genere.rstrip(‘\n’)

    # Determina se il record corrisponde al valore ricercato if titolo == ricerca: # Visualizza il record e torna al menù print(‘Ecco cosa ho trovato:’) print(‘’) print(‘Titolo: ‘, titolo) print(‘Autore: ‘, autore) print(‘Durata: ‘, durata)

  • print(‘Genere: ‘, genere)

    # Imposta su True il flag found found = True

    # Legge il titolo successivo titolo = file_canzoni.readline()

    # Chiude il file file_canzoni.close()

    # Torna nel menù principale torna()

    # Se il valore ricercato non è stato trovato nel file # visualizza un messaggio e torna al menù if not found: print(‘Questo elemento non è stato trovato nel file.’) torna()

    def cerca_autore():

    # Crea una variabile boleana da usare come flag found = False

    # Ottiene il valore da ricercare ricerca = input(‘Inserire l\’autore da cercare: ‘)

    # Apre il file lista_canzoni.txt file_canzoni = open(‘lista_canzoni.txt’, ‘r’)

    # Legge il campo del titolo del primo record titolo = file_canzoni.readline()

    # Legge il resto del file while titolo != ‘’: # Legge il campo del titolo autore = file_canzoni.readline()

    # Elimina il carattere \n dai vari campi titolo = titolo.rstrip(‘\n’) autore = autore.rstrip(‘\n’)

    # Determina se il record corrisponde al valore ricercato if autore == ricerca: # Visualizza il record print(‘Autore: ‘, autore) print(‘Titolo: ‘, titolo)

    # Imposta su True il flag found found = True

    # Legge il titolo successivo

  • titolo = file_canzoni.readline()

    # Chiude il file file_canzoni.close()

    # Torna nel menù principale torna()

    # Se il valore ricercato non è stato trovato nel file # visualizza un messaggio e torna al menù if not found: print(‘Questo elemento non è stato trovato nel file.’) torna()

    # Da qui parte la seconda parte del programmadef crea_playlist(): try: # Propone all’utente la libreria di canzoni dalla quale può creare la playlist print(‘Queste sono le canzoni che è possibile aggiungere alla tua playlist’)

    # Richiama la funzione visualizza libreria visualizza()

    # Ottiene e Convalida la scelta num_canzoni = int(input(‘Quante canzoni vuoi inserire? ‘)) while num_canzoni

  • # Questa funzione aggiunge record a una playlist già creatadef aggiungi_canzone(): # Solleva un’eccezione try: # Crea una variabile per controllare il ciclo ripeti = ‘s’

    # Apre il file playlist.txt in modalità di aggiunta file_playlist = open(‘playlist.txt’, ‘a’)

    # Aggiunge record al file ripeti = input(‘Vuoi inserire una canzone? s=si altrimenti no: ‘) while ripeti == ‘s’ or ripeti == ‘S’: # Ottiene i dati del record riguardanti la canzone print(‘Inserire i dati della canzone: ‘) titolo = input(‘Titolo: ‘) durata = int(input(‘Durata in secondi: ‘))

    # Se il valore ricercato non è stato trovato nel file, # visualizza un messaggio if titolo: print(‘La canzone è stata aggiunta.’) else: print(‘Questa canzone è già presente.’)

    # Aggiunge i dati al file file_playlist.write(titolo + ‘\n’) file_playlist.write(str(durata) + ‘\n’)

    # Determina se l’utente desidera aggiungere un’altra canzone al file print(‘Vuoi inserire un\’altra canzone? ‘) ripeti = input(‘s=si, altrimenti=no: ‘)

    # Chiude il file e torna al menù file_playlist.close() print(‘Dati aggiunti a playlist.txt’) torna()

    # Restutuisce un messaggio di errore quando l’utente inserisce una stringa al posto di un numero except ValueError: print(‘ERRORE: Affinchè la scelta sia valida digita un numero compreso tra 1 e 11’) aggiungi_canzone()

    # Questa funzione consente all’utente di eliminare un record# nel file playlist.txtdef cancella(): # Importa la funzione os necessaria per le funzioni remove e rename import os

    # Propone all’utente la lista di canzoni che si possono cancellare print(‘Queste sono le canzoni che è possibile eliminare dalla tua playlist: ‘)

    # Richiama la funzione visualizza libreria

  • visualizza_playlist()

    # Crea una variabile booleana da usare come flag found = False

    # Ottiene la canzone da eliminare cerca = input(‘Quale canzone vuoi eliminare? ‘)

    # Apre il file playlist.txt in lettura file_playlist = open(‘playlist.txt’, ‘r’)

    # Apre un file temporaneo in scrittura temp_file = open(‘temp.txt’, ‘w’)

    # Legge il campo della descrizione del primo record descr = file_playlist.readline()

    # Legge il resto del file while descr != ‘’: # Legge il campo del titolo titolo = file_playlist.readline()

    # Elimina il carattere \n della descrizione descr = descr.rstrip(‘\n’)

    # Se non è questo il record da eliminare, # lo scrive sul file temporaneo if descr != cerca: # Scrive il record sul file temporaneo temp_file.write(descr + ‘\n’) temp_file.write(titolo + ‘\n’) else: # Imposta su True il flag found found = True

    # Legge la descrizione successiva descr = file_playlist.readline()

    # Chiude il file playlist.txt e quello temporaneo file_playlist.close() temp_file.close()

    # Elimina il file playlist.txt originale os.remove(‘playlist.txt’)

    # Rinomina il file temporaneo os.rename(‘temp.txt’, ‘playlist.txt’)

    # Se il valore ricercato non è stato trovato nel file # visualizza un messaggio if found: print(‘Il file è stato aggiornato.’) else:

  • print(‘Questo elemento non è stato trovato nel file.’)

    # Richiama la funzione torna al menù principale torna()

    # Questa funzione consente all’utente di sostituire una canzone# dal file playlist.txtdef sostituisci(): # Importa la funzione os necessaria per le funzioni remove e rename import os

    # Fa visualizzare all’utente la propria playlist print(‘Queste sono le canzoni presenti nella tua playlist: ‘)

    # Richiama la funzione visualizza libreria visualizza_playlist()

    # Crea una variabile booleana da usare come flag found = False

    # Ottiene il titolo da cercare e quello nuovo da inserire cerca = input(‘Inserire un titolo da cercare: ‘) nuovo_titolo = input(‘Inserire il nuovo titolo: ‘)

    #Apre il file playlist.txt originale in lettura file_playlist = open(‘playlist.txt’, ‘r’)

    # Apre il file temporaneo in scrittura temp_file = open(‘temp.txt’, ‘w’)

    # Legge il campo della descrizione del primo record titolo = file_playlist.readline()

    # Legge il resto del file while titolo != ‘’: # Legge il campo della durata durata = file_playlist.readline()

    # Elimina il carattere \n dal titolo titolo = titolo.rstrip(‘\n’)

    # Scrive questo record nel file temporaneo, # oppure il nuovo record se questo è quello # che dev’essere modificato if titolo == cerca: # Scrive nel file temporaneo il record modificato temp_file.write(nuovo_titolo + ‘\n’) new_durata = int(input(‘Inserisci la nuova durata: ‘)) temp_file.write(str(new_durata) +’\n’)

    # Imposta nel file temporaneo il record modificato found = True else:

  • # Scrive nel file temporaneo il record originale temp_file.write(titolo + ‘\n’) temp_file.write(durata + ‘\n’)

    # Legge la descrizione successiva titolo = file_playlist.readline()

    # Chiude il file playlist.txt e quello temporaneo file_playlist.close() temp_file.close()

    # Elimina il file playlist.txt originale os.remove(‘playlist.txt’)

    # Rinomina il file temporaneo os.rename(‘temp.txt’, ‘playlist.txt’)

    # Se il valore ricercato non è stato trovato nel file, # visualizza un messaggio if found: print(‘La canzone è stata sostituita.’) else: print(‘Questo elemento non è stato trovato nel file.’)

    # Richiama la funzione torna al menù principale torna()

    def calcola_durata(): try: # Fa visualizzare all’utente la propria playlist print(‘Queste sono le canzoni presenti nella tua playlist: ‘)

    # Richiama la funzione visualizza libreria visualizza_playlist()

    #Ottiene il numero di record da creare numero = int(input(‘Quanti valori vuoi inserire? ‘))

    # Apre il file in scrittura file = open(‘durata.txt’, ‘w’)

    # Ottiene i dati e li scrive nel file for count in range(1, numero + 1): # Ottiene il primo valore valore = input(‘Valore da sommare: ‘)

    # Scrive i dati nel file come record file.write(valore + ‘\n’)

    # Chiude il file file.close()

    # Inizializza un accumulatore

  • totale = 0

    # Apre il file durata.txt file = open(‘durata.txt’, ‘r’)

    # Legge i valori dal file e li accumula for x in file: amount = float(x) totale += amount

    # Chiude il file file.close()

    # Stampa il totale print(totale)

    # Richiama la funzione torna al menù principale torna()

    except ValueError: print(‘ERRORE: affinchè la scelta sia valida digita un valore corretto. ‘) calcola_durata()

    # Chiama la funzione mainmain()