def choose(p): r = random.random() index = 0 while (r > 0): r -= probs[index] index += 1 return index-1
def error(): print "1_error" def error2(): print "2_error" def noerror(): print "no_error" if __name__ == '__main__': match = (((error,error2,noerror),(0.5,0.2,0.3)), #name ((error,error2,noerror),(0.5,0.2,0.3)), #surname ((error,error2,noerror),(0,0,1))) #sex for step,probs in match: step[choose(probs)]() ho risolto così... ho attutito con un cuscino o sono salito di un altro piano ? :D Il giorno 17 settembre 2012 17:31, Daniele Varrazzo <p...@develer.com> ha scritto: > On 2012-09-17 16:00, Antonio Piepoli wrote: > > Sì avevo già intenzione di usare le funzioni come oggetto come mi hai >> detto >> tu. Quello che non riesco a fare è fare la stessa cosa per i dizionari; >> cioè match[0] è "match_surname" (una stringa), voglio che lo script prenda >> il dizionario che ha lo stesso nome della stringa... che scelga la >> funzione >> e che la applichi... per poi passare al passo successivo di match -> >> match[1] etc ... spero di essermi spiegato meglio. >> > > Sì. Ma perchè non metti il (riferimento al) dizionario nella lista e > peschi direttamente quello? > > match_surname = {} > match_name = {} > match = [match_surname, match_name] > > quello che vuoi fare tu, prendere un oggetto globale tramite il nome, si > fa facile: globals()['match_name'], per cui tu dovresti fare > globals()[match[1]]. Ma è strano ti serva: di sicuro fare una lista o usare > altre strutture con i riferimenti espliciti ai dizionari è una soluzione > migliore che andarseli a cercare per nome. > > > > ho corretto l'errore in choose: >> >> def choose(d): >> index = 0 >> keys = d.keys() >> r = random.random() >> while (r > 0): >> r -= d[keys[index]] >> index += 1 >> return keys[index-1] >> > > Sempre brutta come una caduta per le scale resta :) Per esempio, poiché > metti la cosa che scegli nelle chiavi di un dizionario, allora deve essere > hashabile, per cui non puoi scegliere casualmente da un insieme di liste o > di dizionari. Per non parlare della sua efficienza. Comunque sei libero di > usare questa se ti soddisfa in correttezza, prestazioni e possiblità di > input. > > > > -- > Daniele Varrazzo - Develer S.r.l. > http://www.develer.com > ______________________________**_________________ > Python mailing list > Python@lists.python.it > http://lists.python.it/**mailman/listinfo/python<http://lists.python.it/mailman/listinfo/python> > -- Antonio Piepoli
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python