频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
[从头学数学] 第176节 概率
2016-04-15 09:16:07      个评论    来源:微笑的彩虹的博客  
收藏   我要投稿
剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入了结丹中期的修炼,
这次要修炼的目标是[概率]。

正剧开始:

星历2016年04月14日 09:46:28, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起研究[概率]。

 

\

 

\

\

\

\

\

 

小伟决定自己来掷硬币玩一玩:

 

def tmp():
    result = [];
    print('试验次数--正面朝上次数---正面朝上频率');
    for i in range(5, 105, 5):
        count = 0;
        for j in range(i):
            number = random.randint(1, 10000);
            if number%2 == 0:
                count+=1;
        #result.append([i, count, count/i]);
        print('[',i,',',count,',',count/i, ']');

if __name__ == '__main__':
    tmp();
        
		
>>> 
试验次数--正面朝上次数---正面朝上频率
[ 5 , 1 , 0.2 ]
[ 10 , 3 , 0.3 ]
[ 15 , 9 , 0.6 ]
[ 20 , 9 , 0.45 ]
[ 25 , 15 , 0.6 ]
[ 30 , 11 , 0.36666666666666664 ]
[ 35 , 20 , 0.5714285714285714 ]
[ 40 , 14 , 0.35 ]
[ 45 , 20 , 0.4444444444444444 ]
[ 50 , 24 , 0.48 ]
[ 55 , 27 , 0.4909090909090909 ]
[ 60 , 28 , 0.4666666666666667 ]
[ 65 , 40 , 0.6153846153846154 ]
[ 70 , 35 , 0.5 ]
[ 75 , 38 , 0.5066666666666667 ]
[ 80 , 40 , 0.5 ]
[ 85 , 38 , 0.4470588235294118 ]
[ 90 , 47 , 0.5222222222222223 ]
[ 95 , 49 , 0.5157894736842106 ]
[ 100 , 55 , 0.55 ]
>>> ================================ RESTART ================================
>>> 
试验次数--正面朝上次数---正面朝上频率
[ 5 , 2 , 0.4 ]
[ 10 , 4 , 0.4 ]
[ 15 , 10 , 0.6666666666666666 ]
[ 20 , 12 , 0.6 ]
[ 25 , 11 , 0.44 ]
[ 30 , 9 , 0.3 ]
[ 35 , 19 , 0.5428571428571428 ]
[ 40 , 20 , 0.5 ]
[ 45 , 24 , 0.5333333333333333 ]
[ 50 , 24 , 0.48 ]
[ 55 , 32 , 0.5818181818181818 ]
[ 60 , 29 , 0.48333333333333334 ]
[ 65 , 35 , 0.5384615384615384 ]
[ 70 , 33 , 0.4714285714285714 ]
[ 75 , 32 , 0.4266666666666667 ]
[ 80 , 39 , 0.4875 ]
[ 85 , 45 , 0.5294117647058824 ]
[ 90 , 47 , 0.5222222222222223 ]
[ 95 , 42 , 0.4421052631578947 ]
[ 100 , 51 , 0.51 ]
>>> 

试验次数--正面朝上次数---正面朝上频率
[ 5 , 4 , 0.8 ] ,
[ 10 , 4 , 0.4 ] ,
[ 15 , 10 , 0.6666666666666666 ] ,
[ 20 , 14 , 0.7 ] ,
[ 25 , 10 , 0.4 ] ,
[ 30 , 13 , 0.43333333333333335 ] ,
[ 35 , 17 , 0.4857142857142857 ] ,
[ 40 , 26 , 0.65 ] ,
[ 45 , 22 , 0.4888888888888889 ] ,
[ 50 , 24 , 0.48 ] ,
[ 55 , 29 , 0.5272727272727272 ] ,
[ 60 , 30 , 0.5 ] ,
[ 65 , 32 , 0.49230769230769234 ] ,
[ 70 , 33 , 0.4714285714285714 ] ,
[ 75 , 34 , 0.4533333333333333 ] ,
[ 80 , 46 , 0.575 ] ,
[ 85 , 38 , 0.4470588235294118 ] ,
[ 90 , 47 , 0.5222222222222223 ] ,
[ 95 , 46 , 0.4842105263157895 ] ,
[ 100 , 58 , 0.58 ] ,

每次结果都不一样的。

 

 

