%matplotlib inline from __future__ import print_function, division import numpy as np from matplotlib.pylab import * # cervene cisla red = [1, 3, 5, 7, 9, 12, 14, 16, 18, 19, 21, 23, 25, 27, 30, 32, 34, 36] # cierne cisla black = [2, 4, 6, 8, 10, 11, 13, 15, 17, 20, 22, 24, 26, 28, 29, 31, 33, 35] # funkcia hraj berie 2 parametre: # tosses - zoznam hodov # account_balance - pociatocny stav uctu # a vracia: # account_balance - konecny stav uctu # account_history - vyvoj stavu uctu # funkcia pouziva metodu tak ako je opisana v clanku a aplikuje # ju na nahodny zoznam hodov def play(tosses, account_balance): # account_history podrzi vsetky hodnoty uctu pocas celej hry account_history = [account_balance] # pociatocna uroven stavky je 1 euro bet = 1 # stavkujeme na cervenu alebo na ciernu, zaciname na ciernej betting_on_red = False # vyhrali sme toto kolo? won = False # iterujeme cez vsetky nahodne hody for num in tosses: # ak prave stavkujeme na cervenu a padla cervena, vyhravame if betting_on_red and num in red: won = True # ak stavkujeme na ciernu a padla cierna, tiez vyhravame elif not betting_on_red and num in black: won = True # inak sme prehrali else: won = False # ak sme toto kolo vyhrali if won: # pripiseme si vyhru account_balance += bet # zmenime farbu betting_on_red = not betting_on_red # resetujeme stavku na 1 euro bet = 1 # ak sme prehrali else: # odpocitame si prehru account_balance -= bet # zvysime stavku na dvojnasobok bet *= 2 # zapiseme si vysledok do historie account_history.append(account_balance) # ak sme klesli s uctom na alebo pod nulu, koncime if account_balance <= 0: return account_balance, account_history # vratime vysledky return account_balance, account_history # Ak predpokladame ze clovek odohra 1 hru za 1 minutu, tak za 3 hodiny # nahra 180 hier. Autor clanku uvadza 180-200 eur za 3 hodiny denne # nasledujuci riadok vygeneruje 180 uniformne nahodnych cisel v rozpati # 0 az 37, ako vo FR rulete tosses = np.random.random_integers(0, 37, 180) # vypiseme si najmensie a najvacsie cislo ake padlo pocas 180 tahov print("Min number: {} Max number: {}".format(np.min(tosses), np.max(tosses))) # spustime hru s nahodnymi hodmi a vkladom 200 eur account_balance, account_history = play(tosses, 200) # vypiseme si konecny stav print("Konecny stav uctu: {}".format(account_balance)) # Nakreslime si graf priebehu figure(figsize=(17, 5)) plot(account_history) show() # nakreslime si histogram cisel ake nam padali figure(figsize=(17, 5)) hist(tosses, bins=38) show() # sem budeme ukladat vysledky jednotlivych 3-hodinovych hier results = [] # aby sme to mali cim presnejsie, zahrame si 10 000 krat po 3 hodiny for i in range(10000): # vygenerujeme nahodnu hru tosses = np.random.random_integers(0, 37, 180) # zahrame account_balance, _ = play(tosses, 200) # zapiseme cisty zisk results.append(account_balance - 200) # pretransformujeme na numpy array (nepodstatne) results = np.array(results) # vypiseme si nejake zaujimavosti print("Minimalna vyhra: {}".format(np.min(results))) print("Maximalna vyhra: {}".format(np.max(results))) print("Pravdepodobnost ze pridete o vsetko: {}".format(np.count_nonzero(results <= 0) / len(results))) # nakreslime si grafik ako sa nam vodilo figure(figsize=(17, 5)) scatter(np.argwhere(results > 0).ravel(), results[results > 0], color='g', marker='x') scatter(np.argwhere(results <= 0).ravel(), results[results <= 0], color='r', marker='x') xlim(0, len(results)) show()