求解扔骰子概率问题,R语言

Python015

求解扔骰子概率问题,R语言,第1张

第一个取名为dice

dice<-function(N){ #建一个名字叫dice的方程

count<-0 #计数器:初始化为0

for(n in 1:N){ #运行N次

result<-1 #这个是色子点数的乘积,初始化为1

for(i in 1:3){#投三次

result<-result*sample(1:6,1)#sample(1:6,1)的意思是从1到6中随机选一个

}

if(result<90)#乘积小于90的话

count<-count+1 #就自增1

}

prob<-round(count/N,6) #概率保留6位小数

return(prob)#函数返回这个概率

}

编好了在控制台source一下你这个R文件,然后输入dice(100000)

>dice(100000)

[1] 0.84911

>dice(100000)

[1] 0.85275

我跑了2次

第二题都不用编函数了,直接算吧。平均寿命3000小时,那么指数分布的参数lambda就是1/3000,如果X~Exp(1/3000),题目求P(2000<X<3000)的值

R里有函数叫pexp(q,rate=r)是指数分布的分布函数P(X<q),其中 q是寿命,r是lambda

所以P(2000<X<3000)等于

>pexp(3000,rate=1/3000)- pexp(2000,rate=1/3000)

[1] 0.1455377

# -*- coding: UTF-8 -*-

import random,time

def randstr(x):

num=int(random.uniform(1,7))

return [num,"第" + str(x) + "个骰子摇出来的点数是:" + str(num) + "\n"]

def tous(r):

sum,constr=0,""

# range(r) means 0 to r so use below

for i in range(1,r+1):

conresult=randstr(i)

sum+=conresult[0]

constr+=conresult[1]

return [sum,constr]

def calltous(k,v):

daxiao=("点数为小","点数为大")

result=tous(k)

print result[1] + "所有骰子摇得的总数是:" + str(result[0]) + "\n" + daxiao[(result[0]-v)>0] + "\n"

while True:

calltous(3,10)

time.sleep(1.3)

实践1:函数编程练习 1.掷骰子游戏 编写程序模拟掷骰子游戏。已知掷骰子游戏的游戏规则为:每个骰子有6面,这些面包含1、2、3、4、5、6个点,投两枚骰子之后,计算点数之和。如果第一次投的点数和为7或11,则游戏者获胜;如果第一次投的点数和为2、3或12,则游戏者输;如果第一次投的点数和为4、5、6、8、9或10,则将这个和作为游戏者获胜需要掷出的点数,继续投骰子,直到赚到该点数时算是游戏者获胜。如果投掷7次仍未赚到该点数,则游戏者输。 【思考题】 将游戏规则改为:计算机想一个数作为一个骰子掷出的点数(在用户输入数据之前不显示该点数),用户从键盘输入一个数作为另一个骰子掷出的点数,再计算两点数之和。其余规则相同,然后请读者重新编写该程序。 2.学生成绩统计(一维数组)要求函数参数中包含一维数组。 从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单; (3)以直方图方式统计各分数段的学生人数及所占的百分比。形式如下: 分数段 学生人数 图形 <60 3(10%) *** 60-69 8(…) ******** 70-79 7(…) ******* 80-89 8(…) ******** >=90 4(…) **** 实践2:结构体编程练习 在屏幕上模拟显示一个数字式时钟 按如下方法定义一个时钟结构体类型: struct clock { int hourint minuteint second}typedef struct clock CLOCK然后,将下列用全局变量编写的时钟模拟显示程序改成用CLOCK结构体变量类型重新编写。已知用全局变量编写的时钟模拟显示程序如下: #include <stdio.h>int hour, minute, second/*全局变量定义*/ /* 函数功能:时、分、秒时间的更新 函数参数:无 函数返回值:无 */ void Update(void) { second++if (second == 60) /*若second值为60,表示已过1分钟,则 minute值加1*/ { second = 0minute++} if (minute == 60) /*若minute值为60,表示已过1小时,则 hour值加1*/ { minute = 0hour++} if (hour == 24) /*若hour值为24,则hour的值从0开始计时*/ { hour = 0} } /*函数功能:时、分、秒时间的显示 函数参数:无 函数返回值:无 */ void Display(void) /*用回车符'\r'控制时、分、秒显示的位置*/ { printf("%2d:%2d:%2d\r", hour, minute, second) } /*函数功能:模拟延迟1秒的时间 函数参数:无 函数返回值:无 */ void Delay(void) { long tfor (t=0t<50000000t++) { /*循环体为空语句的循环,起延时作用*/ } } main() { long ihour = minute = second = 0/*hour,minute,second赋初值0*/ for (i=0i<100000i++) /*利用循环结构,控制时钟运行的时间*/ { Update()/*时钟更新*/ Display()/*时间显示*/ Delay()/*模拟延时1秒*/ } }