'''
ARGOMENTI:
---------------------------------------------------------------------
       
    - liste
			Una lista e' una serie ordinata di valori, ognuno identificato da un indice. 
			I valori che fanno parte della lista sono chiamati elementi. 
			Le liste sono simili alle stringhe essendo insiemi ordinati di caratteri, 
			fatta eccezione per il fatto che gli elementi di una lista possono 
			essere di tipo qualsiasi. 
			
			Liste e stringhe (e altri tipi di dati che si comportano da 
			insiemi ordinati) sono chiamate sequenze.

			
'''
print ("\n\n\n")
print ("1^ ESEMPIO - LISTE")
print ("-------------------------------")
for i in range(5,10):
	print (i)
print ("------")
for i in range(3,31,4):   # terzo parametro: 'step'
	print (i)
print ("------")
classi= ["1A", "2A", "3A", "4A", "5A"] 
print (type(classi))
print (classi[0])
print (classi[3])
print (classi[7-5])
print (len(classi))
print (classi[len(classi)-1])  # ultimo elemento
print ("------")
i=0 
while i < len(classi): 
  print (classi[i]) 
  i = i+1

  	
print ("\n\n\n")
print ("2^ ESEMPIO - LISTE ANNIDATE")
print ("-------------------------------")
miaLista= [343, [1,2], ["A", "B", "C"], "ciao"] 
print (" >>> Stampa la lista")
i=0 
while i < len(miaLista): 
  print ("\t", miaLista[i]) 
  i = i+1
print (" >>> Lunghezza delle liste interne a classi")
i=0 
while i < len(miaLista): 
	if type(miaLista[i])==list:
		print ("\t", miaLista[i], "ha lunghezza:", len(miaLista[i]))
	elif type(miaLista[i])==str:
		print ("\t", miaLista[i], "non e' una lista ma posso calcolarne la lunghezza:",len(miaLista[i]) )
	else:
		print ("\t", miaLista[i], "non e' una lista")
	i = i+1


print ("\n\n\n")
print ("2^ ESEMPIO - APPARTENENZA AD UNA LISTA")
print ("-------------------------------")
italia=["Roma", "Napoli", "Torino" , "Milano", "Bari", "Foggia", "Avellino"]
citta=["Bari","Parigi", "Madrid", "Milan", "Foggia", "Zurigo", "Roma"]
print ("Lista ITALIA:",italia) 
print ("Lista CITTA:",citta) 
print ("\n")
i=0 
while i < len(citta): 
	if citta[i] in italia:    # e' possibile utilizzare anche 'not in'
		print (citta[i], "\t\t appartiene alla lista ITALIA")
	else:
		print (citta[i], "\t\t NON appartiene alla lista ITALIA")
	i = i+1




print ("\n\n\n")
print ("3^ ESEMPIO - ELIMINARE E AGGUNGERE ELEMENTI")
print ("-------------------------------")
italia=["Roma", "Napoli", "Torino" , "Milano", "Bari", "Foggia", "Avellino"]
citta=["Bari","Parigi", "Madrid", "Milan", "Foggia", "Zurigo", "Roma"]
estero=[] 
print ("Lista ITALIA:",italia) 
print ("Lista CITTA':",citta)
print ("Lista ESTERO:",estero) 
print ("\n")
# ---------------------------------------------
i=0 
while i < len(citta): 
	if citta[i] not in italia:  
		estero.append (citta[i])  	# inserimento	
	i = i+1
print ("Lista ESTERO:",estero) 
# ---------------------------------------------
estero.sort()    					# ordina la lista
print ("Lista ESTERO ordinata:",estero) 
del estero[1]						# eliminazione
print ("Lista ESTERO senza Milan:",estero) 
# ---------------------------------------------
i=0 
while i < len(citta): 
	if citta[i] in italia:  
		del(citta[i])   # non incremento 'i' perche' ho eliminato l'elemento 
	else:	
		i = i+1
print ("Lista CITTA' estere:",citta)	




# ----------------------------------------------------------------------
# Adattato da: https://www.python.it/doc/Easytut/easytut-it/node10.html
# ----------------------------------------------------------------------
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 ("9. Uscita")
	print ("-----------------------")
	selezione = input("Opzione: ")
	
	# stampa -----------------------------------------------------------
	if selezione == "1":										
		if len(miaLista) > 0:
			i = 0
			print (" ----- Inizio lista")
			while i < len(miaLista):
				mes = str(i)+") "
				print (mes ,miaLista[i])
				i = i + 1
			print (" ----- Fine lista")
		else:
			print (" >>> Lista VUOTA")
					
	# inserimento ------------------------------------------------------
	elif selezione == "2":							
		elemINS = input("Elemento da inserire: ")
		miaLista.append(elemINS)
		print (" >>> Elemento inserito:", elemINS)
	
	# eliminazione -----------------------------------------------------   
	elif selezione == "3":						
		elemDEL = input("Elemento da eliminare: ")
		if elemDEL in miaLista:
			indice = miaLista.index(elemDEL)
			# NOTA: se vi sono nella lista elementi duplicati
			# si posiziona solo sul primo.
			del miaLista[indice]
			print (" >>> Elemento rimosso:", elemDEL)
				
		else:
			print (" >>> ELEMENTO non trovato")
	
	# modifica ---------------------------------------------------------
	elif selezione == "4":
		elemUPD = input("Elemento da modificare: ")
		if elemUPD in miaLista:
			indice = miaLista.index(elemUPD)
			# NOTA: se vi sono nella lista elementi duplicati
			# si posiziona solo sul primo.
			elemNEW = input("Nuovo elemento: ")
			miaLista[indice] = elemNEW
			print (" >>>", elemUPD, "sostituito da:",elemNEW )
		else:
			print (" >>> ELEMENTO non trovato")
	
	# ordinamento ------------------------------------------------------
	elif selezione == "5":
		miaLista.sort()
		print (" >>> ORDINAMENTO effettuato")
		
	# uscita -----------------------------------------------------------
	elif selezione == "9":
		print (">>> CIAO!!!!")
		break
	# opzione non valida -----------------------------------------------
	else:
		print (" >>> OPZIONE NON VALIDA")

	attesa = input("\n >>> Premere INVIO per visualizzare il menu...")


