Получение пользовательского ввода
Часть раздела Основы путешествия по R на Coddy. Урок 34 из 78.
Задание
ЛегкоНа предыдущем уроке вы создали приветственное сообщение для Bill Split Calculator. Теперь добавьте функциональность для получения пользовательского ввода для расчёта счёта.
После существующего приветственного сообщения считайте от пользователя три значения:
- Общая сумма счёта
- Процент чаевых (целое число, например,
15для 15%) - Количество людей, между которыми делится счёт
В R-скриптах, которые выполняются неинтерактивно (как на этой платформе), ввод считывается из стандартного потока ввода. Для этого сначала откройте соединение с stdin с помощью file(), затем считайте каждую строку с помощью readLines() и после завершения закройте соединение:
con <- file("stdin", "r")
bill <- as.numeric(suppressWarnings(readLines(con, n = 1)))
tip_percent <- as.numeric(suppressWarnings(readLines(con, n = 1)))
people <- as.numeric(suppressWarnings(readLines(con, n = 1)))
close(con)Вот что делает каждая часть:
file("stdin", "r"): открывает стандартный поток ввода для чтения и сохраняет его вconreadLines(con, n = 1): считывает ровно одну строку из этого соединения. Примечание:readLines()отличается отreadline():readLines()работает с файловыми соединениями (включаяstdin) и может считывать несколько строк одновременно с помощьюn =, тогда какreadline()работает только в интерактивном режиме в консоли RsuppressWarnings(...): скрывает безвредные предупреждения, которые появляются при таком чтении изstdin. Когда R считывает данные изstdinв скрипте, иногда появляется предупреждение вроде "incomplete final line", даже если всё работает правильно. Обёртка вызова вsuppressWarnings()скрывает эти сообщения, чтобы они не загромождали вывод. Она не влияет на считываемые значенияas.numeric(...): преобразует текстовый ввод в числоclose(con): закрывает соединение после считывания всех значений
Сохраните три значения в переменных с именами bill, tip_percent и people.
После считывания значений отобразите сообщение-подтверждение, показывающее введённые данные, в следующем формате:
Bill: $[bill]
Tip: [tip_percent]%
People: [people]Используйте cat() для всего вывода и добавьте символы новой строки \n там, где это необходимо. Используйте sep = "" в каждом вызове cat(), чтобы избежать нежелательных пробелов.
По умолчанию cat() вставляет пробел между каждым выводимым элементом. Например:
cat("Bill: $", 120, "\n") # prints: Bill: $ 120 Обратите внимание на нежелательные пробелы между $ и 120, а также перед символом новой строки. Добавление sep = "" указывает cat() использовать в качестве разделителя пустую строку, поэтому между элементами ничего не вставляется:
cat("Bill: $", 120, "\n", sep = "") # prints: Bill: $120Примените этот шаблон ко всем трём строкам подтверждения:
cat("Bill: $", bill, "\n", sep = "")
cat("Tip: ", tip_percent, "%\n", sep = "")
cat("People: ", people, "\n", sep = "")Например, если введены значения 120, 18 и 4, полный вывод должен быть таким:
Welcome to the Bill Split Calculator!
Let's split your bill fairly.
Bill: $120
Tip: 18%
People: 4Попробуйте сами
# TODO: Write your code below
# Use cat() to display the welcome message
# Remember to use \n for new lines
cat("Welcome to the Bill Split Calculator!\nLet's split your bill fairly.\n")Все уроки раздела Основы
4Операторы. Часть 2
Логические операторы (AND, OR)Логические операторы. Часть 2 (NOT)Повторение: простая логикаВекторизованная логика. Часть 1Векторизованная логика. Часть 27Калькулятор разделения счета
Приветственное сообщениеПолучение пользовательского ввода13Векторы: продвинутый уровень
Срезы и индексация векторовЛогическая индексацияАрифметика и ресайклинг векторовОператор %in%2Переменные и типы данных
Числовой тип данныхЦелочисленный тип данныхСимвольный тип данныхЛогический тип данныхПроверка типов данныхПравила именованияПропущенные значения: NAИтоги — создание переменных5Принятие решений
Оператор ifКонструкция if - elseПовторение: Простой калькуляторВложенные конструкции if - else8Циклы
Цикл ForЦикл WhileBreakNext (Continue)Повторение: ФакториалГенерация последовательностей (seq, :)Вложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыЦелочисленное деление и остаток от деленияОператоры присваиванияПовторение: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод через printКоманда cat для выводаВывод с переменнымиЧтение ввода через readline()Основы преобразования типовПовторение — Калькулятор возрастаПовторение — Истина или ложь9Функции
Объявление функцииАргументы функцииВозвращаемые значенияПовторение — функция SigmaПовторение — функция валидацииЗначения параметров по умолчанию12Итерация по последовательностям
Итерация по элементам вектораИспользование seq_along()Итерация по символам (strsplit)Функции для работы со строкамиПотренируйтесь самостоятельно: Онлайн-компилятор R