import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from pandas import Series, DataFrame

"""
Explanation: その他のデータフレーム操作
End of explanation
"""


from numpy.random import randint
def coin_game(money, bet):
    coin = randint(2)
    if coin == 0:
        money += bet
    else:
        money -= bet
    return money

"""
Explanation: 練習問題
次の関数 coin_game は、所持金と掛け金を引数に渡すと、1/2の確率で掛け金の分だけ所持金が増減した値が返ります。
End of explanation
"""


money = 1000
money = coin_game(money, 100)
money

"""
Explanation: 次は、1000円の所持金において、100円を賭けた場合の結果を示します。
End of explanation
"""


money = 1000
trial = []
for i in range(100):
    money = coin_game(money, int(money*0.5))
    trial.append(money)
    
trial[:10]

"""
Explanation: (1) 所持金1000円からスタートして、所持金の50%を賭け続けた場合の所持金の変化をリスト trial に格納してください。（全部で100回繰り返します。）
End of explanation
"""


df = DataFrame()
for t in range(3):
    money = 1000
    trial = []
    for i in range(100):
        money = coin_game(money, int(money*0.5))
        trial.append(money)
    df = pd.concat([df, Series(trial, name=('trial%d' % t))], axis=1)

df.plot(title='Coin Game')

"""
Explanation: (2) (1)の処理を3回繰り返して、それぞれの結果を列（trial0, trial1, trial2）とするDataFrameを作成して、変数 df に格納してください。また、その結果をグラフ表示してください。
End of explanation
"""


def stock_game(money, bet):
    coin = randint(2)
    if coin == 0:
        money += bet
    else:
        money -= int(bet/2)
    return money

"""
Explanation: (3) 関数 coin_game を修正して、1/2の確率で「掛け金の分だけ所持金が増加する」もしくは「掛け金の半分だけ所持金が減少」ようにしてください。修正後の関数名は stock_game とします。（これは、掛け金の分だけ株を購入したところ、1/2の確率が株価が倍、もしくは、半分になる状況をシュミレーションしています。）
End of explanation
"""


result = DataFrame()
for t in range(3):
    money = 1000
    trial = []
    for i in range(100):
        money = stock_game(money, int(money*0.5))
        trial.append(money)
    result = pd.concat([result, Series(trial, name=('trial%d' % t))], axis=1)
result.plot(title='Stock Game')    

"""
Explanation: (4) (3)の関数を用いて、(2)と同様のグラフを作成してください。
End of explanation
"""


