Справка
Телеграм чат начинающих программистов. Общаемся и помогаем друг другу
Если ссылка не открывается, можно найти нас в поиске по чатам @rubyrush
или
пойти другим путем
В этом уроке мы научимся вводить данные в программу из консоли и напишем небольшую текстовую игру с использованием полученных ранее знаний.
gets
, получение данных от пользователя через консольif
и команды gets
написать простенькую текстовую игру-квест «Прогулка в Южном Бутово»Мы уже знакомы с командой puts
, которая выводит строку на экран (put string):
puts "Привет, я строка, меня вывели на экран!"
У этой команды есть друг, команда gets
, которая «берёт строку» (get string) и кладёт её в переменную, которой мы хотим присвоить значение строки, введённой пользователем во время выполнения программы:
my_string = gets
Если выполнить программу, состоящую из одной только этой строчки, то программа сразу после запуска будет ждать, пока пользователь наберёт какие-то символы и после набора нажмёт клавишу Ввод (Enter).
После нажатия Enter
все эти символы (вместе со специальным символом перевода строки \n
, который обозначает нажатую клавишу Enter
) попадут в переменную my_string
.
Продемонстрируем на примере: как обычно мы создадим в рабочей директории c:\rubytut
папку lesson5
и напишем в ней программу, которая спрашивает у пользователя, как его зовут:
puts "Привет! Как тебя зовут?"
name = gets
puts "Привет, " + name + ", как дела?"
Не забудьте сохранить ваш файл в кодировке UTF-8
, в Sublime это делается с помощью пунктов меню: "File" → "Save with Encoding" → "UTF-8".
Программа gets.rb
выводит на экран приветствие и ждёт, пока пользователь введёт своё имя и потом нажмёт Enter, после этого программа здоровается с пользователем, назвав его по имени (тому самому, что он только что ввёл) и спрашивает, как у него дела. :)
Для того, чтобы склеить строку из нескольких строк мы используем оператор +
- он работает очень просто:
puts "а" + "б"
Выведет на экран аб
.
puts "а" + " и " + "б"
Выведет на экран а и б
. Ну, вы поняли.
В Windows строка будет передана в программу из консоли в кодировке Windows и в программе может возникнуть ошибка, вы увидите абракадабру или что похуже.
Потому что мы работаем в кодировке UTF-8
, к результату работы (строке, полученной от пользователя) мы с помощью точки применим метод encode("UTF-8")
.
Также мы уберём из результата, полученного gets
, последний символ — перенос строки (\n = Enter). Для этого мы используем метод chomp
. Подробнее о методе chomp.
Получится вот так:
puts "Привет! Как тебя зовут?"
name = gets.encode("UTF-8").chomp
puts "Привет, " + name + ", как дела?"
Текст готовой программы вы можете посмотреть здесь, а ниже мы объясним по шагам, что в ней происходит.
puts "Вы решили прогуляться в Южном Бутово и наткнулись на спортивных ребят
1. Попытаться убежать
2. Продолжать идти"
choice = gets.chomp
if choice == "1"
abort "Ребя без труда догнали вас и побили. Не знаю, за что"
else
puts "Один из ребят вышел вперёд и спросил \"Сиги есть?\"
1. Дать прикурить
2. -- Не курю"
choice = gets.chomp
if choice == "1"
abort "Прикурив, ребята отправились дальше"
else
abort "Ребята расстроились и побили вас. Теперь уже ясно, за что"
end
end
Сначала мы выводим вводную строку на экран, чтобы познакомить пользователя с происходящим.
puts "Вы решили прогуляться в Южном Бутово и наткнулись на спортивных ребят
1. Попытаться убежать
2. Продолжать идти"
Сразу после этого (прямо той же строкой) мы выводим пользователю пронумерованные варианты ответов. Мы хотим, чтобы он ввёл только цифру — номер выбранного варианта.
С помощью оператора gets
мы ждём от пользователя ввода строки, которая, если пользователь всё понял правильно, будет состоять из одного символа - номера выбранного варианта. Мы сохраняем выбранный вариант во временную переменную choice
.
choice = gets.chomp
Потом мы с помощью оператора if-else
сравниваем выбранный вариант со строкой ('1'
или '2'
) и в этом случае показываем пользователю другую строку, связанную с выбранным вариантом.
if choice == "1"
В этой ветви можно абсолютно аналогично спросить у пользователя, какой вариант он выберет, сохранить его в переменную choice
и снова развить сюжет с помощью if-else
.
Как видите if
можно вкладывать внутрь другого if
сколько угодно раз.
Если в какой-то момент повествование дошло до своей кульминации и нам нужно его прекратить, сказав пользователю последнюю строку, то мы делаем это с помощью команды abort
:
abort "Ну вот и всё!"
puts "Меня нет"
Эта команда, как и puts
, выведет на экран строку, которую ей передали, а потом немедленно закончит выполнение программы. Следующую строку 'Меня нет'
мы на экране уже не увидим.
Итак, в этом уроке мы научились пользоваться командой gets
, а также командами encode
, chomp
и abort
.
И применили в деле оператор if-else
, написав простой текстовый квест.
В материалах к уроку вы найдете более сложную версию игрушки «Прогулка в Южном Бутово». Обязательно сыграйте в нее и изучите исходник.
А в следующем уроке мы узнаем, что такое массивы, зачем они нужны и почему их так любят программисты.
Также мы подробнее расскажем вам о том, как выполняется программа.