项目三-tiger机

说明:每玩一次老ji游戏需要花费一元钱。钻石符号(DD)可以百搭,并且能够将最终的金额加倍。

任务分解:

任务分解的步骤:
将复杂的任务分解为一些简单的子任务;
使用实例;
用通俗的语言描述解决方案,然后将其转换成R代码。
任务分解的种类:有序步骤和同类情况
老虎JI程序任务的初步分解

生成符号组合:

#生成符号组合
get_symbols<-function(){
wheel<-c("DD","","BBB","BB",
"B","C","")
sample(wheel,size = 3,replace = T,
prob = c(0.03,0.03,0.06,0.1,
0.25,0.01,0.52))
}
get_symbols()

显示符号组合

#显示符号组合
print("hello \nworld")
cat("hello \nworld")
print(get_symbols())

#分支语句

>
> #if、ifelse、switch
> #if:主要处理单个的逻辑条件
> #如果一个数值小于0,取他的绝对值
> qz<-function(x){
+ if(x<0){
+ abs(x)
+ -x
+ }
+ }
> qz(-9)
[1] 9
> #如果一个数值大于0,返回1,如果小于0,
> #返回-1,如果等于0,返回0
> jc<-function(x){
+ if(x>0){
+ return(1)
+ }else if(x<0){
+ return(-1)
+ }else{
+ return(0)
+ }
+ }
> jc(9)
[1] 1
> jc(-9)
[1] -1
> jc(0)
[1] 0
> jc1<-function(x){
+ if(x>0) 1 else if(x<0)-1 else 0
+ }
> jc1(9)
[1] 1
> jc1(-9)
[1] -1
> jc1(0)
[1] 0
> dj<-function(x){
+ if(x>=90){
+ "A"
+ }else if(x>=80){
+ "B"
+ }else if(x>=70){
+ "C"
+ }else if(x>=60){
+ "D"
+ }else "F"
+ }
> dj(60)
[1] "D"
> dj(50)
[1] "F"

ifelse:可以处理一个向量

> #ifelse:可以处理一个向量
> jc2<-function(x){
+ ifelse(x>0,1,-1)
+ }
> jc2(c(3,-7))
[1] 1 -1
> #练习:如果x>0,返回x本身,
> #如果x<0,取它的绝对值
> jc3<-function(x){
+ ifelse(x>0,x,abs(x))
+ }
> jc3(c(3,-3))
[1] 3 3
> abs(-3:3)
[1] 3 2 1 0 1 2 3
> #如果一个数值大于5,就返回5,
> #如果-5到5之间,保持本身不变
> #如果小于-5,返回-5
> jc4<-function(x){
+ ifelse(x>5,5,ifelse(x>=-5,x,-5))
+ }
> jc4(-2)
[1] -2

#pmax、pmin

pmax(c(3,8,9),c(1,9,7))
[1] 3 9 9
> pmin(c(3,8,9),c(1,9,7))
[1] 1 8 7
> jc5<-function(x){
+ pmax(-5,pmin(5,x))
+ }
> jc5<-function(x){
+ pmin(5,pmax(-5,x))
+ }
> jc5(c(-3,6))
[1] -3 5

switch

#switch:针对一个数字或者一个字符串来选择性的
#执行某些语句
switch(1,"x","y")
switch(2,"x","y")
switch(3,"x","y")
switch("a",a=1,b=2)
switch("c",a=1,b=2)
switch("c",a=1,b=2,3)
switch("d",a=1,b=2,3)

switchf<-function(x){
switch(x,
a=1:3,
b=list(x=0,y=1),
c={
cat("你选择了c\n")
list(name="c",value="haha")
})
}
switchf("a")
switchf("b")
switchf("c")

#循环:for、while、repeat

#for循环
#语法结构:
for (variable in vector) {
expr
}
for (i in 1:3) {
cat("当前的i值为",i,"\n")
}
i
for (i in c("你","hao")) {
cat("当前的i值为",i,"\n")
}
#打印每个元素的长度和类
nk<-list(a=c(1,2,1),b=letters[1:4])
for (i in nk) {
cat("i的长度:",length(i),"\nclass:",class(i),"\n")
}
#求1到100的和
sum(1:100)
s<-0
for (i in 1:100) {
s<-s+i
}
s

#管理for循环:break、next

#管理for循环:break、next
#break:终止循环
#1到5,遇到3时终止,打印1和2
for (i in 1:5) {
if(i==3) break
cat("message:",i,"\n")
}
#1000到1100,满足的条件是i的平方除以11的余数
#与i的3次方除以17的余数相同,取出i的值
#取余数:%%
9%%4
for (i in 1100:1000) {
if((i^2)%%11==(i^3)%%17){
cat(i,"\n")
break
}
} #next:跳过本次循环
#1到5,跳过3,打印1,2,4,5
for (i in 1:5) {
if(i==3) next
cat("message:",i,"\n")
}

#while循环

#语法结构
while(cond){
expr
}
#当x<=5时,打印x的值
x<-0
while (x<=5) {
cat(x,"\n")
x<-x+1
}
#x从0开始,自增加1,当x=2时,执行下一次
#循环,当x=4时,终止循环
x<-0
repeat{
x<-x+1
if(x==2) next
else if(x==4) break
else cat(x,"\n")
}

计算中奖金额