看一看这些数到底是怎样的:

 

	if (1) {
		var config = new PlotConfiguration();        
		config.init();    
		  
		config.setPreference();    
		var r = 20;  
		//config.setSector(1,1,1,1);    
		//config.graphPaper2D(0, 0, r);  
		//config.axis2D(0, 0,180);   

		var array = [
			[ 5 , 4 , 0.8 ] ,
			[ 10 , 4 , 0.4 ] ,
			[ 15 , 10 , 0.6666666666666666 ] ,
			[ 20 , 14 , 0.7 ] ,
			[ 25 , 10 , 0.4 ] ,
			[ 30 , 13 , 0.43333333333333335 ] ,
			[ 35 , 17 , 0.4857142857142857 ] ,
			[ 40 , 26 , 0.65 ] ,
			[ 45 , 22 , 0.4888888888888889 ] ,
			[ 50 , 24 , 0.48 ] ,
			[ 55 , 29 , 0.5272727272727272 ] ,
			[ 60 , 30 , 0.5 ] ,
			[ 65 , 32 , 0.49230769230769234 ] ,
			[ 70 , 33 , 0.4714285714285714 ] ,
			[ 75 , 34 , 0.4533333333333333 ] ,
			[ 80 , 46 , 0.575 ] ,
			[ 85 , 38 , 0.4470588235294118 ] ,
			[ 90 , 47 , 0.5222222222222223 ] ,
			[ 95 , 46 , 0.4842105263157895 ] ,
			[ 100 , 58 , 0.58 ] 
		];
		
		var len = array.length;
	  
		var stat = new Statistic();          
		var data = [], text = [];  
		  
		//横坐标
		for (var i = 0; i 

\

画个折线图瞅瞅:

	if (1) {
		var config = new PlotConfiguration();        
		config.init();    
		  
		config.setPreference();    
		var r = 20;  
		//config.setSector(1,1,1,1);    
		//config.graphPaper2D(0, 0, r);  
		//config.axis2D(0, 0,180);   

		var array = [
			[ 5 , 4 , 0.8 ] ,
			[ 10 , 4 , 0.4 ] ,
			[ 15 , 10 , 0.6666666666666666 ] ,
			[ 20 , 14 , 0.7 ] ,
			[ 25 , 10 , 0.4 ] ,
			[ 30 , 13 , 0.43333333333333335 ] ,
			[ 35 , 17 , 0.4857142857142857 ] ,
			[ 40 , 26 , 0.65 ] ,
			[ 45 , 22 , 0.4888888888888889 ] ,
			[ 50 , 24 , 0.48 ] ,
			[ 55 , 29 , 0.5272727272727272 ] ,
			[ 60 , 30 , 0.5 ] ,
			[ 65 , 32 , 0.49230769230769234 ] ,
			[ 70 , 33 , 0.4714285714285714 ] ,
			[ 75 , 34 , 0.4533333333333333 ] ,
			[ 80 , 46 , 0.575 ] ,
			[ 85 , 38 , 0.4470588235294118 ] ,
			[ 90 , 47 , 0.5222222222222223 ] ,
			[ 95 , 46 , 0.4842105263157895 ] ,
			[ 100 , 58 , 0.58 ] 
		];
		
		var len = array.length;
	  
		var stat = new Statistic();          
		var data = [], text = [];  
		  
		//横坐标
		for (var i = 0; i -1; i -= perH) {
			plot.fillText((min+dy*count).toFixed(2), -10, i+10, 30);
			count++;
			
			if (i > 0) {
				plot.beginPath()
					.moveTo(0, i)
					.lineTo(wBound, i)
					.closePath()
					.stroke();
			}
		}
		
		for (var i = 0; i < part; i++) {
			plot.beginPath()
				.moveTo(i*perW, 0)
				.lineTo(i*perW, hBound)
				.closePath()
				.stroke();
		}
		

		
		var xpos, xpos2, ypos;
		
		plot.setStrokeStyle('red')
			.setLineWidth(4);
		for (var i = 0; i < size; i++) { 
			ypos = hBound-(this.statisticalSample[i]-min)/dy*perH;

			xpos = perW*(1+2*i);
			
					if (i==0) {
						plot.beginPath()
							.moveTo(xpos, ypos);
					}
					else if (i < size-1) {
						plot.lineTo(xpos, ypos);
					}
					else {
						plot.lineTo(xpos, ypos)
							.moveTo(xpos, ypos)
							.closePath()
							.stroke();
					}
			

			

		}  
		
		for (var i = 0; i < size; i++) { 
			ypos = hBound-(this.statisticalSample[i]-min)/dy*perH;

			xpos = perW*(1+2*i);
			xpos2 = xpos + 0.5*perW;
			
			plot.setFillStyle('orange');
			shape.fillCircle(xpos, ypos, 5);
			plot.setFillStyle('blue');
			plot.fillText(this.statisticalSample[i].toFixed(2), xpos, ypos-5, 100);
			
			plot.setFillStyle('blue');
			plot.setTextAlign('center');
			if (i < lables) {
				plot.fillText(lableArray[i], xpos2-0.5*perW, 
					hBound+30, 100);  

			}
			
		}

		
		plot.restore();
	
	}

\

来个数据点少一点的:

>>> 
试验次数--正面朝上次数---正面朝上频率
[ 5 , 3 , 0.6 ] ,
[ 15 , 9 , 0.6 ] ,
[ 25 , 16 , 0.64 ] ,
[ 35 , 15 , 0.42857142857142855 ] ,
[ 45 , 20 , 0.4444444444444444 ] ,
[ 55 , 31 , 0.5636363636363636 ] ,
[ 65 , 38 , 0.5846153846153846 ] ,
[ 75 , 44 , 0.5866666666666667 ] ,
[ 85 , 42 , 0.49411764705882355 ] ,
[ 95 , 50 , 0.5263157894736842 ] ,

	if (1) {
		var config = new PlotConfiguration();        
		config.init();    
		  
		config.setPreference();    
		var r = 20;  
		//config.setSector(1,1,1,1);    
		//config.graphPaper2D(0, 0, r);  
		//config.axis2D(0, 0,180);   

		var array = [
[ 5 , 3 , 0.6 ] ,
[ 15 , 9 , 0.6 ] ,
[ 25 , 16 , 0.64 ] ,
[ 35 , 15 , 0.42857142857142855 ] ,
[ 45 , 20 , 0.4444444444444444 ] ,
[ 55 , 31 , 0.5636363636363636 ] ,
[ 65 , 38 , 0.5846153846153846 ] ,
[ 75 , 44 , 0.5866666666666667 ] ,
[ 85 , 42 , 0.49411764705882355 ] ,
[ 95 , 50 , 0.5263157894736842 ] 
		];
		
		var len = array.length;
	  
		var stat = new Statistic();          
		var data = [], text = [];  
		  
		//横坐标
		for (var i = 0; i 
\

如果尝试次数够多呢?

试验次数--正面朝上次数---正面朝上频率
[ 100 , 50 , 0.5 ] ,
[ 1100 , 548 , 0.49818181818181817 ] ,
[ 2100 , 1026 , 0.48857142857142855 ] ,
[ 3100 , 1522 , 0.49096774193548387 ] ,
[ 4100 , 2083 , 0.5080487804878049 ] ,
[ 5100 , 2613 , 0.5123529411764706 ] ,
[ 6100 , 3047 , 0.49950819672131147 ] ,
[ 7100 , 3522 , 0.496056338028169 ] ,
[ 8100 , 4083 , 0.5040740740740741 ] ,
[ 9100 , 4595 , 0.5049450549450549 ] ,
[ 10100 , 4960 , 0.4910891089108911 ] ,


	if (1) {
		var config = new PlotConfiguration();        
		config.init();    
		  
		config.setPreference();    
		var r = 20;  
		//config.setSector(1,1,1,1);    
		//config.graphPaper2D(0, 0, r);  
		//config.axis2D(0, 0,180);   

		var array = [
[ 100 , 50 , 0.5 ] ,
[ 1100 , 548 , 0.49818181818181817 ] ,
[ 2100 , 1026 , 0.48857142857142855 ] ,
[ 3100 , 1522 , 0.49096774193548387 ] ,
[ 4100 , 2083 , 0.5080487804878049 ] ,
[ 5100 , 2613 , 0.5123529411764706 ] ,
[ 6100 , 3047 , 0.49950819672131147 ] ,
[ 7100 , 3522 , 0.496056338028169 ] ,
[ 8100 , 4083 , 0.5040740740740741 ] ,
[ 9100 , 4595 , 0.5049450549450549 ] ,
[ 10100 , 4960 , 0.4910891089108911 ]
		];
		
		var len = array.length;
	  
		var stat = new Statistic();          
		var data = [], text = [];  
		  
		//横坐标
		for (var i = 0; i 
\

嗯,原来如此。

\

 

\

 

>>> 
[0.14, 0.14, 1.0, 0.0, 0.6, 0.4]
>>> ================================ RESTART ================================
>>> 
[0.23, 0.16, 1.0, 0.0, 0.5, 0.5]
>>> ================================ RESTART ================================
>>> 
[0.14, 0.16, 1.0, 0.0, 0.51, 0.49]


#掷骰子
def dice():
    N = 100;
    count = [0]*6;
    for i in range(N):
        number = random.randint(1,6);
        if number == 1:
            count[0]+=1;

        if number == 5:
            count[1]+=1;

        if number < 7:
            count[2]+=1;

        if number > 7:
            count[3]+=1;

        if number%2 == 0:
            count[4]+=1;

        if number%2 == 1:
            count[5]+=1;

    for i in range(len(count)):
        count[i]/=N;

    print(count);
    
\
>>> 
两个骰子点数和为1的概率是0.0
两个骰子点数和为2的概率是0.02
两个骰子点数和为3的概率是0.07
两个骰子点数和为4的概率是0.13
两个骰子点数和为5的概率是0.08
两个骰子点数和为6的概率是0.11
两个骰子点数和为7的概率是0.14
两个骰子点数和为8的概率是0.13
两个骰子点数和为9的概率是0.13
两个骰子点数和为10的概率是0.1
两个骰子点数和为11的概率是0.04
两个骰子点数和为12的概率是0.05

#掷骰子, 两骰子点数和
def dice():
    N = 100;
    count = [0]*12;
    for i in range(N):
        number1 = random.randint(1,6);
        number2 = random.randint(1,6);
        count[number1+number2-1]+=1;

    for i in range(len(count)):
        count[i]/=N;

    for i in range(len(count)):
        print('两个骰子点数和为{0}的概率是{1}'.format(i+1, count[i]));
\

 

如果实验次数够多,最终会是这样的情况:

\

 

	if (1) {
		var config = new PlotConfiguration();        
		config.init();    
		  
		config.setPreference();    
		var r = 20;  
		//config.setSector(1,1,1,1);    
		//config.graphPaper2D(0, 0, r);  
		//config.axis2D(0, 0,180);   

		var array = [0.0, 0.02, 0.05, 0.105, 0.105, 0.155, 0.175, 0.105, 0.12, 0.11, 0.045, 0.01];
		
		var len = array.length;
	  
		var stat = new Statistic();          
		var data = [], text = [];  
		  
		//横坐标
		for (var i = 0; i 

 

这个方法是不公平的,数据说明了一切。 

\

>>> pow(1/6, 10); 1.6538171687920194e-08

 

[人叫板老师]点明了这‘出老千’的现象是真实存在的。

 

\

\

\

\

\

\

\

\

 

>>> 
三天内有两天下雨的概率是0.4
未来三天的天气情况是
[[1, 9, 0], [6, 6, 3], [8, 5, 1], [4, 5, 3], [6, 6, 3], [1, 1, 0], [1, 4, 5], [6, 3, 6], [5, 0, 1], [1, 8, 6], [0, 2, 1], [3, 5, 4], [2, 6, 8], [1, 2, 8], [5, 3, 6], [4, 9, 1], [7, 4, 9], [0, 1, 8], [8, 9, 1], [3, 2, 7]]

>>> 
三天内有两天下雨的概率是0.3
未来三天的天气情况是
[[3, 7, 9], [7, 5, 6], [5, 2, 0], [8, 8, 3], [6, 0, 3], [6, 1, 6], [5, 2, 8], [2, 2, 2], [1, 5, 5], [6, 6, 3], [0, 3, 2], [2, 2, 5], [6, 4, 7], [5, 7, 5], [1, 0, 2], [2, 6, 1], [3, 3, 4], [8, 8, 5], [2, 9, 1], [2, 0, 2]]


def weather():
    N = 20;
    array = [([0]*3) for i in range(N)];

    for i in range(N):
        for j in range(3):
            array[i][j] = random.randint(0, 9);
            
    count2 = 0;
    for i in range(N):
        count = 0;
        for j in range(3):
            if array[i][j]>=1 and array[i][j]<=4:
                count+=1;

        if count == 2:
            count2+=1;

    print('三天内有两天下雨的概率是{0}'.format(count2/N));
    print('未来三天的天气情况是\n{0}'.format(array));
    

if __name__ == '__main__':
    weather();


 

\

 

>>> 
试验次数--两个正面朝上次数---两个反面朝上次数
[ 100 , 38 , 35 ]

>>> 
试验次数--两个正面朝上次数---两个反面朝上次数
[ 100 , 34 , 38 ]

>>> 
试验次数--两个正面朝上次数---两个反面朝上次数
[ 100 , 32 , 40 ]

def coin():
    result = [0]*2;
    print('试验次数--两个正面朝上次数---两个反面朝上次数');
    for i in range(100):
        count = [0]*2;
        for j in range(3):
            number = random.randint(1, 10000);
            if number%2 == 0:
                count[0]+=1;
            else:
                count[1]+=1;
        if (count[0] == 2):
            result[0]+=1;

        if (count[1] == 2):
            result[1]+=1;
        #result.append([i, count, count/i]);
    print('[ 100',',',result[0],',',result[1], ']');
	

>>> 
第1小题的概率是0.079
第2小题的概率是0.921
第3小题的概率是0.263
第4小题的概率是0.137
第5小题的概率是0.0
第6小题的概率是0.166
第7小题的概率是0.514
第8小题的概率是1.0
>>> ================================ RESTART ================================
>>> 
第1小题的概率是0.093
第2小题的概率是0.907
第3小题的概率是0.242
第4小题的概率是0.153
第5小题的概率是0.0
第6小题的概率是0.153
第7小题的概率是0.515
第8小题的概率是1.0

def card():
    #抽牌1000次
    N = 1000;
    #8个小题
    result = [0]*8;

    for i in range(N):
        #52张牌
        number = random.randint(1, 52);

        #约定1-13 第一组红心,依次黑桃、方块、草花

        #(1)
        if number%13 == 7:
            result[0]+=1;
        #(2)
        if number%13 != 7:
            result[1]+=1;
        #(3)  方片
        if number//13==2:
            result[2]+=1;
        #(4) JQK
        if number%13 > 10:
            result[3]+=1;
        #(5)
        if number//13==0 and number//13 == 3:
            result[4]+=1;
        #(6)
        if number%13 > 6 and number%13<9:
            result[5]+=1;
        #(7)
        if (number//13)%2==0:
            result[6]+=1;
        #(8)
        if (number//13)%2==0 or (number//13)%2==1:
            result[7]+=1;

    for i in range(len(result)):
        print('第{0}小题的概率是{1}'.format(i+1, result[i]/N));
            

if __name__ == '__main__':
    card();
	

 

 

>>> 
[0.0, 0.35, 1.0]
>>> ================================ RESTART ================================
>>> 
[0.0, 0.44, 1.0]
>>> ================================ RESTART ================================
>>> 
[0.0, 0.4, 1.0]

def ball():
    N = 100;
    result = [0]*3;
    for i in range(N):
        #9个球编号1-9
        number = random.randint(1, 9);

        if number < 1:
            result[0]+=1;

        if number < 5:
            result[1]+=1;

        if number < 10:
            result[2]+=1;

    for i in range(len(result)):
        result[i]/=N;
    print(result);   
              

if __name__ == '__main__':
    ball();

>>> 
两个骰子点数和为1的概率是0.0
两个骰子点数和为2的概率是0.02
两个骰子点数和为3的概率是0.06
两个骰子点数和为4的概率是0.08
两个骰子点数和为5的概率是0.09
两个骰子点数和为6的概率是0.11
两个骰子点数和为7的概率是0.225
两个骰子点数和为8的概率是0.145
两个骰子点数和为9的概率是0.12
两个骰子点数和为10的概率是0.085
两个骰子点数和为11的概率是0.055
两个骰子点数和为12的概率是0.01

#掷骰子, 两骰子点数和
def dice():
    N = 200;
    count = [0]*12;
    for i in range(N):
        number1 = random.randint(1,6);
        number2 = random.randint(1,6);
        count[number1+number2-1]+=1;

    for i in range(len(count)):
        count[i]/=N;

    for i in range(len(count)):
        print('两个骰子点数和为{0}的概率是{1}'.format(i+1, count[i]));

if __name__ == '__main__':
    dice();


\

\

\

\

\

\

 

 

点击复制链接 与好友分享!回本站首页
相关TAG标签 概率 从头 数学
上一篇:百思不得姐数据刷新数据部分(七)
下一篇:理解NTFS文件系统,自制简易目录浏览器
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站