[Python] Strano errore.
Gabriele Battaglia
iz4apu a libero.it
Mer 11 Nov 2020 14:36:43 CET
Reply to the Marco Beri's message, wrote on 11/11/2020 at 14:26:
> On Wed, 11 Nov 2020 at 14:16, Gabriele Battaglia <iz4apu a libero.it
> <mailto:iz4apu a libero.it>> wrote:
>
> Marco, grazie per la risposta.
> So che la mia prossima affermazione farà ribrezzo ma.... non so usare
> pastebin.
> Se ti mando in privato il semplice .py, che non ha dipendenze e non fa
> nulla di pericoloso, giuro, :) andrebbe bene lo stesso?
>
>
> Gabriele,
> se non è roba riservata e non sono 10 mega puoi anche mandarla qui :-)
>
> Come preferisci.
>
Ma figurati, quale privata!
Vorrebbe essere una piccola utility per la gestione della squadra
giovanile del browser game www.hattrick.org
Una cosa semplicissima e ancora appena abbozzata.
La allego.
-------------- parte successiva --------------
'''
IFM - I Fiua ad Magnavaca
Gestionale per la mia squadra giovanile di Hattrick
Data concepimento: giovedì 22 ottobre 2020.
'''
import pickle, datetime
from GBUtils import gbput
#Costanti
VER = "0.5.1 del 11 novembre 2020."
DT = datetime.date
MESI=['gennaio','febbraio','marzo','aprile','maggio','giugno','luglio','agosto','settembre','ottobre','novembre','dicembre']
GIORNI=['lunedì','martedì','mercoledì','giovedì','venerdì','sabato','domenica']
RUOLI = ['portiere', 'difensore', 'terzino', 'centrocampista', 'ala', 'attaccante', 'sconosciuto']
SPECIALITA = ['colpo di testa', 'veloce', 'potente', 'tecnico', 'imprevedibile', 'coriaceo', 'trascinatore', 'nessuna']
PARAMETRIINIZIALI = [
[15,0], # 0. lst età [anni,gg]
DT.today(), # 1.data assunto in squadra
"No", # 2. str specialità
0, # 3. int parate ora
0, # 4. int parate potenziale
0, # 5. difesa
0, # 6. dif pot
0, # 7. regia
0, # 8. reg pot
0, # 9. cross
0, # 10. cross pot
0, # 11. pass
0, # 12. pass pot
0, # 13. attacco
0, # 14 att pot
0, # 15. piazzati
0, # 16. piaz pot
0, # 17. migl.par
0, # 18. migl.DC
0, # 19. migl.Terz
0, # 20. migl.CC
0, # 21. migl.ala
0, # 22. migl.att
DT.today(1974,9,13), # 23. date ultima partita giocata
"sconosciuto", # 24. str ultimo ruolo giocato
90, # 25. int minuti giocati
"Lo scout dice: Nessun commento inserito", # 26. str commento scout
0, # 27. int numero maglia
[], # 28. lst Ruoli inutili
[], # 29. lst posizioni papabili
False, # 30. bool carisma interessante
0, # 31. int RC ricevuto complimento allenatore
0, # 32. int Ricevuto Rimbrotto allenatore
0, # 33. int UP uomo partita
0, # 34. int PP pippa della partita
False, # 35. bool DL da licenziare
False, # 36. bool DP da promuovere
[], # 37. lst nota allenatore
[], # 38. lst note personali
False, # 39 bool disonesto
0, # 40 int infortunato settimane
0, # 41 unk parametro di riserva per future implementazioni
0, # 42 unk parametro di riserva per future implementazioni
0, # 43 unk parametro di riserva per future implementazioni
0, # 44 unk parametro di riserva per future implementazioni
0, # 45 unk parametro di riserva per future implementazioni
0, # 46 unk parametro di riserva per future implementazioni
0, # 47 unk parametro di riserva per future implementazioni
]
MENuLISTA = [
" - ( M ) - questo Menù;",
" - ( A ) - Aggiungi;",
" - ( EU) - Elimina Ultimo;",
" - ( EP) - Elimina Primo;",
" - (ETR) - Elimina Tramite Ricerca;",
" - ( CT) - Cancella Tutto;",
" - INVIO - Esci senza modificare nulla."
]
MENUGIOCATORE = [
"- (ETA) - Età espressa in anni e giorni;"
"- (DAS) - Data di Assunzione in Squadra;"
"- (SPE) - Specialità;"
"- ( p ) - Parate attuali, - ( P ) - Parate Max;"
"- ( d ) - Difesa attuale, - ( D ) - Difesa Max;"
"- ( r ) - Regia attuale, - ( R ) - Regia Max;"
"- ( c ) - Cross attuale, - ( C ) - Cross Max;"
"- ( s ) - Passaggi attuali, - ( S ) - Passaggi Max;"
"- ( a ) - Attacco attuale, - ( A ) - Attacco Max;"
"- ( z ) - C.Piazzati attuali, - ( Z ) - C.Piazzati Max;"
"- (MVP) - Massima Valutazione in Parate;"
"- (MVD) - Massima Valutazione in Difesa;"
"- (MVT) - Massima Valutazione come Terzino;"
"- (MVR) - Massima Valutazione come Regista;"
"- (MVL) - Massima Valutazione come aLa;"
"- (MVA) - Massima Valutazione in Attacco;"
"- (DUP) - Data Ultima Partita giocata;"
"- (URG) - Ultimo Ruolo Giocato;"
"- (MUP) - Minuti giocati nell'Ultima Partita;"
"- (CDS) - Commento Dello Scout;"
"- ( NM) - Numero Maglia;"
"- ( RI) - Ruoli Inutili;"
"- ( RP) - Ruoli Papabili;"
"- ( CI) - Carisma Interessante;"
"- ( RC) - Ricevuto complimento Allenatore;"
"- ( RR) - Ricevuto Rimbrotto Allenatore;"
"- ( UP) - Uomo partita;"
"- ( PP) - Pippa della Partita;"
"- ( DL) - Da Licenziare;"
"- ( DP) - Da Promuovere;"
"- ( NA) - Note Allenatore;"
"- ( NP) - Note Personali;"
"- ( PD) - Personalità Disonesta;"
"- ( I ) - Infortunato;"
]
MENUPRINCIPALE = ["- (MEN) - Visualizza questo MENù;", \
"- ( E ) - Elimina un giocatore dal DB;", \
"- ( L ) - Lista di tutti i giocatori", \
"- Parte del nome o cognome - Entra nella scheda giocatore", \
"- INVIO - Esce dal programma."]
#Variabili
ifm = {}
#quif
def Mostradata(d):
'''Riceve un oggetto data e ritorna una stringa formattata.'''
anno, mese, giorno = ifm[s][i].year, ifm[s][i].month, ifm[s][i].day
giornods = ifm[s][i].weekday
return(f"{GIORNI[giornods-1]} {giorno} {MESI[mese-1]}, {anno}")
def VLista(l, filtro=""):
'''Visualizzatore di liste
Riceve la lista e il filtro'''
for j in l:
if filtro != "":
if filtro.lower() in str(j).lower(): print(j)
else: print(j)
return
def SalvaDB():
f = open("IFM.db","wb")
pickle.dump(ifm, f, protocol=-1)
f.close()
return
def EInSquadra(s):
'''torna Nome Cognome se s è contenuta nel nome o cognome dei presenti in squadra
Altrimenti torna vuoto'''
for j in ifm.keys():
if s in j.lower(): return(j)
return ""
def Aggiungilo(s):
'''Riceve il nomecognome giocatore e lo aggiunge'''
ifm[s] = PARAMETRIINIZIALI
print(f"Totale giocatori in squadra {len(ifm)}, giocatore {s} aggiunto.")
return
def Modificalo(s):
'''Riceve chiave giocatore e consente la modifica di ogni suo parametro'''
print(f"Menù di {s}\n- Digita M per la lista parametri, invio per uscire.")
s1, s2 = s.split(" ")
prompt = s1 + " " + s2[0]
while True:
key = gbput(prompt, smax = 12)
keyl = key.lower()
if keyl == "m": VLista(MENUGIOCATORE)
elif keyl == "": break
elif keyl == "eta":
print("Modifica età:")
ifm[s][0][0] = gbput("Anni: ", "i", imin=15, imax=17)
ifm[s][0][1] = gbput("Giorni: ", "i", imin=0, imax=111)
print("Fatto!")
elif keyl == "das":
print("Modifica la data in cui il giocatore è stato assunto in squadra")
Impostaparametro(1, "d")
elif keyl == "spe":
print("Assegna una specialità al giocatore")
while True:
key0 = gbput("Quale? ", smax=10)
if key0.lower() in SPECIALITA: break
else:
print("Riprova.")
VLista(SPECIALITA)
for j in SPECIALITA:
if key0.lower() in j: break
ifm[s][2] = j
print(f"Assegnata la specialità [j] al giocatore [s].")
elif key == "p": Impostaparametro(3, "i")
elif key == "P": Impostaparametro(4, "i")
elif key == "d": Impostaparametro(5, "i")
elif key == "D": Impostaparametro(6, "i")
elif key == "r": Impostaparametro(7, "i")
elif key == "R": Impostaparametro(8, "i")
elif key == "c": Impostaparametro(9, "i")
elif key == "C": Impostaparametro(10, "i")
elif key == "s": Impostaparametro(11, "i")
elif key == "S": Impostaparametro(12, "i")
elif key == "a": Impostaparametro(13, "i")
elif key == "A": Impostaparametro(14, "i")
elif key == "z": Impostaparametro(15, "i")
elif key == "Z": Impostaparametro(16, "i")
elif keyl == "mvp":
print("Miglior valutazione in parate.\nStelle: ",end="")
Impostaparametro(17, "i")
elif keyl == "mvd":
print("Miglior valutazione in difesa\nStelle: ",end="")
Impostaparametro(18, "i")
elif keyl == "mvt":
print("Miglior valutazione come terzino\nStelle: ",end="")
Impostaparametro(19, "i")
elif keyl == "mvr":
print("Miglior valutazione come regista\nStelle: ",end="")
Impostaparametro(20, "i")
elif keyl == "mvl":
print("Miglior valutazione come ala\nStelle: ",end="")
Impostaparametro(21, "i")
elif keyl == "mva":
print("Miglior valutazione in attacco\nStelle: ",end="")
Impostaparametro(22, "i")
elif keyl == "dup":
print("Specifica la data dell'ultima partita giocata: ",end="")
Impostaparametro(23, "d")
elif keyl == "urg":
print("Registra l'ultimo ruolo in cui ha giocato")
while True:
key0 = gbput("Quale? ", smax=10)
if key0.lower() in RUOLI: break
else:
print("Riprova.")
VLista(RUOLI)
for j in RUOLI:
if key0.lower() in j: break
ifm[s][24] = j
print(f"Ultimo ruolo {j}, per {s}.")
if keyl == "mup":
ifm[25] = gbput("Minuti giocati nell'ultima partita: ", "i", imin = 1, imax = 90)
if keyl == "cds":
ifm[26] = gbput("Cos'ha detto lo scout di questo giovane? ", smax=500)
if keyl == "nm":
ifm[27] = gbput("Numero maglia? ", "i", imin=0, imax=100)
if keyl == "ri":
print("Aggiungi un ruolo inutile per il giocatore.")
Impostaparametro(28, "l")
if keyl == "rp":
print("Aggiungi un ruolo utile per il giocatore.")
Impostaparametro(29, "l")
if keyl == "ci":
print("Metti una bandierina su Carisma Interessante.")
Impostaparametro(30, "b")
if keyl == "rc":
print("Aumenta di 1 il contatore dei complimenti ricevuti.")
ifm[31] += 1
print(f"{s} ha ricevuto per {ifm[s][31]} volte, i complimenti dell'allenatore.")
if keyl == "rr":
print("Aumenta di 1 il contatore dei rimbrotti ricevuti.")
ifm[32] += 1
print(f"{s} ha ricevuto per {ifm[s][32]} volte, i rimbrotti dell'allenatore.")
if keyl == "up":
print("Aumenta di 1 il contatore Uomo Partita")
ifm[33] += 1
print(f"{s} stato Uomo partita {ifm[s][33]} volte")
if keyl == "pp":
print("Aumenta di 1 il contatore Pippa della Partita.")
ifm[34] += 1
print(f"{s} stato per {ifm[s][34]} volte, Pippa della Partita.")
if keyl == "dl":
print("Metti la bandierina sullo stato: Da Licenziare.")
Impostaparametro(35, "b")
if keyl == "dp":
print("Metti la bandierina sullo stato: Da Promuovere.")
Impostaparametro(36, "b")
if keyl == "na":
print("Aggiungi nota Allenatore:")
Impostaparametro(37, "l")
if keyl == "np":
print("Aggiungi nota Personale:")
Impostaparametro(38, "l")
if keyl == "pd":
print("Metti la bandierina sullo stato: Personalità Disonesta.")
Impostaparametro(39, "b")
if keyl == "i":
ifm[40] = gbput("Settimane d'infortunio? ", "i", imin=0, imax=16)
return
def Impostaparametro(s, i, t):
''' Routine per impostare parametri ricorrenti del giocatore
riceve s=chiave giocatore, i=indice del parametro da impostare e t= tipo di dato da impostare
non restituisce nulla perchè modifica direttamente il global ifm'''
if t == "b":
if ifm[s][i]:
ifm[s][i] = False
print("Bandierina abbassata!")
else:
ifm[s][i] = True
print("Bandierina alzata!")
elif t == "i":
ifm[s][i] = gbput("Nuovo valore? ", "i")
print("Valore impostato a: ", ifm[s][i])
elif t == "l":
print(f"La lista contiene {len(ifm[s][i]) commenti. Gestione lista:\n- M per il menù, invio a vuoto per uscire.")
while True:
key = gbput("Comando Lista: >", smax=3)
key = key.lower()
if key == "m": VLista(MENuLISTA)
elif key == "": break
elif key == "a": ifm[s][i].append(gbput("Nota? ", smax=500)); break
elif key == "ct":
ifm[s][i].clear()
print("Tutte le note sono state cancellate.")
break
elif key == "ep":
ifm[s][i].pop(0)
break
elif key == "eu":
ifm[s][i].pop()
break
elif key == "etr":
etr = gbput("Inserisci la parola chiave appartenente all'elemento da eliminare: ", smax=16)
for j in ifm[s][i]:
if etr.lower() in j.lower(): break
key1 = gbput(f"Trovato '{j}', elimino? S = Sì: ", smax=1)
if key1.lower() == "s": ifm[s][i].remove(j); break
else: break
elif t == "d":
print(f"La data salvata è: {Mostradata(ifm[s][i])}.")
while True:
nuovadata = gbput("Nuova data nel formato aaaa.mm.gg: > ", smax=10)
if nuovadata == "":
return
elif nuovadata.count(".") == 2:
anno, mese, giorno = nuovadata.split(".")
break
elif nuovadata.count(".") == 1:
anno = ifm[s][i].year
mese, giorno = nuovadata.split(".")
break
elif nuovadata.count(".") == 0:
anno = ifm[s][i].year
mese = ifm[s][i].month
giorno = nuovadata
break
else: print("Formato non corretto.")
if not anno.isdigit() or not mese.isdigit() or not giorno.isdigit():
print("Inserire solo valori numerici.")
return
ifm[s][i] = DT(anno, mese, giorno)
else: print("Errrore di chiamata")
return
#main
print("IFM - Gestionale della mia squadra giovanile di Hattrick\n\t\t- Versione: " + VER +"\n")
try:
print("Caricamento database...", end=" ")
f = open("IFM.db","rb")
ifm = pickle.load(f)
f.close()
print("fatto.")
except IOError:
print("non trovato. Creazione db in corso... ",end="")
SalvaDB()
print("fatto.")
print("Digita MEN per accedere al menù principale dell'App.")
while True:
s = gbput("Dimmi: >", smax=36).lower()
if s == "": break
if s == "men": VLista(MAINMENU)
if s == "l": Listagiocatori()
if s == "e": Eliminagiocatore()
if len(s) > 3:
g = EInSquadra(s)
if g != "": Mostralo(g)
elif " " in s[1:][:-1]:
s = s.title()
Aggiungilo(s)
Modificalo(s)
else: print(f"Comando {s} non riconosciuto")
SalvaDB()
print("Arrivederci da IFM versione: " + VER)
Maggiori informazioni sulla lista
Python