Menu
Coddy logo textTech

Pobieranie danych od użytkownika

Część sekcji Podstawy ścieżki R w Coddy. Lekcja 34 z 78.

challenge icon

Wyzwanie

Łatwy

W poprzedniej lekcji utworzyłeś(-aś) wiadomość powitalną dla kalkulatora podziału rachunku. Teraz dodaj funkcjonalność pobierania danych od użytkownika potrzebnych do obliczenia podziału rachunku.

Po istniejącej wiadomości powitalnej odczytaj od użytkownika trzy dane:

  1. Całkowitą kwotę rachunku
  2. Procent napiwku (jako liczbę całkowitą, np. 15 oznacza 15%)
  3. Liczbę osób dzielących rachunek

W skryptach R uruchamianych nieinteraktywnie (tak jak na tej platformie) dane wejściowe odczytuje się ze standardowego strumienia wejściowego. Aby to zrobić, najpierw otwórz połączenie ze strumieniem stdin za pomocą file(), następnie odczytaj każdy wiersz za pomocą readLines() i zamknij połączenie po zakończeniu:

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)

Oto działanie poszczególnych elementów:

  • file("stdin", "r"): otwiera standardowy strumień wejściowy do odczytu i zapisuje go w con
  • readLines(con, n = 1): odczytuje dokładnie jeden wiersz z tego połączenia. Uwaga: readLines() różni się od readline(): readLines() działa z połączeniami plikowymi (w tym z stdin) i może odczytać wiele wierszy naraz przy użyciu n =, natomiast readline() działa tylko interaktywnie w konsoli R
  • suppressWarnings(...): wycisza niegroźne ostrzeżenia pojawiające się podczas odczytu ze strumienia stdin w ten sposób. Gdy R odczytuje dane ze strumienia stdin w skrypcie, czasami wyświetla ostrzeżenie takie jak "incomplete final line", nawet gdy wszystko działa poprawnie. Otoczenie wywołania funkcją suppressWarnings() ukrywa te komunikaty, dzięki czemu nie zaśmiecają one wyników. Nie wpływa to na odczytywane wartości
  • as.numeric(...): konwertuje dane tekstowe na liczbę
  • close(con): zamyka połączenie po odczytaniu wszystkich danych

Zapisz trzy wartości w zmiennych o nazwach bill, tip_percent i people.

Po odczytaniu danych wyświetl komunikat potwierdzający, pokazujący wprowadzone wartości w następującym formacie:

Bill: $[bill]
Tip: [tip_percent]%
People: [people]

Użyj cat() do wyświetlania wszystkich wyników i w razie potrzeby dodaj znaki nowego wiersza \n. Użyj sep = "" w każdym wywołaniu cat(), aby uniknąć niechcianych spacji.

Domyślnie cat() wstawia spację między każdym wyświetlanym elementem. Na przykład:

cat("Bill: $", 120, "\n")   # prints: Bill: $ 120 

Zwróć uwagę na niechciane spacje między $ a 120 oraz przed znakiem nowego wiersza. Dodanie sep = "" informuje cat(), aby zamiast tego używała pustego ciągu jako separatora, dzięki czemu nic nie zostanie wstawione między elementy:

cat("Bill: $", 120, "\n", sep = "")   # prints: Bill: $120

Zastosuj ten wzorzec do wszystkich trzech wierszy potwierdzenia:

cat("Bill: $", bill, "\n", sep = "")
cat("Tip: ", tip_percent, "%\n", sep = "")
cat("People: ", people, "\n", sep = "")

Na przykład, jeśli dane wejściowe to 120, 18 i 4, pełny wynik powinien wyglądać następująco:

Welcome to the Bill Split Calculator!
Let's split your bill fairly.
Bill: $120
Tip: 18%
People: 4

Spróbuj swoich sił

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

Wszystkie lekcje w sekcji Podstawy

Poćwicz samodzielnie: Kompilator R online