[Python] Selezionare voci da un dizionario con casualità pesata.

2022-09-30 Per discussione Gabriele Battaglia

Ciao.

Se ho:

cesto={'banana':20, 'mela':30, 'pera':50}

Voglio pescare un frutto dal cesto e voglio avere il 20% di possibilità 
di cuccarmi una banana, il 30% una mela e il 50% di prendere un pera.



Dopo gli imports del caso io pensavo di poter fare:


frutto = random.choices(cesto.keys(), weights(cesto.values())


Ma non funziona. Ho letto nella referenza di choices, che non prende un 
elemento dalla lista fornita ma restituisce una lista, k. Quindi non è 
il modulo giusto.



Vi chiedo ne esiste uno già fatto o devo scrivermi io l'algoritmo per 
ottenere ciò che voglio?



Grazie mille, Gabry.

--
--... ...--  -.. .  .. --.. - .- .--. ..-  - ..-  . .
Sent from TB on Windows 10, Genus Bononiae's computer.

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Selezionare voci da un dizionario con casualità pesata.

2022-09-30 Per discussione Paolo Leggio

Ciao.
Il metodo é giusto ma vuole ricevere una lista come parametro.

random.choices(list(cesto.keys()), weights=list(cesto.values()))





> On 30 Sep 2022, at 14:59, Gabriele Battaglia  wrote:
> 
> random.choices(cesto.keys(), weights(cesto.values())

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Selezionare voci da un dizionario con casualità pesata.

2022-09-30 Per discussione Gabriele Battaglia

Ho risolto.
Se serve, posto il codice.
Gabry.
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Selezionare voci da un dizionario con casualità pesata.

2022-09-30 Per discussione Carlos Catucci
On Fri, 30 Sept 2022 at 18:33, Gabriele Battaglia  wrote:

> Ho risolto.
> Se serve, posto il codice.
>

E' sempre interessante vedere come un dev risolve un algoritmo, se ti va di
postarlo a me farebbe piacere vederlo

Carlos
-- 
EZLN ... Para Todos Todo ... Nada para nosotros
___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Selezionare voci da un dizionario con casualità pesata.

2022-09-30 Per discussione Gabriele Battaglia

Reply to the Paolo Leggio's message, wrote on 30/09/2022 at 18:31:


Ciao.
Il metodo é giusto ma vuole ricevere una lista come parametro.

random.choices(list(cesto.keys()), weights=list(cesto.values()))


Grazie Paolo!
Infatti, funziona così, dovevo capirlo dall'help. :)
Buona serata.

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python


Re: [Python] Selezionare voci da un dizionario con casualità pesata.

2022-09-30 Per discussione Gabriele Battaglia

Reply to the Carlos Catucci's message, wrote on 30/09/2022 at 19:12:



On Fri, 30 Sept 2022 at 18:33, Gabriele Battaglia > wrote:


Ho risolto.
Se serve, posto il codice.


E' sempre interessante vedere come un dev risolve un algoritmo, se ti va 
di postarlo a me farebbe piacere vederlo



Certo Carlos.
E' talmente breve che lo posto tutto, scusandomi se faccio qualcosa di 
non gradito o se la formattazione si perde.
E' un programma che genera dei finti call radioamatoriali che io poi 
invio agli amici che sto allenando in telegrafia affinché li 
decodifichino ad orecchio.
La materia è un po di settore, se quanto ho scritto ti risulta oscuro, 
non preoccuparti, è normale! :) Sono io ad avere interessi fuori 
standard. Ahahahaha.


Ecco il codice.

***
# QRZ - Programma che crea calls inventati e numeri progressivi, da 
usare negli esercizi CW

# Data concepimento 30/9/2022 by IZ4APU.

import random
from string import ascii_uppercase, digits
from GBUtils import key

MDL={'a0a':4,
'a0aa':6,
'a0aaa':15,
'aa0a':6,
'aa0aa':18,
'aa0aaa':36,
'0a0a':2,
'0a0aa':2,
'0a0aaa':2,
'a00a':3,
'a00aa':3,
'a00aaa':4}
# Carlos, questo è il dizionario con i modelli dei calls e la 
percentuale di probabilità che vengano estratti a sorte.
# La prossima def poi si preoccupa di sostituire le "a" con lettere 
casuali e gli "0" con numeri casuali.


def Mkdqrz(c):
q=''
c=c[0]
for j in str(c):
if j.isdigit():
q+=random.choice(digits)
else:
q+=random.choice(ascii_uppercase)
return q

print("QRZ 1.0. crea calls e numeri progressivi per esercitarsi in 
CW\nBy IZ4APU - Gabriele Battaglia.\nQualsiasi tasto per procedere, ESC 
per terminare.")


cont=1
while True:
c=random.choices(list(MDL.keys()), weights=MDL.values(), k=1)
qrz=Mkdqrz(c)
pgr=random.randint(1,)
prompt=f"- {cont:0>4} {qrz} 5nn {pgr:0>4}"
wait=key(msg=prompt)
	# key è una utility mia che interroga la tastiera e ritorna il tasto 
quando lo hai premuto.

print()
if ord(wait)==27: break
cont+=1
print("Bye-Bye & 73. de IZ4APU Gabe")

___
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python