Commit d19bdc86 authored by sbiego's avatar sbiego

merge resolve

parents a5d9b5b1 3475426e
#!/usr/bin/env python3
import math, sys, json
class Torneo(object):
def __init__(self,nome):
self.nome = nome
self.giocatori = {}
def __str__(self):
s = ""
s += "="*(len(self.nome)+2)+"\n"
s += " "+self.nome+"\n"
s += "="*(len(self.nome)+2)+"\n"
for id in self.giocatori:
s+=str(self.giocatori[id]['NOME'])
s+=" ("+str(self.giocatori[id]['ID'])+"):"
s+="\t"+str(self.giocatori[id]['PUNTI'])+" pt"
s+="\t("+str(self.giocatori[id]['MATCH'])+" partite)\n"
return s
def aggiungiGiocatore(self,nome):
"""
Aggiunge al torneo un nuovo Giocatore 'nome'. Controlla per prima cosa che
non esiste un altro giocatore con lo stesso nome. In caso positivo viene
aggiunto il Giocatore. Gli viene assegnato un punteggio iniziale di 1440 e
gli viene associato un numero d' iscrizione.
"""
#controlla che non ci sia un giocatore con lo stesso NOME
for id in range(len(self.giocatori)):
if self.giocatori[id]['NOME'] == nome:
print('Nome gia in uso: scegliere un altro NOME')
return
# crea un dizionario ausiliario che verra' copiato nel torneo, l'ID e' anche chiave (univoca)
nuovoID = self.nome + '_' + str(len(self.giocatori))
nuovoGiocatore = {'NOME' : nome, 'ID' : nuovoID, 'PUNTI' : 1440, 'MATCH' : 0}
# aggiunge il nuovo giocatore al torneo
self.giocatori[len(self.giocatori)] = nuovoGiocatore
def eliminaGiocatore(self, nome):
"""
Elimina dal torneo il Giocatore 'nome'. Nella torneo e nella classifica del
torneo al posto dei dati di tale giocatore sara' presente una riga del tipo
['ND',...]
"""
for id in range(len(self.giocatori)):
if self.giocatori[id]['NOME'] == nome:
# imposta valori oltre i limiti al posto di cancellare, preserva l'ID
self.giocatori[id]['NOME'] = 'ND'
self.giocatori[id]['PUNTI'] = -9999
self.giocatori[id]['MATCH'] = -1
break
def cercaGiocatore(self,nome):
for id in range(len(self.giocatori)):
if self.giocatori[id]['NOME'] == nome:
return True
return False
def aggiornaPunteggioX(self,nome,nuovoPunteggio):
"""
Cambia il punteggio del giocatore 'nome'
(incrementa di 1 il valore 'MATCH')
"""
if self.cercaGiocatore(nome):
for id in range(len(self.giocatori)):
if self.giocatori[id]['NOME'] == nome:
self.giocatori[id]['PUNTI'] = nuovoPunteggio
self.giocatori[id]['MATCH'] = self.giocatori[id]['MATCH'] + 1
else:
print("Giocatore "+nome+" non trovato.")
def nuoviPunteggiXY(self,giocatoreX,giocatoreY,risultatoX):
"""
Calcola i nuovi di due giocatori dopo una partita. Il risultato
è 1 se vince il primo giocatore, 0 se perde e 0.5 se pareggiano.
"""
#TODO: Ritornare errori se i giocatori non esistono
for id in range(len(self.giocatori)):
if self.giocatori[id]['NOME'] == giocatoreX:
punteggioX = self.giocatori[id]['PUNTI']
MATCHX = self.giocatori[id]['MATCH']
for id in range(len(self.giocatori)):
if self.giocatori[id]['NOME'] == giocatoreY:
punteggioY = self.giocatori[id]['PUNTI']
MATCHY = self.giocatori[id]['MATCH']
#calcola risultato per il giocatoreY
risultatoY = 1 - risultatoX
#calcola risultato atteso per il giocatoreX e il giocatoreY
attesoX = 1/2 + (math.atan((punteggioX - punteggioY)/200)) / math.pi
attesoY = 1 - attesoX
#calcolo coefficienti moltiplicativi per il giocatoreX e il giocatoreY
if (MATCHX > 8 and punteggioX > 1600):
coefficienteX = 10
elif (MATCHX < 6):
coefficienteX = 40
else:
coefficienteX = 20
if (MATCHY > 8 and punteggioY > 1600):
coefficienteY = 10
elif (MATCHY < 6):
coefficienteY = 40
else:
coefficienteY = 20
#calcolo punteggi parziali del giocatoreX e giocatoreY
parzialeX = round((risultatoX - attesoX) * coefficienteX)
parzialeY = round((risultatoY - attesoY) * coefficienteY)
#calcolo punteggi totali del giocatoreX e giocatoreY
punteggioX = punteggioX + parzialeX
punteggioY = punteggioY + parzialeY
return [punteggioX, punteggioY]
def aggiornaPunteggi(self,giocatoreX,giocatoreY,risultatoX):
"""
Calcola i punti ottenuti dopo che il giocatoreX ha sfidato il giocatoreY,
ottenendo un risultatoX = 0 (sconfitta) oppure 0.5 (pareggio) oppure 1
(vittoria). (giocatoreX e giocatoreY sono i numeri d' iscrizione dei
due giocatori che partecipano al torneo). Aggiorna quindi la torneo con i
nuovi punteggi dei giocatori giocatoreX e giocatoreY.
"""
if not self.cercaGiocatore(giocatoreX):
print('GiocatoreX non presente al torneo')
return
if not self.cercaGiocatore(giocatoreY):
print('GiocatoreY non presente al torneo')
return
if (giocatoreX == giocatoreY):
print('Un giocatore non puo giocare contro se stesso')
return
if (risultatoX != 1 and risultatoX != 0.5 and risultatoX != 0):
print('Risultato della partita errato')
return
#calcola nuovi punteggi del giocatoreX e giocatoreY
[nuovoPunteggioX, nuovoPunteggioY] = self.nuoviPunteggiXY(giocatoreX,giocatoreY,risultatoX)
self.aggiornaPunteggioX(giocatoreX,nuovoPunteggioX)
self.aggiornaPunteggioX(giocatoreY,nuovoPunteggioY)
def classifica(self):
"""
Da fare
"""
return Null
t = Torneo("TornElo")
t.aggiungiGiocatore("Adrian")
t.aggiungiGiocatore("Jose")
t.aggiungiGiocatore("Clara")
t.aggiornaPunteggi("Adrian","Jose",1)
t.aggiornaPunteggi("Jose","Clara",1)
t.aggiornaPunteggi("Clara","Adrian",1)
print(t)
......@@ -46,6 +46,11 @@ def nuovoTorneo(nome="torneo"):
return torneo
def aggiungiGiocatore(torneo, nome):
# Aggiunge al torneo un nuovo Giocatore 'nome'. Controlla per prima cosa che
# non esiste un altro giocatore con lo stesso nome. In caso positivo viene
# aggiunto il Giocatore. Gli viene assegnato un punteggio iniziale di 1440 e
# gli viene associato un numero d' iscrizione.
#controlla che non ci sia un giocatore con lo stesso NOME
for id in range(len(torneo['GIOCATORI'])):
if torneo['GIOCATORI'][id]['NOME'] == nome:
......@@ -65,6 +70,10 @@ def aggiungiGiocatore(torneo, nome):
return torneo
def eliminaGiocatore(torneo, nome):
# Elimina dal torneo il Giocatore 'NOMEX'. Nella torneo e nella classifica del
# torneo al posto dei dati di tale giocatore sara' presente una riga del tipo
# ['ND',...]
for id in range(len(torneo['GIOCATORI'])):
if torneo['GIOCATORI'][id]['NOME'] == nome:
# imposta valori oltre i limiti al posto di cancellare, preserva l'ID
......@@ -76,6 +85,9 @@ def eliminaGiocatore(torneo, nome):
scriviJSON(torneo)
def nuoviPunteggiXY(torneo, giocatoreX, giocatoreY, risultatoX):
# Calcola i nuovi di due giocatori dopo una partita. Il risultato
# è 1 se vince il primo giocatore, 0 se perde e 0.5 se pareggiano.
for id in range(len(torneo['GIOCATORI'])):
if torneo['GIOCATORI'][id]['NOME'] == giocatoreX:
punteggioX = torneo['GIOCATORI'][id]['PUNTI']
......@@ -118,8 +130,11 @@ def nuoviPunteggiXY(torneo, giocatoreX, giocatoreY, risultatoX):
return [punteggioX, punteggioY]
def aggiornaTorneo(torneo, giocatoreX, giocatoreY, risultatoX):
# importaJSON(torneo)
# Calcola i punti ottenuti dopo che il giocatoreX ha sfidato il giocatoreY,
# ottenendo un risultatoX = 0 (sconfitta) oppure 0.5 (pareggio) oppure 1
# (vittoria). (giocatoreX e giocatoreY sono i numeri d' iscrizione dei
# due giocatori che partecipano al torneo). Aggiorna quindi la torneo con i
# nuovi punteggi dei giocatori giocatoreX e giocatoreY.
if (risultatoX != 1 and risultatoX != 0.5 and risultatoX != 0):
print('Risultato della partita errato')
......@@ -226,20 +241,9 @@ def stampaFormattato(torneo):
# il dizionario TORNEI contiene tutti i tornei (dizionari a loro volta) con il nome come chiave del torneo, all'int
#
#torneo = nuovoTorneo() Crea un nuovo dizionario torneo vuota. Si usa per creare un nuovo torneo.
#
#torneo = aggiungiGiocatore(torneo, 'NomeX') Aggiunge al torneo un nuovo Giocatore 'NOMEX'. Controlla per prima cosa che non esiste
# un altro giocatore con lo stesso NOME. In caso positivo viene aggiunto il Giocatore.
# Gli viene assegnato un punteggio iniziale di 1440 e gli viene associato un numero d' iscrizione
# progressivo che lo rappresenta. Il Giocatore appena iscritto avra' fatto 0 MATCH.
#
#eliminaGiocatore(torneo,'NOMEX') Elimina dal torneo il Giocatore 'NOMEX'. Nella torneo e nella classifica del torneo
# al posto dei dati di tale giocatore sara' presente una riga del tipo ['ND',...]
#
#aggiornaTorneo(torneo, m, n, r) Calcola i punti ottenuti dopo che il giocatore m ha sfidato il giocatore n,
# ottenendo un risultato r = 0 (sconfitta) oppure 0.5 (pareggio) oppure 1 (vittoria).
# (m e n sono i numeri d' iscrizione dei due giocatori che partecipano al torneo).
# Aggiorna quindi la torneo con i nuovi punteggi dei giocatori m e n.
#
#classifica(torneo) Ordina i giocatori nella torneo in ordine decrescente dei loro punteggi.
# A parita' di punteggio il giocatore con piu' MATCH sara' ad una posizione piu' alta
......@@ -272,20 +276,10 @@ if(len(sys.argv) > 1): ## getting p
aggiornaTorneo(tornei[torneo_test], 'michele', 'Aacca', 1)
# stampaFormattato(tornei)
# stampa su std output
# json.dump(tornei['pingpong'], sys.stdout)
if(options[1] == '-h' or options[1] == '--help'):
print(HELP)
else:
print(HELP)
### DUMP DI UN DIZIONARIO IN UN JSON
## SCRIVE SU FILE
# with open('result.json', 'w') as fp:
# json.dump(tornei['pingpong'], fp)
## STAMPA SU STD OUTPUT
# json.dump('SomeText', sys.stdout)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment