'''
ARGOMENTI:
---------------------------------------------------------------------
       
    - funzioni
			Una funzione e' una parte di codice separata dal flusso principale. 
			L'importanza, la praticita' e i vantaggi di una funzione stanno 
			nel fatto che può essere "richiamata" in diversi punti del programma 
			di cui fa parte, ogni volta in cui si ha la necessita' di farlo, 
			come se fosse una singola istruzione senza la necessita' di dover 
			riscrivere ogni volta il relativo codice.
			
			Python prevede sia funzioni native del linguaggio che la 
			possibilità di creare funzioni personalizzate. 

			Ad una funzione possono essere passati dei parametri sui quali 
			la funzione dovra' agire  e puo' determinare o meno la restituzione 
			di un valore di ritorno introdotto tramite la keyword return.	
		
	variabili globali e variabili locali
			Tutte le variabili viste finora erano "variabili globali". 
			Le variabili dichiarate all'interno di una funzione sono 
			chiamate "variabili locali", che esistono solamente per la 
			durata della funzione stessa. 
			Quando una variabile locale ha lo stesso nome di una variabile globale, 
			la variabile locale nasconde l'altra variabile. 

			Per poter modificare il valore di una variabile globale dall'interno 
			di una funzione, bisogna dichiarare al suo interno la variabile 
			anteponendo la parola chiave "global".
			
'''
#-----------------------------------------------------------------------
def f_stampa(lista):
	if len(lista) > 0:
		i = 0
		print (" ----- Inizio lista")
		while i < len(lista):
			mes = str(i)+") "
			print (mes ,lista[i])
			i = i + 1
		print (" ----- Fine lista")
	else:
		print (" >>> Lista VUOTA")
		
#-----------------------------------------------------------------------		
def f_inserisci(lista):		
	elemINS = input("Elemento da inserire: ")
	lista.append(elemINS)
	print (" >>> Elemento inserito:", elemINS)	


#-----------------------------------------------------------------------		
def f_elimina(lista):			
	elemDEL = input("Elemento da eliminare: ")
	if elemDEL in lista:
		indice = lista.index(elemDEL)
		# NOTA: se vi sono nella lista elementi duplicati
		# si posiziona solo sul primo.
		del lista[indice]
		print (" >>> Elemento rimosso:", elemDEL)
			
	else:
		print (" >>> ELEMENTO non trovato")


#-----------------------------------------------------------------------		
def f_modifica(lista):
	elemUPD = input("Elemento da modificare: ")
	if elemUPD in lista:
		indice = lista.index(elemUPD)
		# NOTA: se vi sono nella lista elementi duplicati
		# si posiziona solo sul primo.
		elemNEW = input("Nuovo elemento: ")
		lista[indice] = elemNEW
		print (" >>>", elemUPD, "sostituito da:",elemNEW )
	else:
		print (" >>> ELEMENTO non trovato")
		
#-----------------------------------------------------------------------		
def f_ordina(lista):	
		lista.sort()
		print (" >>> ORDINAMENTO effettuato")

#-----------------------------------------------------------------------
# Funzione inserita solo per far capire il funzionamento del 'return'
# La stampa della stringa viene effettuata all'esterno della funzione
		
def f_concatena(lista):
	i=0
	concatena=""
	while i < len(lista):
		concatena = concatena + lista[i]
		i = i + 1
	return concatena
#-----------------------------------------------------------------------

print ("\n\n\n")
print ("4^ ESEMPIO - MENU")

selezione = 0
miaLista = []
while selezione != "9":
	print ("\n\n\n")
	print ("------------------------")
	print (" OPERAZIONI SULLA LISTA ")
	print ("------------------------")
	print ("1. Stampa")
	print ("2. Inserimento")
	print ("3. Cancellazione")
	print ("4. Modifica")
	print ("5. Ordinamento")
	print ("6. Concatena")
	print ("9. Uscita")
	print ("-----------------------")
	selezione = input("Opzione: ")
	
	

	if selezione == "1":
		f_stampa(miaLista)									

	elif selezione == "2":	
		f_inserisci(miaLista)						

	elif selezione == "3":
		f_elimina(miaLista)						
	
	elif selezione == "4":
		f_modifica(miaLista)
	
	elif selezione == "5":
		f_ordina(miaLista)
	
	elif selezione == "6":
		ris=f_concatena(miaLista)
		print ("Concatenazione=",ris)
		
		
	elif selezione == "9":
		print (">>> CIAO!!!!")
		break
		
	else:
		print (" >>> OPZIONE NON VALIDA")
	
	attesa = input("\n >>> Premere INVIO per visualizzare il menu...")
