Nhận đầu vào từ người dùng
Thuộc phần Kiến thức nền tảng trong hành trình R của Coddy. Bài học 34 trên 78.
Thử thách
DễTrong bài học trước, bạn đã tạo lời chào cho Máy tính chia hóa đơn. Bây giờ, hãy thêm chức năng nhận đầu vào của người dùng để tính hóa đơn.
Sau lời chào hiện có, hãy đọc ba đầu vào từ người dùng:
- Tổng số tiền hóa đơn
- Phần trăm tiền boa (dưới dạng số nguyên, ví dụ:
15tương ứng với 15%) - Số người cùng chia hóa đơn
Trong các tập lệnh R chạy không tương tác (như trên nền tảng này), đầu vào được đọc từ luồng đầu vào tiêu chuẩn. Để làm việc này, trước tiên hãy mở kết nối đến stdin bằng file(), sau đó đọc từng dòng bằng readLines() và đóng kết nối khi hoàn tất:
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)Chức năng của từng phần như sau:
file("stdin", "r"): mở luồng đầu vào tiêu chuẩn để đọc và lưu luồng đó vàoconreadLines(con, n = 1): đọc chính xác một dòng từ kết nối đó. Lưu ý:readLines()khác vớireadline():readLines()hoạt động với các kết nối tệp (bao gồm cảstdin) và có thể đọc nhiều dòng cùng lúc bằng cách dùngn =, cònreadline()chỉ hoạt động tương tác trong bảng điều khiển RsuppressWarnings(...): ẩn các cảnh báo không gây hại xuất hiện khi đọc từstdintheo cách này. Khi R đọc từstdintrong một tập lệnh, đôi khi R tạo cảnh báo như "incomplete final line" dù mọi thứ vẫn hoạt động chính xác. Bọc lời gọi bằngsuppressWarnings()sẽ ẩn những thông báo này để chúng không làm rối đầu ra. Việc này không ảnh hưởng đến các giá trị được đọcas.numeric(...): chuyển đổi đầu vào dạng văn bản thành một sốclose(con): đóng kết nối sau khi đọc tất cả đầu vào
Lưu ba giá trị vào các biến có tên bill, tip_percent và people.
Sau khi đọc các đầu vào, hãy hiển thị thông báo xác nhận cho biết những gì đã được nhập theo định dạng sau:
Bill: $[bill]
Tip: [tip_percent]%
People: [people]Dùng cat() cho tất cả đầu ra và thêm ký tự xuống dòng \n ở những chỗ cần thiết. Dùng sep = "" trong mỗi lời gọi cat() để tránh khoảng trắng không mong muốn.
Theo mặc định, cat() chèn một khoảng trắng giữa mỗi mục được in ra. Ví dụ:
cat("Bill: $", 120, "\n") # prints: Bill: $ 120 Lưu ý các khoảng trắng không mong muốn giữa $ và 120, cũng như trước ký tự xuống dòng. Thêm sep = "" sẽ yêu cầu cat() dùng chuỗi rỗng làm dấu phân cách, vì vậy không có gì được chèn giữa các mục:
cat("Bill: $", 120, "\n", sep = "") # prints: Bill: $120Áp dụng cách này cho cả ba dòng xác nhận:
cat("Bill: $", bill, "\n", sep = "")
cat("Tip: ", tip_percent, "%\n", sep = "")
cat("People: ", people, "\n", sep = "")Ví dụ, nếu các đầu vào là 120, 18 và 4, đầu ra đầy đủ sẽ là:
Welcome to the Bill Split Calculator!
Let's split your bill fairly.
Bill: $120
Tip: 18%
People: 4Tự làm thử
# 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")Tất cả bài học trong Kiến thức nền tảng
4Toán tử phần 2
Toán tử logic (AND, OR)Toán tử logic phần 2 (NOT)Ôn tập: logic đơn giảnLogic vector hóa phần 1Logic vector hóa phần 27Máy tính chia hóa đơn
Thông báo chào mừngNhận đầu vào từ người dùng2Biến và kiểu dữ liệu
Kiểu dữ liệu sốKiểu dữ liệu số nguyênKiểu dữ liệu ký tựKiểu dữ liệu logicKiểm tra kiểu dữ liệuQuy tắc đặt tênGiá trị thiếu: NATóm tắt: tạo biến8Vòng lặp
Vòng lặp forVòng lặp whileBreakNext (continue)Ôn tập: giai thừaTạo dãy (seq, :)Vòng lặp lồng nhauÔn tập: đầu vào động3Toán tử phần 1
Toán tử số họcPhép chia lấy phần nguyên và phép moduloToán tử gánÔn tập: phép tính đơn giảnToán tử so sánh6Nhập xuất cơ bản
In đầu raDùng cat để in đầu raĐầu ra với biếnĐọc đầu vào bằng readline()Cơ bản về chuyển đổi kiểuÔn tập: máy tính tuổiÔn tập: đúng hay sai9Hàm
Khai báo hàmĐối số hàmGiá trị trả vềÔn tập: hàm SigmaÔn tập: hàm xác thựcGiá trị tham số mặc địnhTự luyện tập: Trình biên dịch R online