项目三-tiger机

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

 

任务分解:

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

生成符号组合:

#生成符号组合
get_symbols<-function(){
  wheel<-c("DD","7","BBB","BB",
           "B","C","0")
  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("7",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]=="7") 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,"7"=80,"BBB"=40,
       "BB"=25,"B"=10,"C"=10,"0"=0)

#第三种方式 查找表的方式
if (all(symbol==symbol[1])) {
  payout<-c("DD"=100,"7"=80,"BBB"=40,
            "BB"=25,"B"=10,"C"=10,"0"=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("7","BB","BBB") %in% c("B","BB","BBB"))
if (all(symbol==symbol[1])) {
  payout<-c("DD"=100,"7"=80,"BBB"=40,
            "BB"=25,"B"=10,"C"=10,"0"=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,"7"=80,"BBB"=40,
            "BB"=25,"B"=10,"C"=10,"0"=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

posted on 2019-12-19 20:44  foremost  阅读(587)  评论(0编辑  收藏  举报