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

get_symbols<-function()wheel<-c("DD",“7","BBB","BB",“B",“C","0")sample(wheel,size=3,replace=TRUE, prob=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=3){x<-2}x

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

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

练习 :

x<-1if(x==1){x<-2
if(x==1){x<-3}}x

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

else语句

同其他高级语言的语法规则
比如: 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]==symbols[2]&&symbols[2]==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="DD"){ prize<-800}else if(symbol="7"){prize<-80}else if(symbol=="BBB"){prize<-40}else if(symbol="BB"){prize<-25}
else if(symbol=="B"){prize<-10}else if(symbol==“C"){prize<-10else if(symbol=="0"){prize<-0 } }

查找表

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

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

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

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

查找表与树

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

代码注释(整体代码)

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

score <- function(symbols){#识别情形same <- symbols[1] == symbols[2] && symbols[2] == symbols[3]bars <- symbols %in% c("B","BB","BBB")#计算中奖金额if (same){payouts <- c("DD" = 100,"7" = 80,"BBB" = 40,"BB" = 25,"B" = 10, "C"=10,"0" = 0)prize <- unname(payouts[symbols[1]])}else if(all(bars)){prize <- 5}else{cherries <- sum(symbols == "C")prize <- c(0,2,5)[cherries + 1]}#根据钻石个数调整中奖金额diamonds <- sum(symbols == "DD")prize * 2^ diamonds
}
get_symbols <- function(){wheel <- c("DD","7","BBB","BB","B","C","0")sample(wheel, size = 3,replace =TRUE,prob = 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函数将所写的程序包装成函数。

R语言之R程序(老虎机)相关推荐

  1. R语言数据科学程序包:Tidyverse介绍

    R语言数据科学程序包:Tidyverse介绍 1. R语言简介 2. 数据科学简介 3. Tidyverse简介 1. R语言简介 R语言是用于统计计算和绘图的免费软件.它可以在Windows, Un ...

  2. 一起学习R语言吧——R语言+RStudio

    一起学习R语言吧--R语言+RStudio 一.下载R 二.安装 RStudio 一.下载R 1.R语言官网下载 点击https://www.r-project.org/,进入官网后,点击downlo ...

  3. linux设置r语言环境,R语言 环境设置

    尝试在线环境 你真的不需要设置自己的环境来开始学习R编程语言. 原因很简单,我们已经在线设置了R编程环境,以便您可以在进行理论工作的同时在线编译和执行所有可用的示例. 这给你对你正在阅读的信心,并用不 ...

  4. 零基础自学R语言 1 R语言介绍 1.5 RStudio软件

    零基础自学R语言 文章目录 零基础自学R语言 1 R语言介绍 1.5 RStudio软件 1.5.1 介绍 1.5.2 项目 1.5.3 帮助 1.5.4 使用技巧 1.5.4.1 使用历史命令 1. ...

  5. R语言1——R的安装和相关介绍

    R语言1--R的安装和相关介绍 目录 R语言1--R的安装和相关介绍 1.R语言和Rstudio的安装 2.R语言的基本介绍 2.1 hello world! 2.2 R中的变量 2.3输入输出 2. ...

  6. R语言|数据类型————R语言入门到入土系列(一)

    本系列将从R语言的基本入门到R语言实战系列,逐步编写R语言的教程. R语言数据类型 R语言的赋值与输出 R语言的数据类型 数据类型的查看 数据类型的转换 R语言的赋值与输出 R语言赋值语法如下: 赋值 ...

  7. R语言---下载R包提示00LOCK-dplyr解决

    R语言-下载R包提示00LOCK-dplyr解决 1.遇到问题(R版本3.5.1) 在使用其他软件的时候会调用R包dplyr,当时提示这个软件包版本不够,会影响其他软件的使用.因此需要升级这个R包,当 ...

  8. 零基础自学R语言 1 R语言介绍 1.4 基本R软件的用法

    零基础自学R语言 文章目录 零基础自学R语言 1 R语言介绍 1.4 基本R软件的用法 1.4.1 基本运行 1.4.2 项目目录 1 R语言介绍 1.4 基本R软件的用法 1.4.1 基本运行 在M ...

  9. 零基础自学R语言 1 R语言介绍 1.3 R扩展软件包的安装与管理

    零基础自学R语言 文章目录 零基础自学R语言 1 R语言介绍 1.3 R扩展软件包的安装与管理 1.3.1 扩展包使用 1.3.2 安装 1.3.3 Github和BioConductor的扩展包 1 ...

  10. R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型、分类预测器(分类变量)被自动替换为一组虚拟编码变量、summary函数查看检查模型、使用table函数计算混淆矩阵评估分类模型性能

    R语言使用R基础安装中的glm函数构建乳腺癌二分类预测逻辑回归模型(Logistic regression).分类预测器(分类变量)被自动替换为一组虚拟编码变量.summary函数查看检查模型.使用t ...

最新文章

  1. linux网站目录大小写,Linux服务器url区分大小写如何解决
  2. JS难点剖析-原型原型链
  3. HTML5 拖拽的简单实践
  4. Windows Server 2008之三设置TCP/IP
  5. 施密特出售Google股票套现3.27亿美元
  6. 【前端统计图】echarts改变颜色属性的demo
  7. VS Code 1.38 发布!
  8. #3864. Hero meet devil dp套dp + 状压 + 状态机
  9. oracle数据库字段的值加一_天天面试--数据库乐观锁和悲观锁
  10. mysql查阅建立的库_mysql 怎么查看创建的数据库和表
  11. 三维重建_彩色图和深度图转点云文件、ply和pcd相互转换、点云合并
  12. linux服务器选择u盘启动,【服务器运维】linux怎样以u盘启动
  13. dex2jar源码解析----smail转dex
  14. Eplan P8 API二次开发--插入符号(Symbol)功能(Function)并定义属性
  15. 微信红包最多能发多少钱?微信红包200元上限解除
  16. 《软件随想录-Joel on Software》书摘
  17. 去除摩尔纹,治愈强迫症, 来卷网盘赛
  18. STM32F4的DMA
  19. python高并发编程_python 并发编程
  20. 企业上市IPO的必要条件

热门文章

  1. 要知道宇宙有多少星球,比数清地球上的沙子数量还要困难!
  2. java aes ctr_AES CBC和CTR加解密实例
  3. ESP32 LVGL8.1 ——Style local style 样式当地的风格 (Style 11)
  4. MindMapper中各类模板的运用方法
  5. 如何用PS做出一张海报
  6. Hadoop学习笔记(一)
  7. MySQL数据库实验五 触发器和存储过程
  8. 淘宝天猫店铺商品API,店铺商品分类接口代码对接教程
  9. 英文诗歌 学习 月是故乡明
  10. 把款软件可以测试双显卡,以进步之名! APU双显卡的混交测试