Rubyrush: Практические задания на закрепление условных операторов

Ruby для новичков [Rubyrush]

Вчера прошёл урок про условные операторы и теперь добрался до практических шагов — там не сложные задания с числами. По ходу выполнения были небольшие сложности, из-за плохих знаний по математике, но интернет помог в них разобраться и всё прошёл.

Первое задание: Вывести большее из чисел

Тут было просто. Я перечитал вчерашний конспект по условным операторам, прибавил свой опыт прохождения другого курса по Ruby от Hexlet и написал вот такую программку:

# encoding: utf-8
num1 = 321
num2 = 321

if 
  # если первое число больше второго:
  num1 > num2
  puts "Наибольшее число:" + num1.to_s
elsif
# если они равны
num1 == num2
puts "Числа равны!"
else
puts "Наибольшее число:" + num2.to_s
end

После чего я подсмотрел решение, предложенное авторами курса и оно было длинней, потому что они не использовали в нем else, что вполне логично. Они же не рассказывали про него в уроке. Они пишут три варианта условий и в каждом из вариантов задают одно единственное условие. При таком варианте написания программы else вообще не нужен. Прикольно и понятно. Но программа получается довольно длинной:

# Если первое число (a) больше второго (b), выводим a
if a > b
  puts 'Наибольшее число: ' + a.to_s
end

# Если второе число (b) больше первого (a), выводим b
if b > a
  puts 'Наибольшее число: ' + b.to_s
end

# Если числа равны, так и пишем
if b == a
  puts 'Оба числа равны'
end

Ну и в итоге, так как мой вариант был более короткий и понятный — решил оставить его. Он мне больше нравится 🙂

Второе задание: Среднее арифметическое двух чисел

Среднее арифметическое чисел — это сумма чисел, делённая на их количество. Судя по тому что мы получаем на выходе, это некое среднее значение этих чисел.

После того как я выяснил что это за зверь такой, смог без проблем выполнить и второе задание под номером шаг №5. Вот моё решение:

# encoding: utf-8

num1 = 54
num2 = 31
average = (num1 + num2) / 2

puts "Первое число: " + num1.to_s
puts "Второе число: " + num2.to_s
puts "Среднее арифметическое: " + average.to_s

Третье задание: Четное ли число?

Пришлось погуглить что такое оператор %.

Модуль – делит левый операнд на правый и возвращает остаток. Проще говоря возвращает остаток от деления. Получается что бы проверить является ли число чётным, нужно разделить его на 2. Если получится 0 значит число было чётным, в остальных случаях число нечётное.

Вот какую программу я написал:

num = 5407312541
check = num % 2

if
  check == 0
  puts "Число чётное!"
else
  puts "АХТУНГ, ребята! Число #{num.to_s} не чётное!"
end

В целом все прекрасно работает. В дополнение к заданию я добавил в решение новую фишку — Маркер. Он позволяет подставлять в строку значение переменной. Подстановка значения переменной называется интерполяцией. Мне изначально понравилось слово и я его запомнил. Вся эта магия напоминает мне работу шаблонизатора в вёрстке сайтов (шаблоны на PHP, когда мы сохраняем шапку и подвал сайта в отдельных файлах, а потом подключаем их на страничке при помощи функции include() ).

После того как я выполнил задание, посмотрел как сделано решение в образце:

# Заводим переменную с числом
a = 14920

# Выводим это число
puts a

# Выводим пустую строку для красоты просто вызвав puts без параметров
puts

# Вычисляем остаток от деления на два методом %,
# если остаток от деления равен нулю - число делится на 2
if a % 2 == 0
  puts 'Число четное'
else
  puts 'Число нечетное'
end

Их решение более понятное. Но я решил что оставлю свой вариант, так как он интереснее. Жаль что я пока не умею тестировать программы и не всегда уверен в том, что моё решение надёжное и не начнёт сыпаться в нестандартной ситуации. Но думаю что попозже и этому научат.

Задание четвёртое: Сегодня выходной?

Это уже интересней. В условиях задания и подсказке говорится что нужно нагуглить и придумать как использовать найденную информацию для решения поставленной задачи.

Нужно найти информацию про класс Time существующий в языке Ruby и используя его метод now решить задачку.

Класс Time представляет даты и время. Можно работать с любым временем в рамках от 1970 года и до 2038 года.

моё решение задачки выглядит вот так:

# Определяем какой сейчас день недели
my_day = Time.now
# проверяем что возвращается
puts my_day

# из полученного значения достаём день недели. 0 = воскресенье, 1 - понедельник и так далее
week_day = my_day.wday
# проверяем что возвращается
puts week_day

# Пишем условие
if week_day == 0
  puts "Ура! Сегодня ВОСКРЕСЕНЬЕ. Выходной, но завтра рано вставать, поэтому не сиди долго за компом!"
elsif
  week_day == 1
  puts "Сегодня ПОННЕДЕЛЬНИК - рабочий день. Давай поработаем как следует, что бы потом смогли классно отдохнуть"
elsif
  week_day == 2
  puts "Сегодня ВТОРНИК - рабочий день. Давай поработаем как следует, что бы потом смогли классно отдохнуть"
elsif
  week_day == 3
  puts "Сегодня СРЕДА - рабочий день. Давай поработаем как следует, что бы потом смогли классно отдохнуть"
elsif
  week_day == 4
  puts "Сегодня ЧЕТВЕРГ - рабочий день. Давай поработаем как следует, что бы потом смогли классно отдохнуть"
elsif
  week_day == 5
  puts "Сегодня ПЯТНИЦА - рабочий день. Давай поработаем как следует, что бы потом смогли классно отдохнуть"
elsif
  week_day == 6
  puts "Ура! Сегодня СУББОТОНЬКА. Выходной день. Можно выспаться и поиграть в комп."
end

Я немного расширил задачу и вывел разные варианты сообщений в зависимости от дня недели.

Пример решения выглядел немного иначе. Интересно то, что ребята в решении использовали логический оператор ИЛИ ||. Их решение выглядит вот так:

# Записываем текущее время в переменную time
time = Time.now

# Получаем текущий день недели, вызывая у объекта в переменной time метод wday
week_day = time.wday

# Проверяем номер дня недели (дни нумеруются с нулевого, при этом первый день
# недели - воскресенье, а последний, 6-й - суббота)
if week_day == 0 || week_day == 6
  puts 'Сегодня выходной!'
else
  puts 'Сегодня будний день, за работу!'
end

В целом они прописали условие, в результате выполнения которого мы говорим о выходном. В условии два возможных варианта — 0 и 6. Ну а остальное думаю вам и так понятно из кода.

Так как я хочу что бы у меня выводилось название дня недели — решил оставить свой вариант и не переделывать его. Пусть оно длинней, но зато содержательней ответ.

В завершении дня

Rubyrush: Практические задания на закрепление условных операторов
Статистика прохождения курса «Путь Rubyrush».

Я прошёл четыре практических шага в курсе Путь Rubyrush. По итогу их прохождения попрактиковался в написании не сложных программ, которые решают поставленные задачи. Теперь я знаю что для того что бы задавать разные варианты работы программы нужно использовать оператор if, а для того что бы узнать какой сейчас день недели существует специальный класс Time со своими методами.

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

Было интересно. Завтра продолжу прохождение курса. Исходники с моими вариантами решений задачек я публикую на своём аккаунте на Github.

Обзорное видео по теме урока

Юрий Ронин