Курс языка программирования Raku / Основы / Проверка условий / Упражнения / Високосный год

Решение: Високосный год

Предупреждение

Целью решения, представленного ниже, является тренировка использования логических проверок. В реальной жизни вы можете изучить методы встроенного класса Date. Вы познакомимся с ними во второй части этого курса.

Решение

Алгоритм определения високосного года:

  1. Если год не делится на 4 => обычный год;
  2. Если год не делится на 100 => високосный год;
  3. Если год не делится на 400 => обычный год;
  4. Иначе => високосный год.

Вы можете использовать встроенные типы для работы с датой и временем, поэтому мы вернемся к этой проблеме во второй части этого курса.

Код 1

Первое решение буквально воспроизводит шаги выше:

my $year = prompt 'Year: ';

if $year % 4 {
    say 'Common year';
}
elsif $year % 100 {
    say 'Leap year';
}
elsif $year % 400 {
    say 'Common year';
}
else {
    say 'Leap year';
}

🦋 Вы можете найти исходный код в файле leap-year.raku.

Код 2

Во втором решении логика упакована в одно выражение. Скобки не всегда обязательны, но мы добавили их здесь для ясности:

my $year = prompt 'Year: ';

say (($year %% 400) || (($year %% 4) && ($year % 100))) ?? 'Leap year' !! 'Common year';

🦋 Вы можете найти исходный код в файле leap-year-formula.raku.

Вывод

Попробуйте обе программы с самыми крайними случаями, например: 1900, 2000, 2020, 2021.

$ raku exercises/conditional-checks/leap-year.raku
Year: 1900
Common year

$ raku exercises/conditional-checks/leap-year.raku
Year: 2000
Leap year
$ raku exercises/conditional-checks/leap-year-formula.raku
Year: 2020
Leap year

$ raku exercises/conditional-checks/leap-year-formula.raku
Year: 2021
Common year

%% и %

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

say ?(100 % 3);    # True
say 100 % 3 != 0;  # True

say ?(100 %% 3);   # False
say 100 %% 3 != 0; # Flase

Навигация по курсу

Блоки кода / Локальные переменные   |   Циклы

Эта страница переведена с английского человеком. Оригинальный текст на английском языке. О переводе.

Переводы этой страницы: EnglishDeutschEspañolItalianoLatviešuNederlandsБългарскиРусскийУкраїнська