获取用户输入
本课属于 Coddy R 学习旅程的“基础知识”单元。第 34 课,共 78 课。
挑战
简单在上一课中,你为账单分摊计算器创建了欢迎消息。现在,添加收集用户输入以进行账单计算的功能。
在现有的欢迎消息之后,读取用户输入的三项内容:
- 账单总金额
- 小费百分比(整数,例如,
15表示 15%) - 分摊账单的人数
在非交互式运行的 R 脚本中(例如在这个平台上),输入会从标准输入流中读取。要读取输入,先使用 file() 打开与 stdin 的连接,然后使用 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读取时出现的无害警告。在脚本中从stdin读取时,即使一切正常,R 有时也会发出类似 "incomplete final line" 的警告。用suppressWarnings()包裹调用可以隐藏这些消息,避免它们干扰输出。它不会影响读取的值as.numeric(...):将文本输入转换为数字close(con):读取完所有输入后关闭连接
将这三个值存储在名为 bill、tip_percent 和 people 的变量中。
读取输入后,按以下格式显示确认消息,说明输入的内容:
Bill: $[bill]
Tip: [tip_percent]%
People: [people]所有输出都使用 cat(),并在需要的地方加入换行符 \n。在每次调用 cat() 时使用 sep = "",以避免出现多余的空格。
默认情况下,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 在线编译器