2012-12-08 9 views
6

Sto usando random.random() per ottenere un float casuale (ovviamente!). Ma quello che voglio fare è qualcosa del tipo:Casualità in Python

there's a 30% chance my app does this: 
    pass 
else: 
    pass 

Potete aiutarmi a strutturare questo?

+0

Cosa stai cercando di fare davvero? Tra la vaghezza della domanda e lo strano thread di commento riguardante la natura della casualità sulla risposta di @ hd1 di seguito, non è affatto chiaro. – dkamins

+0

@Dkamins, ho modificato il post per renderlo un po 'più chiaro, spero. Ne ho bisogno per eseguire un'azione il 30% delle volte, altrimenti, fare qualcos'altro. Sto solo cercando un algoritmo generale. Sembra che il post di hd1 sia - sto solo cercando di capirlo un po 'di più prima di accettare. –

+0

Se stai pensando al "30%" come valore float, accetta la risposta di 'hd1'; se la stai pensando come "3 su 10", accetta la risposta di Óscar López. Sono entrambi corretti e equivalenti, è solo una questione di cui è più leggibile o sembra più "giusto" nel tuo caso. – abarnert

risposta

11
if random.random() > 0.5: 
    # your app does this 
    pass 
else: 
    # your app does that 
    pass 
+5

Probabilmente è più facile usare 'random() irrelephant

+0

Ma questo risponde alla domanda? Il richiedente vuole farlo in modo che se lancia una moneta ripetutamente, dà risultati ordinati a caso, inclinati del 40% (o di qualsiasi altra cosa) verso le teste. La tua risposta potrebbe dare in modo plausibile allo 0% di teste. – Aerovistae

+0

@Aerovistae OP ha solo suggerito di fare la scelta una volta, credo. – irrelephant

6

Prova questo:

if random.randint(1, 10) in (1, 2, 3): 
    print '30% chance' 
else: 
    print '70% chance' 

Qui randint genererà un numero compreso tra 1-10, c'è una probabilità del 30% che è tra il 1-3 e una probabilità del 70% che è tra 4-10

+1

Meno flessibile del metodo di @ hd1, poiché questo può fare solo le stesse probabilità, ma conveniente. Nota che potresti anche saltare il '== 1' se lo volessi. – Dougal

+2

Questa è una soluzione migliore quando le probabilità sono meglio descritte come "1 in 2" o "1 in 3". Naturalmente per un numero razionale, puoi scegliere di descriverlo in entrambi i modi, quindi 'se random.randrange (10) <3' è ragionevole come' random.random() <.3'; è solo una questione di cui ti sembra più chiaro. – abarnert

Problemi correlati