数字游戏
2013年06月13日
在书上读到这么一个游戏,有n(n>1)个人坐在一块,每个人报一个100以内的数字,所报数字和所有这些数字平均值的三分之二最接近的人获得胜利.现在n个人每人随机报一个100以内的数字,这n个数字的平均值的三分之二为w,那么这n个数字中和w的差的绝对值最小的人获胜。那么通过下面的python程序可以简单模拟这个过程.
#!/usr/bin/python
import random
num = raw_input('Enter an integer(>1):')
while(1):
try:
num = int(num)
if num > 1:
break
else:
raise someError;
except :
num = raw_input('Please Enter an INTEGER(>1):')
aa = []
total = 0
for i in range(0, num):
aa.append(random.uniform(1,100))
total += aa[i]
avg = total / num
end = avg * 2 / 3
diff = {}
for i in range(0, num):
diff[aa[i]] = abs(aa[i] - end)
near = sorted(diff.items(),key=lambda d:d[1])[1]
print "There are %d numbers ." % num
print "The 2/3 of Average is %f . " % end
print "The closest random digit is %f ." %near[0]
利用python程序模拟这么一个过程可以发现,随机数的平均值应该在50左右,那么,平均值的2/3应该为33左右.
作为智慧生物,当所有人都想要获得胜利的时候,大家会把所报的数字都选在33附近,现在平均值就应该是33,33的2/3就是22.以此类推,最后的结果就会推到0.从现实的比赛情况来看,大家都会往33和22附近的数字上报,以求获得胜利,据说一般猜22附近的人更容易获胜.
再看另外一个游戏,有科学家证明抛硬币游戏的时候,正反面出现的概率并不完全相同,基于这样的疑问,我们会想到那么系统随机数字出现的概率是不是完全一样的?通过下面的代码随机生成0~99之间的数字,分别统计落在0~49和50~99之间的个数:
#!/bin/bash
read -p "Enter your number(>1):" number
while true
do
if [ $number -gt 1 ] 2> /dev/null && [ $? -eq 0 ]
then
break
else
read -p "Please Enter your Number(>1):" number
fi
done
l=0
g=0
for((i=1;i<=$number;i++))
do
if [ $((RANDOM % 100)) -le 49 ]
then
let l++
else
let g++
fi
done
echo "There are $number random numbers"
echo "$l numbers is less than 50"
echo "$g numbers is greater than 50"
代码都很简单,不用太多的解释就能读懂。
因为对python和shell生成随机数方式的不了解,所以同样无法判断这种随机数是不是真正的随机.
程序本身很短,得出的结论也并不严谨和重要,主要为练习脚本编程而作,语言太久不用就会手生.不要让自己懒下来!
已有 2 条评论 »