我如何计算两名不同能力的球员在帕斯壁球比赛中获胜的概率?(Python)

我如何计算两名不同能力的球员在帕斯壁球比赛中获胜的概率?(Python),python,Python,我已经创建了一个函数winProbability(ra,rb,n),我想模拟n个游戏,以估计一个有能力ra的玩家在与一个有能力rb的玩家的比赛中获胜的概率 我将展示到目前为止我已经完成的代码。如果这看起来是一个容易的问题,那是因为我对编码还不熟悉 import random#import random允许使用随机生成的数字 def游戏(ra、rb):#此功能游戏设定游戏运行方式 p_a_point=ra/(ra+rb)#这行代码确定 #玩家a赢得任何一点 a_points = 0 #the am

我已经创建了一个函数winProbability(ra,rb,n),我想模拟n个游戏,以估计一个有能力ra的玩家在与一个有能力rb的玩家的比赛中获胜的概率

我将展示到目前为止我已经完成的代码。如果这看起来是一个容易的问题,那是因为我对编码还不熟悉

import random#import random允许使用随机生成的数字

def游戏(ra、rb):#此功能游戏设定游戏运行方式 p_a_point=ra/(ra+rb)#这行代码确定 #玩家a赢得任何一点

a_points = 0 #the amount of points player a has is defaulted to 0
b_points = 0 #the amount of points player b has is defaulted to 0

score_to_win = 11 #the winning score is defaulted to 11

while (a_points < score_to_win and b_points < score_to_win) or  abs (a_points - b_points) < 2: #while player a's points and player b's points are less than the winning score:
    p_b_point = random.random()#the probability b wins a point is set the a random value between 0 and 1
    if p_b_point < p_a_point: #is the probability b wins a point is less than the probability a wins a point:
        a_points = a_points + 1 #a wins 1 point
    else: #if player a doesn't win a point:
        b_points = b_points + 1 #b wins a point
return(a_points, b_points)#both players points are returned
a_points=0#玩家a的积分默认为0
b_points=0 35;玩家b的积分默认为0
score_to_win=11#获胜分数默认为11
而(a_分<得分对得分,b_分<得分对得分)或abs(a_分-b_分)<2:#当球员a和球员b的得分低于获胜得分时:
p_b_point=random.random()#b赢得一个点的概率设置为0到1之间的随机值
如果p_b_点
print(game(70,30))#调用函数时使用两个整数值作为参数

def获胜概率(ra、rb、n):

老实说,从这里开始,我不确定该怎么做。我想做一个for循环,例如: 对于游戏中的n(ra,rb):

但我不确定是否可以在此循环调用中使用上一个函数。我还对如何计算代码中的概率感到困惑

一般目标是使用两种概率调用函数,例如70和30,并给出玩家ra获胜概率的十进制答案

对于之前的评论,我为之前的含糊不清道歉。我以前从未在这里发布过。

看看这是否有帮助

from random import randint, seed

seed()

rounds = input(" How many rounds will be played in the match? ")

print("\n Please enter skill levels as integers from 0 to 99.\n")
a = input(" What is the skill level of player 1? ")
b = input(" What is the skill level of player 2? ")


# Catch empty inputs
if not rounds: rounds = 10
if not a: a = 0
if not b: b = 0

# Python inputs are always strings. Convert them to integers.
rounds = int(rounds)
a = int(a)
b = int(b)

# If both skill levels are 0, set them to 1.
# (This will avoid a possible division by zero error.)
if a+b == 0: a = b = 1

# Catch and correct numbers that are too high.
if a > 99: a = 99
if b > 99: b = 99

# Convert integer skill levels to values between 0.0 and 0.99
a = a/100
b = b/100

print()
print(" Chance player 1 will win: "+str(int(100*a/(a+b)))+" percent.")
print(" Chance Player 2 will Win: "+str(int(100*b/(a+b)))+" percent.")
print()

