Írj egy olyan függvényt, melynek bemeneti értéke a p valószínűség (mely egy 0 és 1 közötti szám), kimeneti értéke pedig p valószínűséggel a "kakaós csiga" string, 1-p valószínűséggel pedig a "túrós táska" string. Demonstráld hisztogram segítségével, hogy a függvényed helyes eloszlással generálja a kívánt péksüteményeket!
Mivel használni fogjuk, a funkcióit, hívjuk meg a pylab csomagot!
%pylab inline
Először készítsük el a kérdéses függvényt! A véletlen funkciót a random.randint
függvény biztosítja, ami egy egész számot ad egy bizonyos intervallumban, ehhez azonban az kell, hogy p
értéke egész legyen, ezért addig szorozzuk, amíg az nem lesz, így viszont a valószínűség maximális értékét is szorozni kell egy szorzo
nevű változóban. Egy p
valószínűségi esemény akkor következik be, ha a kapott véletlen egész szám kisebb, mint a módosított p
.
def peksuti(p):
szorzo = 1 # kell egy viszonítási alap, amihez képest p hányadosa egy adott érték
while int(p) != p: # p-t addig kell szorozni, amíg egész nem lesz
p *= 10 # de hogy a p/szorzo arány ne változzon, mindkettőt szorozzuk
szorzo *= 10
if random.randint(0, szorzo) < p: # Mivel a p/szorzo hányados az eredeti kapott valószínűséggel egyenlő, a feltétel teljesülésének valószínűsége is ennyi
return "kakaós csiga"
return "túrós táska"
Ezután elkészítjük az ellenőrző hisztogrammot. Veszünk egy 0 és 1 közötti random számót a random.rand()
függvénnyel, majd lefuttatjuk 100-szor a peksuti
függvényt, ezen valósínűség mellett. Azt, hogy hányszor kaptuk az egyik illetve a másik szót, hisztogrammon ábrázoljuk a bar()
függvénnyel.
stat = {"kakaós csiga":0, "túrós táska": 0} # Az eredmények gyakoriságát a stat szótárban tároljuk.
p = random.rand()
for i in range(0,100):
stat[peksuti(p)] += 1 # 100-szor lefuttatjuk a függvényt, és az eredményt rögzítjük.
print("valószínűség: " + str(p))
for s in stat:
print(s + " gyakorisága: " + str(stat[s])) # Kiiratjuk a kapott statisztikát, és összehasonlítjuk a várakozással
print("Kakaós csigák várt értéke: " + str(p))
print("relatív hiba: "+ str(((stat[s]/100 - p)/p)*100) + "%")
bar(range(0, len(stat)), list(stat.values()), align="center", width=0.35) # Készítünk egy hisztogrammot a stat szótár értékeinek felhasználásával.
xticks(range(0, len(stat)), list(stat.keys()))
ylabel("gyakoriság")
show()
Az előző eljárást többször lefuttatva láthatjuk, hogy nagyjából jól működik a függvény.
for s in stat:
print(s)