def choose(p):<br>    r = random.random()<br>    index = 0<br>    while (r > 0):<br>      r -= probs[index]<br>      index += 1<br>    return index-1<br><br>def error(): print "1_error"<br>def error2(): print "2_error"<br>
def noerror(): print "no_error"<br><br>if __name__ == '__main__':<br><br>    match = (((error,error2,noerror),(0.5,0.2,0.3)), #name<br>        ((error,error2,noerror),(0.5,0.2,0.3)), #surname<br>        ((error,error2,noerror),(0,0,1))) #sex<br>
<br>    for step,probs in match:<br>        step[choose(probs)]()<br><br>ho risolto così... ho attutito con un cuscino o sono salito di un altro piano ? :D <br><br><div class="gmail_quote">Il giorno 17 settembre 2012 17:31, Daniele Varrazzo <span dir="ltr"><<a href="mailto:piro@develer.com" target="_blank">piro@develer.com</a>></span> ha scritto:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On 2012-09-17 16:00, Antonio Piepoli wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Sì avevo già intenzione di usare le funzioni come oggetto come mi hai detto<br>
tu. Quello che non riesco a fare è fare la stessa cosa per i dizionari;<br>
cioè match[0] è "match_surname" (una stringa), voglio che lo script prenda<br>
il dizionario che ha lo stesso nome della stringa... che scelga la funzione<br>
e che la applichi... per poi passare al passo successivo di match -><br>
match[1] etc ... spero di essermi spiegato meglio.<br>
</blockquote>
<br></div>
Sì. Ma perchè non metti il (riferimento al) dizionario nella lista e peschi direttamente quello?<br>
<br>
    match_surname = {}<br>
    match_name = {}<br>
    match = [match_surname, match_name]<br>
<br>
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.<div class="im">
<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
ho corretto l'errore in choose:<br>
<br>
def choose(d):<br>
    index = 0<br>
    keys = d.keys()<br>
    r = random.random()<br>
    while (r > 0):<br>
          r -= d[keys[index]]<br>
        index += 1<br>
    return keys[index-1]<br>
</blockquote>
<br></div>
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.<div class="HOEnZb">
<div class="h5"><br>
<br>
<br>
-- <br>
Daniele Varrazzo - Develer S.r.l.<br>
<a href="http://www.develer.com" target="_blank">http://www.develer.com</a><br>
______________________________<u></u>_________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it" target="_blank">Python@lists.python.it</a><br>
<a href="http://lists.python.it/mailman/listinfo/python" target="_blank">http://lists.python.it/<u></u>mailman/listinfo/python</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>Antonio Piepoli<br><br>