【三种颜色各9个小球放在一起抽取9个小球计算概率】

摘要

看到一个小游戏, 分别有三种颜色的小球各 9个, 总共27个,从中任意拿出9个, 可能出现的情况,再不考虑颜色的情况下分别出现的组合的概率计算,使用python完成

计算C(m, n) 和A(m, n)

首先 python中有个math 模块,这个模块可以分别计算出 排列和组合

#排列

def getPerm(m, n):
	return math.perm(m, n)

#组合

def getComb(m, n):
	return math.comb(m, n)

数学公式

此问题中从27个小球中取出9个小球,可以分为三类 来讨论
第一种, 三个数字相同,即3, 3,3
第二种, 三个数字都不相同, 例如 0, 1 , 8
第三种, 三个数字中任意两个相同, 例如, 4, 4 ,1
第一种情况下的时候, 概率为P = C(9,N)xC(9,N)xC(9,N)x A(3, 0) / C(27, 9)
第二种情况下的时候, 概率为P = C(9,N1)xC(9,N2)xC(9,N3)x A(3, 3) / C(27, 9)
第三种情况下的时候, 概率为P = C(9,N1)xC(9,N1)xC(9,N2)x A(3, 1) / C(27, 9)

数学公式的代码实现

  1. 计算分母
def CalculateProbability_denominator(all_nums, out_nums):
    return math.comb(all_nums, out_nums)
  1. 计算分子
def CalculateProbability_molecule(num1, num2, num3, fixed_num):
    temp1 = math.comb(fixed_num, num1)
    temp2 = math.comb(fixed_num, num2)
    temp3 = math.comb(fixed_num, num3)

    # 假设 三种颜色都不一样
    if num1 != num2 != num3:
        return  temp1 * temp2 * temp3 * math.perm(3, 3)
    # 假设三种颜色都一样
    elif num1 == num2 == num3:
        return temp1 * temp2 * temp3 * math.perm(3, 0)
    # 假设有两种颜色一样
    else:
        return temp1 * temp2 * temp3 * math.perm(3, 1)
  1. 计算概率
#计算概率
def CalculateProbability_result(denominator, molecule):
    return float(molecule) / float(denominator)
  1. 计算所有可能出现的组合
#计算 可能 出现的组合
def CalculateProbability_combineNums(target):
    lst = []
    for i in range(0, target + 1):
        for j in range(i, target + 1 ):
            for k in range(j, target + 1):
                if i + j + k == target :
                    lst.append([i, j, k])

    return lst

完整代码

import math

# 计算分母
def CalculateProbability_denominator(all_nums, out_nums):
    return math.comb(all_nums, out_nums)
#计算分子
def CalculateProbability_molecule(num1, num2, num3, fixed_num):
    temp1 = math.comb(fixed_num, num1)
    temp2 = math.comb(fixed_num, num2)
    temp3 = math.comb(fixed_num, num3)

    # 假设 三种颜色都不一样
    if num1 != num2 != num3:
        return  temp1 * temp2 * temp3 * math.perm(3, 3)
    # 假设三种颜色都一样
    elif num1 == num2 == num3:
        return temp1 * temp2 * temp3 * math.perm(3, 0)
    # 假设有两种颜色一样
    else:
        return temp1 * temp2 * temp3 * math.perm(3, 1)


#计算概率
def CalculateProbability_result(denominator, molecule):
    return float(molecule) / float(denominator)

#计算 可能 出现的组合
def CalculateProbability_combineNums(target):
    lst = []
    for i in range(0, target + 1):
        for j in range(i, target + 1 ):
            for k in range(j, target + 1):
                if i + j + k == target :
                    lst.append([i, j, k])

    return lst


def main():
	target = 9
    lst = CalculateProbability_combineNums(target)

    for i in range(len(lst)):
        num1 = int(lst[i][0])
        num2 = int(lst[i][1])
        num3 = int(lst[i][2])
        fixed_num = 9

        molecule = CalculateProbability_molecule(num1, num2, num3, fixed_num)
        denominator = CalculateProbability_denominator(fixed_num * 3, fixed_num)

        result = CalculateProbability_result(denominator, molecule)
        result = result * 100
        print(num1,num2,num3, '概率为: {:.6f}%'.format(result))

代码输出结果

