script
Esercitazioni di Gabriel Battaglia col linguaggio python.
Gabriel Battaglia su uictech,dal  11\04\2013, h. 08.46.

Sommario:
a)Programmazione: Esempio Python: Collezioni.
B)Programmazione: battaglia navale.

Questo script Python è un'idea ripresa da un programmino che feci in Quick Basic, negli anni 90. 
L'esigenza me la diede mia zia,
quando, una sera, mi telefonò dopo aver scoperto di essere in cinta di un mese circa.
Mi disse: "Dai, mettiti lì con i tuoi amici, e scrivimi una bella lista di nomi per il bambino. 
Anzi 2: una di nomi maschili ed una
per i nomi femminili."

Mi misi a pensare a come poter trasformare la cosa in un gioco per la mia compagnia la quale, 
durante alcune serate particolarmente
morte, d'inverno, non trovava niente di meglio da fare se non riunirsi nel mio garage, a fumare, 
bere, mangiare patatine, giocare ai
giochi di ruolo, a carte ed a qualsiasi cosa ci le venisse in mente: l'importante era sfidarsi, 
battersi, prendersi in giro,
scommettere e vincere qualcosa, foss'anche una paglia (sigaretta).

Allora accesi il mio Intel pentium 90, con l'incredibile hard disk da ben 425 MB, DOS 6.1 e 
QuickBasic. Scrissi un programma che
chiedeva all'utente una stringa, controllava che non fosse già presente in un archivio che aveva 
caricato dal disco e, se non c'era,
ve la aggiungeva. Riportava poi il totale delle stringhe presenti, le ordinava alfabeticamente 
usando una specie di algoritmo Bubble
sort che avevo letto da qualche parte e poi salvava il tutto su disco.
Riuscii ad inserire da solo circa 220 nomi di donna e poi presentai il "prodotto software" sorriso, 
al grande pubblico, la prima
volta che il gruppo si riunì in garage.

Chi riusciva a far entrare nel DB il maggior numero di nomi di donna a cui non avevo pensato, 
avrebbe avuto piada e birra offerti
dal resto del gruppo.
Beh, la cosa andò avanti alcune sere, ognuno si teneva segnati i nomi che riusciva a far passare e 
nel frattempo interrogava i
genitori e gli amici per scovare nomi strani e inconsueti. Non ricordo chi vinse, ma forse fu 
Mighè, il nostro statistico del
gruppo... Ricordo che arrivammo a 325 o giù di lì.

Bene, se ancora qualcuno legge questo thread ed è interessato ad approfondire Python, ecco lo 
stesso programma, funzionante e molto
meglio fatto ed elegante.

I commenti aiutano a capire il codice. Accetto, a scopo didattico, qualsiasi tipo di commento e 
suggerimento.
***

# Collezioni Carica e salva su disco una raccolta di nomi univoci.
# Il commento si riferisce sempre alla riga sottostante.

# Importa un modulo per salvare su file qualsiasi tipo di oggetto.
import pickle
print "Alfanomi 1.0 - 5 aprile 2013 - by Gabriel battaglia Kriyaban"

# Chiede il nome della collezione ed attua alcuni controlli e aggiustamenti sulla stringa inserita
print "\n\n- Nome della collezione:",
clz=raw_input()
clz=str.lower(clz)
clz=str.strip(clz)
print "\n---Inserisci una riga vuota per concludere."

# Prova ad aprire il file, se non esiste, lo crea.
try:
f=open(clz+".gbd","r")
print "\n\n- Caricamento di "+clz+".gbd"+" in corso..."
l=pickle.load(f)
f.close()
except IOError:
print "\a\n\n- Creazione di "+clz+".gbd"+" in corso..."
l=[]
f=open(clz+".gbd","w")
nome="Gabriele"

# Inizia il ciclo di richiesta stringhe.
while nome != "":
ins=len(l)
print "Oggetto ",ins+1,": ",
nome=raw_input()
nome=str.strip(nome)
nome=str.capitalize(nome)
if (nome != "" and nome not in l):
l.append(nome)
l.sort()
continue
if nome == "": continue
i=l.index(nome)
if i  2:
j1=0
if iins-3:
j2=ins-1
else:
j2=i+2
elif iins-3:
j2=ins-1
j1=i-2
else:
j1=i-2
j2=i+2
print "Elemento in posizione %d: %2.2f%%" % (i, (float(i)*100)/ins)
for j in range(j1, j2+1):
if i==j: print "("+l[j]+")"+".",
else: print l[j]+",",
print "\n"
pickle.dump(l,f)
f1=open(clz+".txt","w")
for j in range(ins):
f1.writelines(l[j]+"\r\n")
print "\n- File: "+clz+".txt"+" salvato."
f.close()
f1.close()
print"Arrivederci."
***

***
b)programmazione: battaglia navale:
Torna all'indice