您好我已经完成了重新调试,我相信当我最终在这个线程时,我最终朝着正确的方向前进:
http://code.activestate.com/recipes/117241/
基本上我的问题是:链接中的代码是逐行完成的。如果您的解释让我理解链接中的代码在令人满意的程度上做了什么,您可能会忽略我在下面写的所有内容。
我相信该链接的代码会生成一个随机数,但随机数与概率直接相关。
在我自己的代码中,我试图获取一个“数字”及其出现的概率,并获得一个输出“数字”,它将根据概率出现。我知道这很令人困惑,但如果你看一下上面的链接,我希望它能清楚我想要做什么。我的下面的代码是参考上面的链接。
所以在我的程序中,这些是我的全局变量:
HIGH= 3
MED= 2
LOW= 1
这是我正在使用的列表:
n= [LOW,lowAttackProb).(MED,medAttackProb),(HIGH,highAttackProb)]
#lowAttackProb,med...,etc. are based on user input are just percents converted to decimals that add up to 1 in every case
这是我按照以上链接实现随机代码的方式:
x= random.uniform(0,1)
for alevel,probability in n:
if x<probability:
break
x=x-probability
return alevel
我不确定for循环中究竟发生了什么,x = x-probability正在做什么。
让我们说x = 0.90
并且在我的列表中,第二个列表输入的可能性是0.60,然后,因为x(小于)概率是False(我不太确定如果x(小于)概率甚至是什么),代码继续进行n = n-probability。
我真的希望这是有道理的。如果没有,请让我知道什么是不清楚的,我会尝试解决它。感谢您的帮助。
答案 0 :(得分:4)
此代码实现了考虑可能事件概率的事件选择。这是它背后的想法。
有三个事件(或您调用的级别),LOW
,MED
,HIGH
,每个事件具有一定的非零概率,所有概率总和精确到1。 Python的标准方法可以生成0到1之间的随机数。那么我们如何将它们“映射”到彼此呢?让我们沿着数字线对齐我们的概率(简称为L,M和H):
0__________________L______________L+M_________________________L+M+H ( = 1)
现在我们可以说我们随机生成的数字x
您询问的代码只是将x
与其中一个区间匹配,并返回相应的事件(或级别)。