Python教你如何选女友,模拟选择出颜值最高的女生

这篇博客探讨了一个有趣的概率问题,如何在多个女生中选择颜值最高的一位。通过模拟实验,作者说明了一种策略:先观察一定数量(k)的女生并记录颜值最高者,然后从k+1个女生开始,只有当遇到颜值更高的女生时才接受。通过Python模拟发现,当k约为总体的37%时,此策略能取得较好效果。这种方法揭示了概率论在实际问题中的应用。
摘要由CSDN通过智能技术生成

假设有n个女生喜欢你(做梦还是可以的哈)。你该如何选择出其中颜值最高的呢?当然,这你说的n个女生不是非诚勿扰那种n个女生同时出现在你面前,这样的话你一下子就能找出颜值最高的那个。

我们假设的有n个女生依次排着队向你表白()。

你有两种选择,你如果拒绝了当前向你表白的这个,她就和你无关了。你在之后可能遇到更好看的,也许再也遇不到更好看的了。另一种选择是你接受了这个女生的表白,那么之后的女生就和你没关系了,她们中间或许有更好看的,也许还有更好看的了。

一般人的想法是,n个女生里面有一个最好看的,那么只能随机选择啊,选择出最好看的女生的概率就是1/n啊。

(说到这里我想起了我之前做过的一个颜值打分器:

python神经网络:女生颜值打分器(一)

其实不然,学过概率论和数理统计的人就有了新的思路。

正确的方法是,先和前k个女生接触一下,不管漂亮与否,果断拒绝。记住她们中间颜值最高的那个。然后从k+1个女生开始,如果颜值比之前那个颜值最高的女生还高,就马上接收,否则就拒绝。

这样的话你选择的女生的颜值会比你盲目选择高很多。

那么这个k的值应该是多少呢?如果从k太小了,那么你记住的前k个女生中最漂亮的就没有啥比较意义了。如果k太大,那也不行啊。你记住的最好看的女生固然是颜值很高的,但是你之后的选择范围就很小了啊。

现在,我们就用python模拟的方法找出最合适的k的值。

首先,我们假设有1000个女生喜欢你()。

先用随机数生成器生成这1000个女生的颜值,颜值的范围在0--10000之间。然后添加在一个列表里面。

这些

random_list = []#随机数生成女生的颜值
for i in range(1000):
    random_list.append(random.randint(1, 100))#添加女生的颜值1--1000

随后,我们定义一个函数,作用是找出前k个女生中颜值最高的那个。

def getMaxBase(number, random_list):
    return max(random_list[:number])

接下来,就模拟之前设定好的选择方法。从第k+1个女生开始选择,里面有一个if条件判断程序,当当前这个女生的颜值高于前k个女生中最高的那个时。就返回,否则就判断下一个。知道判断到了最后一个女生。

def getMaxGuess(number):
    max_guess = getMaxBase(number, random_list)#前面的Number个数中最大的数
    for i in range(number,1000):
        if (random_list[i] >= max_guess or i == 999):
            max_guess1 = random_list[i]
            break
    return max_guess1

最后,需要做一个for循环,用来模拟当k从1--k时,在哪里选择的效果最好。

for j in range(1,girl_num):#从第j个女生开始选择
    now_rank=getMaxGuess(j)
    girls_rank.append(now_rank)

我们可以得出结论。如图所示,红线表示的是k取什么值的时候选择的女生颜值。起伏不定的蓝色的线表示我们用随机数生成器生成的女生颜值。在第37%开始正式选择,效果是最好的,当然,这只是我进行了一次模拟,效果没有想象中那么明显,如果是迭代很多次,然后把很多次模拟的数据综合到一起,我想肯定会明显很多。

最后,祝愿大家都能找到合适的另一半


图片来源:百度图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值