热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

R语言之R程序(老虎机)

第一步,模拟动作。可以用sample函数随机生成三个符号,就像你在项目1中随机“掷”骰子一样。下面的函数能够从老虎机的常用符号中随机选择三个符号。这些常用符号包括:钻

第一步,模拟动作。可以用sample函数随机生成三个符号,就像你在项目1中随机“掷”骰子一样。下面的函数能够从老虎机的常用符号中随机选择三个符号。这些常用符号包括:钻石(DD)、七(7)、三条杠(BBB)、两条杠(BB)、一条杠(B)、樱桃©和零(0)。符号的选择完全是随机的,但是每个符号出现的概率各不相同。

get_symbols<-function()wheel<-c("DD",7","BBB","BB",“B",“C","0")sample(wheel,size&#61;3,replace&#61;TRUE, prob&#61;c(0.03,.03,0.06,0.1,0.25,0.01,0.52))

可以使用get_symbols随机生成老虎机中的三个符号。

在这里插入图片描述
每玩一次老虎机游戏需要花费一美元.转出的符号组合决定了玩家所能获得的中奖金额。钻石符号(DD)是可以百搭的,并且能够将最终的金额加倍。*表示任意符号

在这里插入图片描述

如果不能满足以下三种情形中的任意一种,玩家将一无所获。
(1)三个符号完全相同(但不能是符号零)。
(2)三个带杠的符号(任意组合)。
(3)一个或多个樱桃。
PS:(百搭牌(DD)的使用有一个例外:除非组合中已经有了一个樱桃,否则钻石不能被当作樱桃。
只要中奖组合中出现了钻石,奖金都会翻倍。


策略


1.有序步骤

生成符号组合→显示符号组合→根据符号组合计算中奖金额

play<-function(){#步骤1:生成符号组合symbols<-get_symbols()#步骤2:显示符号组合print(symbols)#步骤3:根据符号组合计算中奖金额score(symbols)}

2.同类情况

在这里插入图片描述


if语句

同其他高级语言的语法规则
(1) 下面的函数会返回什么结果?

x <-1if(3&#61;3){x<-2}x

答案:这段代码的返回值是2。
(2)

x <-1if(TRUE){x<-2}x}

练习 &#xff1a;

x<-1if(x&#61;&#61;1){x<-2
if(x&#61;&#61;1){x<-3}}x

答案:这段代码的返回值是2。


else语句

同其他高级语言的语法规则
比如&#xff1a; a <- 3.14
然后用trunc函数将小数部分提取出来。

dec<-a-trunc(a)dec

##0.14trunc函数接受一个数值作为它的输入,并返回该数值小数点左边的部分(也就是该数值的整数部分)。

if(#情形1:三个符号相同){prize<-查找对应的中奖金额}else if(#情形2:全是杠3)prize<-#分配5美元奖金} else{#计算樱桃的数量prize<-#计算中奖金额}

已经有了完成第一个子任务的代码,可以把它放进老虎机程序的代码中

same<-symbols[1]&#61;&#61;symbols[2]&&symbols[2]&#61;&#61;symbols[3]
bars<-symbols %in% c("B","BB","BBB"))
if(same){prize<-#查找对应的中奖金额
} else if(#情形2:全是杠){prize<-#分配5美元奖金
}else{#计算樱桃的数量prize<-#计算中奖金额
}

if(same){symbol<-symbols[1]if(symbol&#61;"DD"){ prize<-800}else if(symbol&#61;"7"){prize<-80}else if(symbol&#61;&#61;"BBB"){prize<-40}else if(symbol&#61;"BB"){prize<-25}
else if(symbol&#61;&#61;"B"){prize<-10}else if(symbol&#61;&#61;“C"){prize<-10else if(symbol&#61;&#61;"0"){prize<-0 } }

查找表

创建一个向量&#xff0c;将符号存储为名称,将中奖金额存储为元素值,并且将名称和相应的元素值一一对应起来。

payouts<-("DD"&#61;100,"7"&#61;80,"BBB"&#61;40,"BB"&#61;25,"B"&#61;10, "C"&#61;10, "0"&#61;0)payouts["DD"]

unname函数返回一个对象的副本,但是会将其名称属性移除。

#计算樱桃的数量{
cherries<-sum(symbols&#61;&#61;"C")prize<-c(0,2,5)[cherries&#43;1]
}diamonds<-sum(symbols&#61;"DD")#在需要的情况下,把奖金翻倍prize*2^diamonds

查找表与树

要将if树转换为查找表,首先明确要赋的值,并将这些值存储在一个向量中;然后,提取出if树中的各个条件语句作为选值的依据。如果条件中使用了字符串,就给向量的各元素赋予名称,然后用基于名称的取子集方法得到对应的元素;如果条件中使用了整数数值,就使用基于整数的取子集方法。


代码注释&#xff08;整体代码&#xff09;

代码中用#加些注释。通过注释对某些代码段的功能进行解释,这样可以增加代码的可读性。

score <- function(symbols){#识别情形same <- symbols[1] &#61;&#61; symbols[2] && symbols[2] &#61;&#61; symbols[3]bars <- symbols %in% c("B","BB","BBB")#计算中奖金额if (same){payouts <- c("DD" &#61; 100,"7" &#61; 80,"BBB" &#61; 40,"BB" &#61; 25,"B" &#61; 10, "C"&#61;10,"0" &#61; 0)prize <- unname(payouts[symbols[1]])}else if(all(bars)){prize <- 5}else{cherries <- sum(symbols &#61;&#61; "C")prize <- c(0,2,5)[cherries &#43; 1]}#根据钻石个数调整中奖金额diamonds <- sum(symbols &#61;&#61; "DD")prize * 2^ diamonds
}
get_symbols <- function(){wheel <- c("DD","7","BBB","BB","B","C","0")sample(wheel, size &#61; 3,replace &#61;TRUE,prob &#61; c(0.03,0.03,0.06,0.1,0.25,0.01,0.52))
}
play <- function(){symbols <- get_symbols()print(symbols)score(symbols)
}
play()

运行play()就可以实现”老虎机“.
在这里插入图片描述


小结

将任务分解为一些更简单的任务,如果有必要的话,把简单的任务再分解为更为简单的任务。如果可视化有用的话,可以用一个流程图将任务之间的关系表示出来。

然后对子任务实施各个击破。对每个子任务的解决方案都尝试用通俗的语言描述出来,然后再转换成R代码的形式。对于每一个子任务的代码,都要用实例进行测试。当每一个子任务都运行无误时,将所有子任务的代码整合成一个函数,以便分享和重复使用。

为了帮助完成这些工作,R提供了一些有用的工具。你可以用if和else语句处理不同的情形,也可以用R对象和取子集的方法创建一个查找表;可以用给代码添加注释,还可以用function函数将所写的程序包装成函数。


推荐阅读
author-avatar
mobiledu2502856653
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有