Forum >> Programmazione Python >> Scripting >> Buonasera, vorrei un aiuto per il mio codice

Pagina: 1

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 ---
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
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")
Buonasera, vorrei un aiuto per mio codice.
...
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

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...
Grazie


Pagina: 1



Esegui il login per scrivere una risposta.