使用python 2.7.
以下代码允许我输入两支球队(WP_1和WP_2)的胜率百分比(k)并确定两支球队的胜率百分比,即一支球队在赛季结束时获胜的概率( Playoff_Probability):
def PlayoffProb(WP_1, k, WP_2):
TProb_2 = 0
p = float(WP_1)/1000
q = float(WP_2)/1000
n = 162.0
G = math.factorial(n)/(math.factorial(k)*math.factorial(n-k))
Prob = G*(p**k)*((1-p)**(n-k))
for c in range(0, k):
G_2 = math.factorial(n)/(math.factorial(c)*math.factorial(n-c))
Prob_2 = G_2*(q**c)*(1-q)**(n-c)
TProb_2 += Prob_2
Playoff_Probability = Prob*TProb_2
print Playoff_Probability
print TProb_2
Run Code Online (Sandbox Code Playgroud)
但更简单的是,如果函数可以递归写入,那么它将对每个可能的k值执行相同的操作,并返回结束本赛季的总概率更多的胜利(我相信应该由每个值的Playoff_Probability都通过k的函数运行,我试图将其设置为等于Total_Playoff_Probability).
我尝试了下面的代码,但是我得到一个TypeError告诉我'float'对象在返回Total_Playoff_Probability步骤时不可调用.我也完全不确定我是否正确设置了递归.
def PlayoffProb2(WP_1, k, WP_2):
TProb_2 = 0
Total_Playoff_Probability = 0
p = float(WP_1)/1000
q = float(WP_2)/1000
n = 162.0
G = math.factorial(n)/(math.factorial(k)*math.factorial(n-k))
Prob = G*(p**k)*((1-p)**(n-k))
for c in range(0, k):
G_2 = math.factorial(n)/(math.factorial(c)*math.factorial(n-c))
Prob_2 = G_2*(q**c)*(1-q)**(n-c)
TProb_2 += Prob_2
Playoff_Probability = Prob*TProb_2
Total_Playoff_Probability += Playoff_Probability
if k == 162:
return Total_Playoff_Probability
else:
return PlayoffProb2(WP_1, k+1, WP_2)
Run Code Online (Sandbox Code Playgroud)
任何帮助将不胜感激!
return Total_Playoff_Probability(WP_1, k+1, WP_2)
Run Code Online (Sandbox Code Playgroud)
我想你的意思
return PlayoffProb2(WP_1, k+1, WP_2)
Run Code Online (Sandbox Code Playgroud)
你有这个错误,因为你试图将浮点数视为一个函数.显然,这不计算.
编辑
实际上,它应该是:
return Total_Playoff_Probability + PlayoffProb2(WP_1, k+1, WP_2)
Run Code Online (Sandbox Code Playgroud)
事实上,在计算它之后,你没有对Total_Playoff_Probability做任何事情.如果k!= 167,则只返回k + 1的值.