python统计模拟:狙击手问题

1.问题描述

有一名潜伏在敌人阵地附近的狙击手,已知该狙击手射击1发子弹的命中率以及被发现的概率如下表所示:

距离(百米)456789
10
命中率100%100%90%80%70%60%
50%
暴露率40%35%30%25%20%18%
15%

假设狙击手一旦被暴露就要撤离阵地,请计算在不同距离上,该狙击手在暴露前平均能够狙杀多少名敌人,并确定射击的最优距离。

2.代码实现

import numpy as np
list_kill=[1,1,0.9,0.8,0.7,0.6,0.5]
list_exposure=[0.4,0.35,0.3,0.25,0.2,0.18,0.15]
N=10000
for j in range(4,11):  
    kill_num=0 #击杀总数
    for i in np.arange(N):      
        exposure=np.random.random(1)#exposure:暴露率
        kill=np.random.random(1)#kill:命中率
        if kill<=list_kill[j-4]:
            kill_num+=1
        while exposure>=list_exposure[j-4]:
                kill=np.random.random(1)
                if kill<=list_kill[j-4]:
                    kill_num+=1
                exposure=np.random.random(1)                   
    print('{}米平均击杀数为{}'.format(j*100,kill_num/N))

3.输出结果

400米平均击杀数为2.5203
500米平均击杀数为2.8589
600米平均击杀数为2.9782
700米平均击杀数为3.1661
800米平均击杀数为3.4708
900米平均击杀数为3.4096
1000米平均击杀数为3.398

由此我们可以看出在800米的距离下平均击杀人数最高,所以在制作狙击枪时的有效射击距离一定要超过800米。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值