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"
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%。你有两个任务。
实现 AssemblyLine#production_rate_per_hour 方法,计算装配线每小时的产量,并考虑其成功率。
注意,返回的值是 Float 的实例。
AssemblyLine.new(6).production_rate_per_hour
#=> 1193.4
实现 AssemblyLine#working_items_per_minute 方法,计算每分钟生产多少完成且可用的汽车。
注意,返回的值是 Integer 的实例。
AssemblyLine.new(6).working_items_per_minute
#=> 19