轨道
/
Ruby
Ruby
/
练习
/
流水线
流水线

流水线

学习练习

简介

数字

Ruby 中最常见的两种数字类型是:

  • **整数:**小数点后没有数字的数字(即整数)。例如 -6、0、1、25、976 和 500000。
  • **浮点数:**小数点后有一位或多位数字的数字。例如 -2.4、0.1、3.14、16.984025 和 1024.0。

它们是通过 Integer 和 Float 类实现的。

这些类都带有方法,可以把值从一种类型转换为另一种类型。Integer 数字精确到整数单位,而 Float 则具有小数精度:

  • Integer#to_f:转换为新的浮点数
  • Float#ceil:向上舍入到最接近的整数
  • Float#floor:向下舍入到最接近的整数
  • Float#round:舍入到最接近的整数
  • Float#to_i:截断到最接近的整数

条件判断

Ruby 中有所谓的流程控制表达式,它们用来控制程序的运行方式,并且会接受一个真值或假值。 有一些运算符可以用来生成真值或假值,它们被称为比较运算符。

主要有两种控制表达式,用来控制哪些代码会运行、哪些不会运行,也就是决定会执行哪个分支。

这两种分别是:if 和 unless 表达式。

比较运算符

比较运算符用于比较值,并返回 true 或 false。 以下运算符要求被比较的两个值类型相同。 如果两个值的类型不同,编译器就会抛出错误。 下面是这些运算符的列表,以及它们返回 true 时的示例:

方法 说明 示例
< 小于 4 < 5
<= 小于或等于 4 <= 4
> 大于 3 > 1
>= 大于或等于 2 >= 2

与上述运算符不同,相等和不等运算符可以用来比较任何类型的值。 == 运算符用于检查两个值是否相等,这包括检查值的类型。 != 的工作方式相同,但如果两个值不相等,它会返回 true,相等则返回 false。 下面是相等和不等运算符的列表,以及它们返回 true 时的示例:

方法 说明 示例
== 相等 4 == 4
!= 不等 5 != 4

if 语句

if 语句用于判断给定的条件是“真值”还是“假值”。 如果条件为真值,if 语句内部的代码就会运行。 if 语句以 end 关键字结尾。

value = 1
if value == 1
  "1 is equal to 1"
end
# => "1 is equal to 1"

if value > 2
  "1 is greater than 2"
end
# => nil

unless 语句

unless 语句的工作方式与 if 语句非常相似,但当条件为假值时,它会运行 unless 语句内部的代码。

value = 1
unless value == 1
  "1 is not equal to 1"
end
# => nil

unless value > 2
  "1 is not greater than 2"
end
# => "1 is not greater than 2"

else 语句

else 语句可以与 if 语句一起使用。 如果 if 分支没有执行,就会执行 else 语句。

value = 1
if value == 1
  "1 is equal to 1"
else
  "1 is not equal to 1"
end
# => "1 is equal to 1"

“级联 if”语句

elsif 语句可以与 if 语句一起使用。 如果 if 分支没有执行,并且 elsif 语句的条件为真值,就会执行 elsif 语句。 elsif 语句可以串联起来,第一个为真值的条件将会被执行。 if 语句末尾还可以有一个 else 语句,如果前面的语句都不为真,它就会运行。

value = 1
if value != 1
  "1 is not equal to 1"
elsif value > 2
  "1 is greater than 2"
else
  "1 is not equal to 1 and 1 is not greater than 2"
end
# => "1 is not equal to 1 and 1 is not greater than 2"

说明

在本练习中,你将编写代码来分析汽车工厂里装配线的生产情况。 装配线的速度可以从 0(关闭)到 10(最大)。

在最慢的速度(1)下,每小时生产 221 辆汽车。 产量随速度线性增长。 因此当速度设为 4 时,每小时应生产 4 * 221 = 884 辆汽车。 不过,速度越高,生产出有缺陷汽车的可能性就越大,这些汽车随后必须被丢弃。 下表显示了速度如何影响成功率:

  • 1 到 4:成功率 100%。
  • 5 到 8:成功率 90%。
  • 9:成功率 80%。
  • 10:成功率 77%。

你有两个任务。

1. 计算每小时的产量

实现 AssemblyLine#production_rate_per_hour 方法,计算装配线每小时的产量,并考虑其成功率。 注意,返回的值是 Float 的实例。

AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4

2. 计算每分钟生产的可用汽车数量

实现 AssemblyLine#working_items_per_minute 方法,计算每分钟生产多少完成且可用的汽车。 注意,返回的值是 Integer 的实例。

AssemblyLine.new(6).working_items_per_minute
#=> 19
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Ruby Exercism

准备好开始 流水线 了吗?

注册 Exercism,借助 21 个概念121 个练习 和真人导师指导,学习并掌握 Ruby,全部免费。