學習軌道
/
Cairo
Cairo
/
練習
/
烘焙坊訂單系統
烘焙坊訂單系統

烘焙坊訂單系統

學習練習

簡介

Cairo 中的控制流程讓你根據條件與重複來控制程式的執行路徑。

條件式執行

使用if運算式,根據條件來執行程式碼:

let number = 42;
if number > 0 {
    println!("Positive number");
} else if number < 0 {
    println!("Negative number");  
} else {
    println!("Zero");
}

if是運算式,因此可以回傳值:

let result = if condition { 5 } else { 10 };

迴圈

使用loop重複執行程式碼。 迴圈會一直執行下去,除非你把它停下來;當條件成立時,用break離開迴圈吧。

let mut counter = 0;
loop {
    if counter == 5 {
        break;
    }
    println!("Counter: {}", counter);
    counter += 1;
}

迴圈可以透過break回傳值:

let result = loop {
    counter += 1;
    if counter == 10 {
        break counter * 2; // Returns 20
    }
};

使用continue跳到下一次疊代:

let mut i = 0;
loop {
    i += 1;
    if i % 2 == 0 {
        continue; // Skip even numbers
    }
    if i > 10 {
        break;
    }
    println!("{}", i); // Only prints odd numbers
}

說明

在這個練習中,你將使用 Cairo 的控制流程結構,協助管理一間小烘焙坊的日常營運。

1. 計算訂單總額

實作calculate_total,根據糕點種類和數量計算一筆訂單的費用:

  • Croissant:每個 3 枚硬幣
  • Muffin:每個 2 枚硬幣
  • Cookie:每個 1 枚硬幣
calculate_total(Pastry::Croissant, 4) // Returns: 12 (4 * 3)
calculate_total(Pastry::Cookie, 10)   // Returns: 10 (10 * 1)

2. 套用大量訂購折扣

實作apply_discount,根據訂單總額套用折扣。 先將折扣百分比套用到總額,再無條件捨去,取最接近的整數硬幣(floor)。

  • 訂單 ≥ 20 枚硬幣:折扣 10%
  • 訂單 ≥ 10 枚硬幣:折扣 5%
  • 訂單 < 10 枚硬幣:沒有折扣
apply_discount(25) // Returns: 22
apply_discount(15) // Returns: 14
apply_discount(8)  // Returns: 8

3. 建立烘焙排程

實作baking_schedule,建立每日的烘焙計畫。 烘焙坊每小時以 5 筆訂單為一批進行烘焙:

baking_schedule(18) // Returns: [5, 5, 5, 3] (3 full batches + 3 remaining)
baking_schedule(10) // Returns: [5, 5] (2 full batches)
baking_schedule(3)  // Returns: [3] (1 partial batch)

使用適當的控制流程結構(if/else、loop)來有效率地解決每個問題。

透過 GitHub 編輯 連結會在新視窗或分頁中開啟
Cairo Exercism

準備好開始 烘焙坊訂單系統 了嗎?

註冊 Exercism,透過 25 個概念68 個練習 和真人引導來學習並精通 Cairo,全部免費。