#第一种情况:三个符号都相同
#7 7 7
symbol<-rep("",3)
#第一种方法
symbol[1]==symbol[2]&symbol[2]==symbol[3]
#第二种方法
unique(symbol)
length(unique(symbol))==1
#第三种方法
all(symbol==symbol[1]) #3个相同情况下: 第一种方式
if (all(symbol==symbol[1])) {
if(symbol[1]=="DD") prize<-100
else if(symbol[1]=="") prize<-80
else if(symbol[1]=="BBB") prize<-40
else if(symbol[1]=="BB") prize<-25
else if(symbol[1]=="B") prize<-10
else if(symbol[1]=="C") prize<-10
else prize<-0
}
prize #第二种方式:
switch(symbol[1],"DD"=100,""=80,"BBB"=40,
"BB"=25,"B"=10,"C"=10,""=0) #第三种方式 查找表的方式
if (all(symbol==symbol[1])) {
payout<-c("DD"=100,""=80,"BBB"=40,
"BB"=25,"B"=10,"C"=10,""=0)
prize<-unname(payout[symbol[1]])
}
prize
# 去掉名称unname
unname(payout[symbol[1]])
payout[[symbol[1]]]

第二种情况:全是杠

#第二种情况:全是杠
#B BB B
symbol<-c("B","BB","BBB")
all(c("","BB","BBB") %in% c("B","BB","BBB"))
if (all(symbol==symbol[1])) {
payout<-c("DD"=100,""=80,"BBB"=40,
"BB"=25,"B"=10,"C"=10,""=0)
prize<-unname(payout[symbol[1]])
}else if(all(symbol %in% c("B","BB","BBB"))){
prize<-5
}

第三种情况:计算樱桃的数量

symbol<-c("C","BB","BBB")
sum(symbol=="C")
if (all(symbol==symbol[1])) {
payout<-c("DD"=100,""=80,"BBB"=40,
"BB"=25,"B"=10,"C"=10,""=0)
prize<-unname(payout[symbol[1]])
}else if(all(symbol %in% c("B","BB","BBB"))){
prize<-5
}else {
yt<-sum(symbol=="C")
prize<-c(0,2,5)[yt+1]
} if(yt==0){
prize<-0
}else if(yt==1){
prize<-2
}else if(yt==2){
prize<-5
}
prize

R语言-laohuji的更多相关文章

  1. R语言作为BI中ETL的工具

    R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...

  2. R语言环境安装与基本使用

    R语言安装包可以从这个地址选择合适的URL去下载:https://cran.r-project.org/mirrors.html,这里使用这个https://mirrors.tuna.tsinghua ...

  3. R语言绘制空间热力图

    先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...

  4. [R]R语言中的%>%和%.%

    最近在网上看R的代码,常常看到 x %>% y 的写法. 样子看着像是pipe的用法,搜了一下, 没找到语法的相关说明. 今天突然开窍,想着 %>% 可能不是语言本身支持的语法,可能是某个 ...

  5. .Net调用R语言

    ///加载自己写的R语言算法库 public List<double> GetZTFB(double[] data) { List<double> par = new List ...

  6. 用R语言的quantreg包进行分位数回归

    什么是分位数回归 分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位.十分位.百分位等)来得到被解释变量的条件分布的相应的分位数 ...

  7. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  8. R语言-处理异常值或报错的三个示例

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Tuesday, March 31, 2015 之前用rvest帮人写了一个定期抓取amazon ...

  9. R语言爬虫初尝试-基于RVEST包学习

    注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...

随机推荐

  1. ES6-Proxy,代理

    proxy 代理 Es6 增强 对象和函数(方法)   Proxy用于修改某些操作的默认行为,即对编程语言层面进行修改,属于“元编程”, Proxy意思为“代理”,即在访问对象之前建立一道“拦截”,任 ...

  2. HTTP与FILE协议的区别

    File协议 file协议(本地文件传输协议)主要是用来访问本地计算机的文件,一般用Windows的资源管理器直接打开进行读取一个HTML文件时,默认会使用file协议 基本格式是: file:/// ...

  3. grep的使用及正则表达式

    1.常用选项: -E :开启扩展(Extend)的正则表达式. -i :忽略大小写(ignore case). -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印. -n :显示行号 ...

  4. 如何在Oracle 12C中Drop/Truncate多个分区 (Doc ID 1482264.1)

    How to Drop/Truncate Multiple Partitions in Oracle 12C (Doc ID 1482264.1) APPLIES TO: Oracle Databas ...

  5. Python+Unittest+Requests+PyMysql+HTMLReport 接口自动化框架

    整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport  多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLR ...

  6. September 15th, 2019. Sunday, Week 38th.

    Break down these walls and come on in. 一路披荆斩棘,勇往直前. We are the only wall that stands in our way to s ...

  7. JVM基础回顾记录(二):垃圾收集

    垃圾收集流程&HotSpot对该流程的实现方式 上一篇介绍了jvm的内存模型,本篇将介绍虚拟机中最为复杂的一部分:垃圾收集,本篇会从垃圾回收前的准备工作到后面的收集阶段的方式以及HotSpot ...

  8. 《Web Development with Go》Middleware之共享数据

    这个库值得学, 好像写起来越来越溜 package main import ( "fmt" "log" "net/http" //" ...

  9. Vue+Vuex初体验

    首先: 安装vuex npm install vuex -S 需要有两个组件(HelloWord.vue 和 HelloDemo.vue)[组件自定义] 注册路由 注册store 测试 一.需要有两个 ...

  10. Object-defineProperty ES5

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. Object.defineProperty(obj, prop, ...