Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 基于有偏硬币翻转100次的随机行走模拟_Python_Jupyter Notebook_Simulation_Random Walk_Coin Flipping - Fatal编程技术网

Python 基于有偏硬币翻转100次的随机行走模拟

Python 基于有偏硬币翻转100次的随机行走模拟,python,jupyter-notebook,simulation,random-walk,coin-flipping,Python,Jupyter Notebook,Simulation,Random Walk,Coin Flipping,我从Python开始。我试着模拟一条直线上的随机游动(北和南),将一枚有偏的硬币翻转100次,假设从起点到南的值为负,从起点到北的值为正,有0.3%的几率得到尾巴,有0.7%的几率得到头 我试过两种不同的方法,但都不能正常工作 import random def prob(p): return random.random()<p def random_walk(n): heads=0 tails=0 t=0 for i in range(n): if prob(0.3):

我从Python开始。我试着模拟一条直线上的随机游动(北和南),将一枚有偏的硬币翻转100次,假设从起点到南的值为负,从起点到北的值为正,有0.3%的几率得到尾巴,有0.7%的几率得到头

我试过两种不同的方法,但都不能正常工作

import random
def prob(p):
return random.random()<p
def random_walk(n):
heads=0
tails=0
t=0
for i in range(n):
    if prob(0.3):
        heads += 1
        t=t-1
    if prob (0.7):
        tails += 1
        t=t+1
print (heads, "heads")
print (tails, "tails")
print (t)
return t

heads=0
tails=0
t=0
for i in range(0,100):
    if prob(0.3):
        heads += 1
        t=t-1
    if prob(0.7):
        tails += 1
        t=t+1
print (heads, "heads")
print (tails, "tails")
print (t)
随机导入
def prob(p):

return random.random()你所做的不是掷硬币100次,而是200次

每次调用
prob()
函数都是掷硬币。现在
周期的每个
迭代都包含2个调用-首先是0.3,然后是0.7

你要找的可能是

for _ in range(n):
  if prob(0.3):
    heads +=1
  else:
    tails +=1

这样,你可以准确地抛100次(prob-calls),每一次都是头或尾。

你所做的不是抛100次硬币,而是抛200次

每次调用
prob()
函数都是掷硬币。现在
周期的每个
迭代都包含2个调用-首先是0.3,然后是0.7

你要找的可能是

for _ in range(n):
  if prob(0.3):
    heads +=1
  else:
    tails +=1

这样,您可以进行100次投掷(prob调用),每一次都是head或tail。

这里的问题在于您对
prob
函数的调用。由于在范围(n)
中的i的
循环的每次迭代中调用函数两次,因此最终会得到两个不同的RN

另外,如果
random.random()
返回,例如
0.1
0.2
,那么与
if prob(0.3):
if prob(0.7):
相关联的if块将在同一模拟循环中执行

您需要在每个执行循环中调用一次
random.random()
,并使两个if语句互斥—例如,将其更改为if/else块

以下是解决这些问题的方法:

for i in range(n):
    coin_has_flipped_tails = prob(0.3)
    if coin_has_flipped_tails:
        tails += 1
        t += 1
    else:  # this implies that the coin has flipped head
        heads += 1
        t -= 1

这里的问题是对
prob
函数的调用。由于在范围(n)
中的i的
循环的每次迭代中调用函数两次,因此最终会得到两个不同的RN

另外,如果
random.random()
返回,例如
0.1
0.2
,那么与
if prob(0.3):
if prob(0.7):
相关联的if块将在同一模拟循环中执行

您需要在每个执行循环中调用一次
random.random()
,并使两个if语句互斥—例如,将其更改为if/else块

以下是解决这些问题的方法:

for i in range(n):
    coin_has_flipped_tails = prob(0.3)
    if coin_has_flipped_tails:
        tails += 1
        t += 1
    else:  # this implies that the coin has flipped head
        heads += 1
        t -= 1

您好,您能否更具体地说明“工作不正常”,您发现的意外行为是什么?请解释!谢谢您好,您能否更具体地说明“工作不正常”,您发现的意外行为是什么?请解释!谢谢