Menu
Coddy logo textTech

Получение пользовательского ввода

Часть раздела Основы путешествия по R на Coddy. Урок 34 из 78.

challenge icon

Задание

Легко

На предыдущем уроке вы создали приветственное сообщение для Bill Split Calculator. Теперь добавьте функциональность для получения пользовательского ввода для расчёта счёта.

После существующего приветственного сообщения считайте от пользователя три значения:

  1. Общая сумма счёта
  2. Процент чаевых (целое число, например, 15 для 15%)
  3. Количество людей, между которыми делится счёт

В 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"): открывает стандартный поток ввода для чтения и сохраняет его в con
  • readLines(con, n = 1): считывает ровно одну строку из этого соединения. Примечание: readLines() отличается от readline(): readLines() работает с файловыми соединениями (включая stdin) и может считывать несколько строк одновременно с помощью n =, тогда как readline() работает только в интерактивном режиме в консоли R
  • suppressWarnings(...): скрывает безвредные предупреждения, которые появляются при таком чтении из 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")

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор R