R语言-laohuji
作者:互联网
项目三-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
标签:语言,laohuji,cat,break,switch,循环,ifelse,else 来源: https://www.cnblogs.com/foremostxl/p/12051183.html