在这里插入图片描述

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 可以使用 JavaScript 的事件监听和 DOM 操作来实现这个功能。首先,需要为小球添加鼠标按下、鼠标移动和鼠标抬起的事件监听器。当用户按下鼠标时,记录当前小球颜色信息和鼠标相对于小球的偏移量。在鼠标移动时,根据偏移量调整小球的位置,同时创建新的小球,并设置其颜色信息和位置。当用户松开鼠标时,移除刚刚创建的小球,并恢复原本选中的小球位置即可。至于具体的代码实现,因篇幅限制无法贴出完整代码,可以在网上搜索相关实现方法。 ### 回答2: 在JavaScript中实现小球拖拽复制多个不同颜色小球,我们可以利用鼠标事件和DOM操作来实现。 首先,我们需要创建一个小球,并添加相应的样式和事件处理程序。可以通过添加一个div元素,设置其宽度、高度和背景颜色,使其看起来像一个小球。然后,我们可以给这个小球添加mousedown、mousemove、mouseup等事件监听器,实现拖拽功能。 在mousedown事件中,我们需要记录鼠标点击位置和小球的初始位置,以便计算偏移量。也可以使用event.offsetX和event.offsetY属性获取鼠标点击位置相对于小球的偏移量。然后,我们可以通过复制这个小球,创建一个新的小球,并设置新的背景颜色,使其与原小球颜色不同。 在mousemove事件中,我们需要根据鼠标移动的偏移量来实时更新新的小球的位置。可以通过设置新小球的style.left和style.top属性来修改其位置。 在mouseup事件中,我们可以清除mousedown和mousemove事件的监听器,完成拖拽复制的过程。 通过以上步骤,我们就可以实现小球的拖拽复制,并且每次复制的小球都具有不同的颜色。可以通过为不同的小球设置不同的背景颜色来实现颜色的区分。 这只是一个简单的实现示例,实际实现过程可能更复杂,还需要考虑位置限制、边界处理和多个小球之间的交互等问题。但是,通过鼠标事件和DOM操作,我们可以实现小球的拖拽复制,并且可以很方便地扩展其他功能。 ### 回答3: 在实现js小球拖拽复制多个不同颜色小球的过程中,可以按照以下步骤进行: 1. 创建一个小球并设置其初始颜色。 2. 添加鼠标按下事件,当鼠标按下时,记录鼠标的位置和小球的初始位置。 3. 添加鼠标移动事件,当鼠标移动时,计算鼠标的偏移量,并将小球的位置设置为初始位置加上偏移量,实现小球的拖拽效果。 4. 添加鼠标松开事件,当鼠标松开时,创建一个新的小球,并将其位置设置为松开时鼠标的位置,并设置颜色为随机生成的不同颜色。 5. 重复步骤2至步骤4,实现多个小球的拖拽复制。 具体实现如下: HTML部分: ```html <div id="container"></div> ``` CSS部分: ```css .small-ball { width: 20px; height: 20px; border-radius: 50%; position: absolute; cursor: move; } ``` JS部分: ```javascript // 生成一个随机的十六进制颜色 function getRandomColor() { return '#' + Math.floor(Math.random() * 16777215).toString(16); } // 添加小球的拖拽复制功能 function addBallDragCopy() { var container = document.getElementById('container'); container.addEventListener('mousedown', function(event) { var ball = document.createElement('div'); var initX = event.clientX - container.offsetLeft; var initY = event.clientY - container.offsetTop; ball.className = 'small-ball'; ball.style.background = getRandomColor(); ball.style.left = initX + 'px'; ball.style.top = initY + 'px'; container.appendChild(ball); container.addEventListener('mousemove', moveBall); container.addEventListener('mouseup', function() { container.removeEventListener('mousemove', moveBall); }); function moveBall(event) { var offsetX = event.clientX - container.offsetLeft - initX; var offsetY = event.clientY - container.offsetTop - initY; ball.style.left = initX + offsetX + 'px'; ball.style.top = initY + offsetY + 'px'; } }); } addBallDragCopy(); ``` 以上代码实现了一个简单的小球拖拽复制的效果。当我们按下鼠标并拖动时,会在拖动的位置生成一个新的小球,并且这个小球颜色会随机生成。这样就实现了js小球拖拽复制多个不同颜色小球的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值