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

Gabriele Battaglia iz4apu a libero.it
Ven 30 Set 2022 19:25:15 CEST


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 <iz4apu a libero.it 
> <mailto:iz4apu a libero.it>> 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,9999)
	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")



Maggiori informazioni sulla lista Python