Forum
>>
Programmazione Python
>>
Scripting
>>
Buonasera, vorrei un aiuto per il mio codice
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da Ajeje Brazof |
2023-10-02 21:16:54 - Buonasera, vorrei un aiuto per il mio codice
|
Buonasera, vorrei un aiuto per mio codice.
Dato il codice: " import random import itertools # Dizionario dei nomi e dei punteggi iniziali nomi = ["A", "B", "C", "D", "E", "F", "G", "H"] punteggi = {nome: 0 for nome in nomi} # Genera tutte le combinazioni possibili di nomi senza ripetizioni combinazioni = list(itertools.combinations(nomi, 2)) # Loop del gioco while combinazioni: nome1, nome2 = random.choice(combinazioni) combinazioni.remove((nome1, nome2)) print(f"Chi preferisci tra {nome1} e {nome2}? (Inserisci 1 per {nome1} o 2 per {nome2})") risposta = input() if risposta == '1': puntegginome1 += 1 elif risposta == '2': puntegginome2 += 1 else: print("Scelta non valida. Inserisci 1 o 2.") # Stampa dei risultati finali print("\nPunteggi Finali:") for nome, punteggio in punteggi.items(): print(f"{nome}: {punteggio} preferenze") " Per chiudere il ciclo di combinazioni nell'esecuzione si deve rispondere ad un numero di 25 combinazioni quindi se dovessi aumentare il numero dei "nomi" il numero di combinazioni aumenta a dismisura. Io vorrei aggiungere una proprieta transitiva del tipo se A meglio di B e B meglio di C quindi A meglio di C Così da diminuire drasticamente le combinazioni future. Grazie mille --- Ultima modifica di Cruacs in data 2023-10-02 21:37:40 --- |
|
Scritto da Daniele aka Palmux |
2023-10-07 08:09:08 - Re: Buonasera, vorrei un aiuto per il mio codice
|
Ciao caro, prima di tutto fai un esercizio stilistico e metti a posto il codice. Tramite il tasto "code", che trovi subito prima dei colori in fase di inserimento/modifica, formatta correttamente il codice in modo che la sintassi sia coerente e corretta.
Se per altri linguaggi sarebbe qualcosa di inutile, in Python scrivere codice correttamente indentato è parte integrante del codice stesso, quindi è imprescindibile. Fatto questo potremo parlare del codice. Cya |
|
Scritto da Ajeje Brazof |
2023-10-07 12:59:41 - Re: Buonasera, vorrei un aiuto per il mio codice
|
import random import itertools # Dizionario dei nomi e dei punteggi iniziali nomi = ["A", "B", "C", "D", "E", "F", "G", "H"] punteggi = {nome: 0 for nome in nomi} # Genera tutte le combinazioni possibili di nomi senza ripetizioni combinazioni = list(itertools.combinations(nomi, 2)) # Loop del gioco while combinazioni: nome1, nome2 = random.choice(combinazioni) combinazioni.remove((nome1, nome2)) print(f"Chi preferisci tra {nome1} e {nome2}? (Inserisci 1 per {nome1} o 2 per {nome2})") risposta = input() if risposta == '1': punteggi[nome1] += 1 elif risposta == '2': punteggi[nome2] += 1 else: print("Scelta non valida. Inserisci 1 o 2.") # Stampa dei risultati finali print("\nPunteggi Finali:") for nome, punteggio in punteggi.items(): print(f"{nome}: {punteggio} preferenze") |
|
Scritto da nuzzopippo |
2023-10-08 10:22:13 - Re: Buonasera, vorrei un aiuto per il mio codice
|
Veramente, dal Tuo codice, mi risultano 28 combinazioni, comunque, una possibile soluzione senza molte pretese potrebbe essere definire un dizionario di appoggio ove registrare una lista di "nomi" sottoposti ad un altro ed una funzione di valutazione da richiamare ad ogni preferenza assegnata.
Nell'esempio sotto ho modificato il Tuo codice inserendo tali accorgimenti, la funzione "valuta_preferenze" esamina ricorsivamente i dati referenziati ed esegue le operazioni richieste, provalo import random import itertools # Dizionario dei nomi e dei punteggi iniziali nomi = ["A", "B", "C", "D", "E", "F", "G", "H"] punteggi = {nome: 0 for nome in nomi} # Genera tutte le combinazioni possibili di nomi senza ripetizioni combinazioni = list(itertools.combinations(nomi, 2)) preferenze = {} def valuta_preferenze(): global preferenze global combinazioni global punteggi for k in preferenze.keys(): data = [x for x in preferenze.keys() if k in preferenzex] for n in data: for n2 in preferenze[k]: if not n2 in preferenzen: print(f'{k} maggiore di {n2} e minore di {n} aggiungo {n2} a {n}') punteggin += 1 preferenzen.append(n2) if (n, n2) in combinazioni: combinazioni.remove((n, n2)) valuta_preferenze() print(f'{len(combinazioni)} da comparare') voto = 0 # Loop del gioco while combinazioni: nome1, nome2 = random.choice(combinazioni) combinazioni.remove((nome1, nome2)) risposta = '' voto += 1 while not risposta in ['1', '2']: print(f"{voto:2} : Chi preferisci tra {nome1} e {nome2}? (Inserisci 1 per {nome1} o 2 per {nome2})") risposta = input() if risposta == '1': punteggi[nome1] += 1 if nome1 in preferenze.keys(): preferenze[nome1].append(nome2) else: preferenze[nome1] = [nome2,] valuta_preferenze() elif risposta == '2': punteggi[nome2] += 1 if nome2 in preferenze.keys(): preferenze[nome2].append(nome1) else: preferenze[nome2] = [nome1,] valuta_preferenze() else: print("Scelta non valida. Inserisci 1 o 2.") # Stampa dei risultati finali print("\nPunteggi Finali:") for nome, punteggio in punteggi.items(): print(f"{nome}: {punteggio} preferenze")In un paio di test che ho effettuato in uno ho dovuto inserire 14 preferenze, nell'altro 21, dipende un po' dalle estrazioni random Edit : corretti diversi artefatti inseriti dall'editor dei post --- Ultima modifica di nuzzopippo in data 2023-10-08 10:28:10 --- Fatti non foste a viver come bruti... |
|
Scritto da Ajeje Brazof |
2023-10-09 00:44:01 - Re: Buonasera, vorrei un aiuto per il mio codice
|
Grazie
|
Pagina: 1
Esegui il login per scrivere una risposta.