python代码如下(以1-10的随机数为例)
# 生产1-7随机均匀分布的整数
def rand7():
return random.randint(1,7)
# 生产随机数1-6的随机数
def rand6():
while 1:
x=rand7()
if x != 7:
return x
# 生产1-10随机均匀分布的整数
def rand10():
while 1:
y = (rand6()&1)<<3|rand6()&1<<2|rand6()&1<<1|rand6()&1
if y < 11 and y >0:
return y
思路:生产随机均匀的1和0,并将生成的0和1拼接为一个二进制数,拼接的位数转化为十进制要大于X,由于1和0是随机均匀分布的,这样拼接成的数字都会均匀的出现,过滤出其中任意几个数字,都是均匀随机分布的
1、为什么要把1-7的整数先变为1-6呢?
1-7的整数与1 做&操作,生成的0和1是不均匀的,三个0,四个1,不是均匀的。
2、注意事项, 与运算的优先级比位移运算等级高,在于1与运算外面一定要加括号,
| 运算符说明 | Python运算符 | 优先级 | 结合性 |
|---|---|---|---|
| 小括号 | ( ) | 19 | 无 高 |
| 索引运算符 | x[i] 或 x[i1: i2 [:i3]] | 18 | 左 |
| 属性访问 | x.attribute | 17 | 左 |
| 乘方 | ** | 16 | 左 |
| 按位取反 | ~ | 15 | 右 |
| 符号运算符 | +(正号)、-(负号) | 14 | 右 |
| 乘除 | *、/、//、% | 13 | 左 |
| 加减 | +、- | 12 | 左 |
| 位移 | >>、<< | 11 | 左 |
| 按位与 | & | 10 | 右 |
| 按位异或 | ^ | 9 | 左 |
| 按位或 | 安位或 | 8 | 左 |
| 比较运算符 | ==、!=、>、>=、<、<= | 7 | 左 |
| is 运算符 | is、is not | 6 | 左 |
| in 运算符 | in、not in | 5 | 左 |
| 逻辑非 | not | 4 | 右 |
| 逻辑与 | and | 3 | 左 |
| 逻辑或 | or | 2 | 左 |
| 逗号运算符 | exp1, exp2 | 1 | 左 |
513

被折叠的 条评论
为什么被折叠?



