轨道
/
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,根据糕点类型和数量计算订单的费用:

  • 羊角面包:每个 3 枚金币
  • 松饼:每个 2 枚金币
  • 曲奇:每个 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,全部免费。