Menu
Coddy logo textTech

Сопоставление диапазонов

Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 3 из 66.

Когда вам нужно проверить, попадает ли значение в определённый диапазон чисел, написание отдельных ветвей для каждого отдельного значения было бы утомительным. Выражение match в Rust поддерживает паттерны диапазонов, которые позволяют сопоставлять значение с непрерывным интервалом значений, используя синтаксис start..=end.

Оператор ..= создает включающий диапазон, что означает, что и начальное, и конечное значения включаются в сопоставление. Вот как можно использовать диапазоны в ветках match:

let temp = 20;

match temp {
    30..=50 => println!("Hot"),
    10..=29 => println!("Warm"),
    _ => println!("Cold"),
}

В этом примере температура 20 будет соответствовать диапазону 10..=29 и выведет "Warm". Диапазон 30..=50 включает как 30, так и 50, поэтому температура ровно 30 или 50 приведет к результату "Hot".

challenge icon

Задание

Легко

Вы получите возраст в качестве входных данных. Прочитайте входные данные, преобразуйте их в целое число и используйте выражение match с паттернами диапазонов, чтобы вывести соответствующую возрастную категорию.

Требования:

  • Если возраст 0..=12, выведите "Child"
  • Если возраст 13..=19, выведите "Teenager"
  • Если возраст 20..=64, выведите "Adult"
  • Если возраст 65..=120, выведите "Senior"
  • Для любого другого возраста выведите "Invalid age"

Входные данные: Одно целое число, представляющее возраст

Выходные данные: Выведите возрастную категорию: "Child", "Teenager", "Adult", "Senior" или "Invalid age"

Шпаргалка

Шаблоны диапазонов в выражениях match позволяют сопоставлять значение с непрерывным отрезком значений, используя синтаксис start..=end, где ..= создаёт включающий диапазон (включаются как начальное, так и конечное значения).

let score = 85;

match score {
    90..=100 => println!("Grade: A"),
    80..=89 => println!("Grade: B"),
    70..=79 => println!("Grade: C"),
    60..=69 => println!("Grade: D"),
    _ => println!("Grade: F"),
}

В этом примере значение 85 соответствует диапазону 80..=89 и выводит "Grade: B". Диапазон 90..=100 включает как 90, так и 100.

Попробуйте сами

use std::io;

fn main() {
    // Чтение ввода
    let mut input = String::new();
    io::stdin().read_line(&mut input).expect("Failed to read line");
    let age: i32 = input.trim().parse().expect("Please enter a valid number");
    
    // TODO: Напишите свой код ниже, используя выражение match с шаблонами диапазонов
    
    // Вывод результата
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Logic & Flow