Co kupić
Część sekcji Podstawy ścieżki R w Coddy. Lekcja 78 z 78.
Wyzwanie
ŁatwyUtwórz funkcję o nazwie what_to_buy, która przyjmuje dwa argumenty: budget (wartość numeryczną) i prices (wektor nazwany cenami produktów). Funkcja powinna zwracać wektor znakowy zawierający nazwy wszystkich produktów, których ceny są mniejsze lub równe budżetowi.
Jeśli nie stać Cię na żaden produkt, zwróć pusty wektor znakowy za pomocą character(0).
Otrzymasz następujące dane wejściowe:
- Kwotę budżetu (liczbę)
- Rozdzieloną przecinkami listę nazw produktów (np.
apple,banana,steak,bread) - Rozdzieloną przecinkami listę odpowiadających im cen (np.
2,1,15,3)
Przetwórz dane wejściowe, aby utworzyć wektor nazwany cenami, wywołaj swoją funkcję i wyświetl wynik. Użyj print(), aby wyświetlić zwrócony wektor znakowy.
Na przykład, jeśli dane wejściowe to:
5
apple,banana,steak,bread
2,1,15,3Wynik powinien być następujący:
[1] "apple" "banana" "bread"Jeśli dane wejściowe to:
10
laptop,phone,tablet
999,599,399Wynik powinien być następujący:
character(0)Podpowiedzi:
- Użyj
strsplit(input, ",")[[1]], aby podzielić ciągi rozdzielone przecinkami na wektory - Użyj
as.numeric(), aby przekonwertować ciągi z cenami na liczby - Użyj
names(prices) <- item_names, aby utworzyć wektor nazwany - Użyj indeksowania logicznego z
names(), aby wyodrębnić nazwy produktów, na które Cię stać
Spróbuj swoich sił
# Odczytaj dane wejściowe
con <- file("stdin", "r")
budget <- as.numeric(suppressWarnings(readLines(con, n = 1)))
item_names_input <- suppressWarnings(readLines(con, n = 1))
prices_input <- suppressWarnings(readLines(con, n = 1))
close(con)
# Przetwórz dane wejściowe
item_names <- strsplit(item_names_input, ",")[[1]]
price_values <- as.numeric(strsplit(prices_input, ",")[[1]])
# Utwórz wektor cen z nazwami
prices <- price_values
names(prices) <- item_names
# TODO: Napisz poniżej funkcję what_to_buy
# Funkcja powinna przyjmować budget i prices jako argumenty
# i zwracać wektor znakowy z nazwami produktów, na które wystarcza budżet
# Wywołaj funkcję i wyświetl wynik
result <- what_to_buy(budget, prices)
print(result)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