組裝線

組裝線

學習練習

簡介

數字

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,全部免費。