蒙特卡洛模拟器的第一步

问题描述

我正在研究一个简单的蒙特卡洛模拟器,以观察突破前达到目标的可能性。计划是创建一个函数,该函数首先检查运气是否达到目标,如果没有,则生成随机数,将其与选定的概率值进行比较,然后根据赌徒是赢还是输,来上下移动运气。我希望此函数返回100个1和0的列表,但相反,我得到的是k +或-1。在这里我做错了什么?另外,我怎样才能使它更清洁?

import numpy as np
from numpy import random

# Variables
k = 5              #starting fortune
g = 10             #goal. Amount of money at which the gambler stops playing. 
p = .5             #probability of winning
bet = 1            #bet size

def goal_or_bust(set_size=100):
    global k
    made_goal = []
    for i in range(set_size):
        
        
        if k <= 0:
            made_goal.append(0) 
            break
            
        elif k >= g:
            made_goal.append(1)
            break
            
        else:
            rand01 = np.random.rand()
            if rand01 <= p:
                k = k + bet
                return(k)
            if rand01 > p:
                k = k - bet
                return(k)
            
    return(made_goal)    
            
goal_or_bust()

解决方法

测试结果后,您将立即退出功能。

        rand01 = np.random.rand()
        if rand01 <= p:
            k = k + bet
            return(k) # <<<< HERE
        if rand01 > p:
            k = k - bet
            return(k) # <<<<< HERE

因此,您的for循环仅循环(重复)一次。

关于清理代码,请删除全局变量并将它们作为函数的所有参数。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...