【发布时间】:2017-06-23 00:44:15
【问题描述】:
这里的 Python 相当新。我正在尝试计算发生有偏见的抛硬币事件的条件概率。除了if statement 部分之外,我已经弄清楚了大部分代码——具体来说,我不确定是使用pass 还是continue。更具体地说,我希望分母反映满足要求的迭代次数,而不是总迭代次数。
例如,假设我想计算 6 组的概率,假设我们在 10 次抛硬币后超过 5 组 - 该函数将读取为 simulate_three(1000,10,6,5),其中参数表示 1000 次迭代、10 次抛硬币、6 组, 和 5 组,分别。假设只有 500 次迭代满足要求 - 因此,Outcome 的分母是 500,而不是 1000。但是,我不确定代码是否正常工作......
import random
from itertools import groupby
import statistics
# Function for biased coin
def flip(p):
return 'H' if random.random() < p else 'T'
# Simulation
def simulate_three(X, N, Y, Z):
Outcome = [] # List of results
for i in range(X): # For loop for the X number of iterations
flips = [flip(0.6) for j in range(N)] # For loop for N number of coin flips
if len(list(groupby(flips))) <= Z: # If group condition isn't met
pass # Don't store value and skip
Outcome.append(len(list(groupby(flips)))) # Otherwise, store to list
print(sum(Outcome)/(len(Outcome))) # Print expected value
print((Y-(sum(Outcome)/(len(Outcome))))/statistics.stdev(Outcome)) # Print probability
【问题讨论】:
-
使用
continue或Outcome.append(len(list(groupby(flips)))) if len(list(groupby(flips))) > Z,您当前的if 语句后跟pass 没有任何作用
标签: python if-statement for-loop probability