Pobieranie danych od użytkownika
Część sekcji Podstawy ścieżki R w Coddy. Lekcja 34 z 78.
Wyzwanie
ŁatwyW 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:
- Całkowitą kwotę rachunku
- Procent napiwku (jako liczbę całkowitą, np.
15oznacza 15%) - 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 wconreadLines(con, n = 1): odczytuje dokładnie jeden wiersz z tego połączenia. Uwaga:readLines()różni się odreadline():readLines()działa z połączeniami plikowymi (w tym zstdin) i może odczytać wiele wierszy naraz przy użyciun =, natomiastreadline()działa tylko interaktywnie w konsoli RsuppressWarnings(...): wycisza niegroźne ostrzeżenia pojawiające się podczas odczytu ze strumieniastdinw ten sposób. Gdy R odczytuje dane ze strumieniastdinw 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ścias.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: $120Zastosuj 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: 4Spró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
4Operatory, część 2
Operatory logiczne (AND, OR)Operatory logiczne, część 2 (NOT)Powtórka — prosta logikaLogika wektoryzowana, część 1Logika wektoryzowana, część 27Kalkulator podziału rachunku
Wiadomość powitalnaPobieranie danych od użytkownika10FizzBuzz z niespodzianką
Omówienie gryFunkcja FizzBuzz2Zmienne i typy danych
Liczbowy typ danychCałkowity typ danychZnakowy typ danychLogiczny typ danychSprawdzanie typów danychKonwencje nazewnictwaBrakujące wartości: NAPodsumowanie – tworzenie zmiennych8Pętle
Pętla forPętla whilePrzerwijNastępna iteracja (continue)Powtórka — silniaGenerowanie sekwencji (seq, :)Pętle zagnieżdżonePowtórka — dynamiczne wprowadzanie danych3Operatory, część 1
Operatory arytmetyczneDzielenie całkowite i moduloOperatory przypisaniaPowtórka — prosta matematykaOperatory porównania6Podstawowe wejście/wyjście
Wyświetlanie danychCat jako wyjścieWyjście z użyciem zmiennychOdczyt danych wejściowych za pomocą readline()Podstawy konwersji typówPowtórka — kalkulator wiekuPowtórka — prawda czy fałsz9Funkcje
Deklarowanie funkcjiArgumenty funkcjiWartości zwracanePowtórzenie — funkcja SigmaPowtórzenie — funkcja walidującaDomyślne wartości parametrówPoćwicz samodzielnie: Kompilator R online