R语言-laohuji
项目三-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的更多相关文章
- R语言作为BI中ETL的工具
R语言作为BI中ETL的工具,增删改 R语言提供了强大的R_package与各种数据库进行数据交互. 外加其强大数据变换清洗函数,为ETL提供一条方便快捷的道路. RODBC ROracal RMys ...
- R语言环境安装与基本使用
R语言安装包可以从这个地址选择合适的URL去下载:https://cran.r-project.org/mirrors.html,这里使用这个https://mirrors.tuna.tsinghua ...
- R语言绘制空间热力图
先上图 R语言的REmap包拥有非常强大的空间热力图以及空间迁移图功能,里面内置了国内外诸多城市坐标数据,使用起来方便快捷. 开始 首先安装相关包 install_packages("dev ...
- [R]R语言中的%>%和%.%
最近在网上看R的代码,常常看到 x %>% y 的写法. 样子看着像是pipe的用法,搜了一下, 没找到语法的相关说明. 今天突然开窍,想着 %>% 可能不是语言本身支持的语法,可能是某个 ...
- .Net调用R语言
///加载自己写的R语言算法库 public List<double> GetZTFB(double[] data) { List<double> par = new List ...
- 用R语言的quantreg包进行分位数回归
什么是分位数回归 分位数回归(Quantile Regression)是计量经济学的研究前沿方向之一,它利用解释变量的多个分位数(例如四分位.十分位.百分位等)来得到被解释变量的条件分布的相应的分位数 ...
- R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...
- R语言-处理异常值或报错的三个示例
博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html Tuesday, March 31, 2015 之前用rvest帮人写了一个定期抓取amazon ...
- R语言爬虫初尝试-基于RVEST包学习
注意:这文章是2月份写的,拉勾网早改版了,代码已经失效了,大家意思意思就好,主要看代码的使用方法吧.. 最近一直在用且有维护的另一个爬虫是KINDLE 特价书爬虫,blog地址见此: http://w ...
随机推荐
- ES6-Proxy,代理
proxy 代理 Es6 增强 对象和函数(方法) Proxy用于修改某些操作的默认行为,即对编程语言层面进行修改,属于“元编程”, Proxy意思为“代理”,即在访问对象之前建立一道“拦截”,任 ...
- HTTP与FILE协议的区别
File协议 file协议(本地文件传输协议)主要是用来访问本地计算机的文件,一般用Windows的资源管理器直接打开进行读取一个HTML文件时,默认会使用file协议 基本格式是: file:/// ...
- grep的使用及正则表达式
1.常用选项: -E :开启扩展(Extend)的正则表达式. -i :忽略大小写(ignore case). -v :反过来(invert),只打印没有匹配的,而匹配的反而不打印. -n :显示行号 ...
- 如何在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 ...
- Python+Unittest+Requests+PyMysql+HTMLReport 接口自动化框架
整体框架使用的是:Python+Unittest+Requests+PyMysql+HTMLReport 多线程并发模式 主要依赖模块 Unittest.Requests.PyMysql.HTMLR ...
- 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 ...
- JVM基础回顾记录(二):垃圾收集
垃圾收集流程&HotSpot对该流程的实现方式 上一篇介绍了jvm的内存模型,本篇将介绍虚拟机中最为复杂的一部分:垃圾收集,本篇会从垃圾回收前的准备工作到后面的收集阶段的方式以及HotSpot ...
- 《Web Development with Go》Middleware之共享数据
这个库值得学, 好像写起来越来越溜 package main import ( "fmt" "log" "net/http" //" ...
- Vue+Vuex初体验
首先: 安装vuex npm install vuex -S 需要有两个组件(HelloWord.vue 和 HelloDemo.vue)[组件自定义] 注册路由 注册store 测试 一.需要有两个 ...
- Object-defineProperty ES5
Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象. Object.defineProperty(obj, prop, ...


