Forum
>>
Principianti
>>
Problema con il modulo random
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da PandaPandoso |
2017-05-25 10:22:44 - Problema con il modulo random
|
Ciao a tutti Sono un totale novizio della programmazione, spero che qualcuno possa risolvere il mio problema.
Ho creato uno script semplicissimo: una prima funzione genera un numero casuale tra 1 e 100 tramite il modulo random, se il numero è pari l'evento viene considerato positivo. Il tutto viene ripetuto per 1000 volte. Una seconda funzione crea un ciclo da 10000 eventi, ognuno dei quali svolge la prima funzione. Alla fine di questa seconda funzione viene riportato il numero dei cicli positivi e di quelli negativi. Questo è lo script. def EventoCasuale(): import random EventoPositivo = 0 for Evento in range(1000): Evento = random.randint(1, 100) if Evento % 2 == 0: EventoPositivo = EventoPositivo + 1 return EventoPositivo def Ciclo(): SessioniPositive = 0 SessioniNegative = 0 for x in range(10000): x = EventoCasuale() if x <=500: SessioniPositive = SessioniPositive + 1 if x > 500: SessioniNegative = SessioniNegative + 1 print ("Sessioni positive:", SessioniPositive) print ("Sessioni negative:", SessioniNegative) print () Ciclo() Ora il problema è questo: testando il programma, dovrei avere un ovvio alternarsi di eventi positivi e negativi, visto che il programma dovrebbe simulare un evento totalmente casuale al 50/50 ripetuto migliaia di volte. Ma non importa quante volte ci provi, le "sessioni positive" sono sempre superiori a quelle negative. Sembra quasi che la percentuale sia sballata. Ho testato letteralmente il programma 20 volte prima di postare questa domanda, giusto per essere sicuro. Ovviamente sbaglio qualcosa, solo non capisco cosa. Spero che qualcuno possa illuminarmi |
|
Scritto da Daniele aka Palmux |
2017-05-25 11:12:24 - Re: Problema con il modulo random
|
Ciao caro, ci sono diverse cose che non vanno. Tralascio il fatto che potresti scrivere qualche riga in meno e in maniera più Pythonica, ti aggiusto al volo giusto un paio di cose.
Considera che sono con lo smartphone, quindi perdonami se non sarà tutto formattato con precisione, ma eccoti qualcosa che dovrebbe funzionare meglio (testala ovviamente, io non riesco): import random def EventoCasuale(): EventoPositivo = 0 Evento = random.randint(1, 100) if Evento % 2 == 0: EventoPositivo = 1 return EventoPositivo def Ciclo(): SessioniPositive = 0 SessioniNegative = 0 for x in range(10000): i = EventoCasuale() if i: SessioniPositive += 1 else: SessioniNegative += 1 print ("Sessioni positive:", SessioniPositive) print ("Sessioni negative:", SessioniNegative) Ciclo() Sperando che tenga la formattazione, fammi sapere se va meglio e soprattutto se ti è chiaro quello che ho scritto. Cya |
|
Scritto da PandaPandoso |
2017-05-25 12:50:15 - Re: Problema con il modulo random
|
Ciao Daniele, prima di tutto grazie per avermi risposto così velocemente. Immaginavo che il programma fosse molto grezzo, devo ancora migliorare parecchio in ogni aspetto. Detto questo la tua modifica è chiarissima, vorrei spiegarti meglio a cosa sto puntando.
Facciamo finta che il programma scritto da me simuli un classico lancio della monetina. Io voglio che il programma simuli 1000 lanci, restituendo poi il numero dei risultati positivi. Dopo di che voglio che questo ciclo da 1000 eventi venga ripetuto 10000 volte. Ciascuna volta verrà ritornata un'esecuzione positiva se nei 1000 lanci almeno 501 sono stati positivi, negativa se sono stati inferiori. Mi accorgo solo ora di aver invertito eventi positivi e negativi nel mio programma, ma il succo non cambia. Eseguendo il programma, proprio per via di questo 50/50 di probabilità, una volta gli eventi positivi e una quelli negativi (in media), dovrebbero superare i 5000. Ma nonostante io esegua il programma in continuazione, sono sempre gli eventi positivi ad essere superiori. Questo mi fa pensare che da qualche parte nel mio programma ci sia un errore. Ho modificato il tuo script perché eseguisse la stesse azioni del mio, ma il risultato non cambia. Quindi non capisco, sbaglio qualcosa? Per evitarti la scocciatura di eseguirlo, visto che ci mette un po', questo è uno stamp di 10 esecuzioni appena fatte del primo programma postato, senza modifiche. --- Ultima modifica di PandaPandoso in data 2017-05-25 12:56:51 --- |
|
Scritto da Daniele aka Palmux |
2017-05-25 17:26:28 - Re: Problema con il modulo random
|
Ciao caro, segui la traccia di quello che ti ho scritto perché funziona, l'ho ho appena eseguito e la prima volta ho ottenuto:
Sessioni positive: 4985 Sessioni negative: 5015Ho aggiunto un semplice: for i in range(10): Ciclo()...ed ottengo risultati del tutto casuali, come deve essere, e che si alternano tra positive e negative: Sessioni positive: 4998 Sessioni negative: 5002 Sessioni positive: 4965 Sessioni negative: 5035 Sessioni positive: 5035 Sessioni negative: 4965 Sessioni positive: 5057 Sessioni negative: 4943 Sessioni positive: 5007 Sessioni negative: 4993 Sessioni positive: 5005 Sessioni negative: 4995 Sessioni positive: 5010 Sessioni negative: 4990 Sessioni positive: 4892 Sessioni negative: 5108 Sessioni positive: 5031 Sessioni negative: 4969 Sessioni positive: 4947 Sessioni negative: 5053Forse se c'è qualcosa che non ti torna, non è nel codice, ma nelle tue aspettative. Ciao. Daniele p, li { white-space: pre-wrap; } |
|
Scritto da PandaPandoso |
2017-05-26 00:40:25 - Re: Problema con il modulo random
|
Probabilmente hai ragione. Grazie mille per il tuo aiuto!
|
Pagina: 1
Esegui il login per scrivere una risposta.