for x in range(rounds):
    roll = randint(0,999)/1000
    print("roll =",roll, end =": ")
    if roll <= a/(a+b):  # <-- Compare roll to ratio of player skill levels.
        print("Round "+str(x+1)+" Winner: Player 1")
    else:
        print("Round "+str(x+1)+" Winner: Player 2")
print()
来自随机导入randint,种子
种子()
轮数=输入(“比赛将进行多少轮?”)
打印(“\n请以0到99之间的整数输入技能级别。\n”)
a=输入(“玩家1的技能水平是多少?”)
b=输入(“玩家2的技能水平是多少?”)
#捕获空输入
如果不是轮数:轮数=10
如果不是a:a=0
如果不是b:b=0
#Python输入总是字符串。将它们转换为整数。
轮数=整数(轮数)
a=int(a)
b=int(b)
#如果两个技能级别均为0,则将其设置为1。
#(这将避免可能的零除错误。)
如果a+b==0:a=b=1
#捕捉并纠正过高的数字。
如果a>99:a=99
如果b>99:b=99
#将整数技能级别转换为介于0.0和0.99之间的值
a=a/100
b=b/100
打印()
打印(“玩家1获胜的几率:“+str(int(100*a/(a+b)))+”百分比。”)
打印(“玩家2获胜的几率:“+str(int(100*b/(a+b)))+”百分比。”)
打印()
对于范围内的x(轮数):
滚动=randint(0999)/1000
打印(“roll=,roll,end=:”)
如果这是我的答案

import random

def winProbability(ra, rb, n):

    winCount = 0 #used to count how many times 'a' won
    probabilityRange = ra + rb

    for i in range(n):
        # pick a number between 0 and probabiilityRange
        number = random.randint(0, probabilityRange)

        # if number is < ra then 'a' won if number is > ra then 'b' won if number == ra then results in a draw
        if number < ra:
            winCount += 1
            print ('win')

        if number > ra:
            print('loss')

        if number == ra:
            print ('draw') # draw doesn't count as win

    return winCount*(100/n)

print (winProbability(10000,1,100000))
随机导入
def获胜概率(ra、rb、n):
winCount=0#用于计算“a”赢了多少次
概率数=ra+rb
对于范围(n)中的i:
#选择一个介于0和probabiilityRange之间的数字
number=random.randint(0,概率数)
#如果数字小于ra,则如果数字大于ra,则“a”获胜;如果数字==ra,则“b”获胜,则结果为平局
如果数量ra:
打印(“丢失”)
如果数字==ra:
打印(“抽签”)#抽签不算作胜利
返回winCount*(100/n)
印数(万,一百一十万)

这将打印每一场比赛的结果,并以百分位数形式返回“a”获胜的可能性。

到目前为止,您是否尝试过任何我们可以查看的代码。另外,根据每位球员的评分,你如何将评分转换为发球和接球时的得分概率?我认为他的问题更多的是关于数学和比率,而不是关于python。这是一个有趣的比率问题,并不是每个人都能牢牢掌握比率。因此,尽管我很想马上拒绝它,因为它没有提出具体的编码问题,但这似乎对一个新的编码人员并不欢迎。当然,阿兰,你是对的,海报应该分享他们的努力,询问遇到的具体编码问题,而不是一般的“帮助我完成作业”目标。如果
ra
rb
加起来等于1,那么这似乎是一个简单的计算。是的,这是关键。ra+rb加起来必须等于1才能得到我们需要的比率。但是,当你将多个玩家中的任意两个玩家与技能级别(如32、98、75和21)匹配时,这并不是很明显需要的。@user10637953如果这纯粹是一个数学问题,而不是python/编程问题,那么就有一个单独的堆栈交换站点。如果这是关于数学+如何用Python(用Python标记)编写代码的问题,那么OP应该分享当前的努力以及具体的困难所在,否则就太宽泛了。