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")

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