项目三-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. Oracle 常用函数积累

    ①length 函数说明:计算字符串长度的函数 返回结果:数字 使用图解: ②lengthb 函数说明:计算字符串字节长度.在学习过程中,了解到还有一个 lengthb 函数.字节和字符的区别 返回结 ...

  2. Rsync实现文件的同步

    故事背景:我们公司是做新零售的,需要对发布的每台机器进行文件的同步更新,所以我这里做了一个小小的调研 技术调研:linux之间同步文件有两种方式rsync与scp. sync和scp在文件夹均不存在时 ...

  3. Docker运行dotnetcore

                    windows下安装docker 参考: https://www.jianshu.com/p/502b4ac536ef https://docs.docker.com/ ...

  4. 10.jenkins 按角色分配

    在实际的生产中,需要项目比较多.不同的用户需要对应 不同的项目工程 .这个时候,我们需要按角色给与权限. 要实现这个功能,需要一个插件来完成 . Role-based Authorization St ...

  5. C++ explicit关键字,修饰构造函数,ctor

    #include <iostream> // operator Type() 类型操作符重载 // operator int() // operator double() // ... / ...

  6. C语言程序设计100例之(23):数列求和

    例23  数列求和 问题描述 已知某数列前两项为2和3,其后继项根据前面最后两项的乘积,按下列规则生成: ① 若乘积为一位数,则该乘积即为数列的后继项: ② 若乘积为二位数,则该乘积的十位上的数字和个 ...

  7. 批量装机工具cobbler简介及其安装使用

    前言:如果仅有几台机器的话,使用U盘或者光盘装起来还不是很费事,一旦数量到了一定程度,使用手动方法就是一件费时费力的事,PXE+kistart就可以解决这个问题,降低难度,加快速度,而cobbler更 ...

  8. 第2次作业-titanic数据集练习

    一.读入titanic.xlsx文件,按照教材示例步骤,完成数据清洗. titanic数据集包含11个特征,分别是: Survived:0代表死亡,1代表存活Pclass:乘客所持票类,有三种值(1, ...

  9. 【朝花夕拾】Android自定义View篇之(七)Android事件分发机制(下)滑动冲突解决方案总结

    前言 转载请声明,转自[https://www.cnblogs.com/andy-songwei/p/11072989.html],谢谢! 前面两篇文章,花了很大篇幅讲解了Android的事件分发机制 ...

  10. 多进程操作-进程锁multiprocess.Lock的使用

    多进程操作-进程锁multiprocess.Lock的使用 ​ 通过之前的Process模块的学习,我们实现了并发编程,虽然更加充分地利用了IO资源,但是也有缺陷:当多个进程共用一份数据资源的时候,就 ...