Leaderbord HW2

N
Nando (340 points)
3 8 9
asked Nov 2, 2021 in HW2 by Nando (340 points)
Salve a tutti, più o meno mi sembra di aver capito come svolgere quest'hw e credo di essere ad un buon punto per quanto riguarda il codice e la sua efficienza nonostante non abbia ancora fatto nessun test. L'unico "problema" che sto riscontrando è sul come creare la leaderbord finale.

In poche parole non so come, dopo aver assegnato ad ogni giocatore i suoi scontri vinti, come faccio a riordinare la lista tenendo conto del fatto che la leaderbord finale mantenga l'id  del giocatore (ossia l'indice) e non gli effettivi punti (o scontri vinti, che dir si voglia). Ho chiaramente un modo per ordinare la lista dal valore maggiore al minore ma mi chiedevo se poteste aiutarmi a capire come ritornare appunto i vari id dei giocatori anziché i loro score.

Grazie in anticipo a tutti coloro che saranno così gentili da darmi una mano.
356 views

2 Answers

Exyss (21390 points)
1 2 79
answered Nov 2, 2021 by Exyss (21,390 points)
edited Nov 2, 2021 by Exyss
Un modo molto comodo per poter fare quello che cerchi sarebbe creare un dizionario utilizzando come chiavi i vari index dei "giocatori" e come valori associati ad ogni chiave il numero di vittorie conseguite da ogni giocatore (ad esempio la lista contenente solo le vittorie [15, 0, 2] verrebbe trasformata in {0: 15, 1: 0, 2:2}).

Successivamente ti basterebbe riordinare il dizionario in base al valore associato ad ogni chiave (una googlata veloce dovrebbe aiutarti) per poi estrarre tramite il metodo .keys() la lista delle chiavi del dizionario post-riordinamento (quindi riprendendo l'esempio di prima {0: 15, 1: 0, 2: 2} -> riordino in base ai valori -> {0: 15, 2: 2, 1: 0} -> estraggo la lista delle chiavi -> [0, 2, 1])
N
Nando (340 points)
3 8 9
commented Nov 2, 2021 by Nando (340 points)
Grazie mille! Mi sembra veramente un ottimo metodo e molto veloce grazie all'utilizzo del dizionario, quindi credo che userò questo.
N
Nando (340 points)
3 8 9
commented Nov 3, 2021 by Nando (340 points)
Dai un'occhiata alla funzione zip, non ho ancora provato ma dovrebbe essere più performante rispetto al metodo del dizionario.
Exyss (21390 points)
1 2 79
commented Nov 3, 2021 by Exyss (21,390 points)
Si è possibile utilizzare anche la funzione zip come "escamotage", anche se nei test che ho fatto cambia di molto poco il risultato visto che il riordinamento è l'ultima operazione prevista dal programma (solitamente almeno, poi ognuno trova il suo modo)
A
AlessandroBavaro (10660 points)
4 8 24
answered Nov 2, 2021 by AlessandroBavaro (10,660 points)

Salve Nando, io ho prima riordinato le stringhe dei partecipanti alla sfida in base al punteggio in una seconda lista e poi con un doppio ciclo for utilizzando gli indici ho rinominato i singoli partecipanti con la loro posizione precedente con un if ovvero: se il giocatore tra i partecipanti è uguale alla al giocatore della seconda lista riordinata allora il giocatore nella lista riordinata e uguale alla posizione del giocatore dei partecipanti.

[acc,ccc,caa] riordinata per i punteggi e [ccc,acc,caa]

ora confronti le due liste il giocatore ccc e in posizione 1 nella lista partecipanti quindi ccc nella seconda lista diventa uno

[1,acc,caa] e via cosi.

Spero di essere stato chiaro e di esserti stato utile.

Ad ogni modo questo e come ho risolto io

N
Nando (340 points)
3 8 9
commented Nov 2, 2021 by Nando (340 points)
Si si, tutto chiaro, grazie dell'aiuto!