repeat i break
Część sekcji Logika i przepływ sterowania ścieżki R w Coddy. Lekcja 49 z 64.
repeat uruchamia swoje ciało raz za razem, aż instrukcja break znajdująca się wewnątrz go zatrzyma. Nadaje się do pętli, której warunek zakończenia jest znany dopiero w trakcie wykonywania ciała:
n <- 1
repeat {
n <- n * 2
if (n > 50) break
}
print(n)Wynik:
[1] 64Przykładem jest ciąg Collatza: dziel liczby parzyste przez dwa, zamieniaj nieparzyste na 3n + 1 i zatrzymaj się na 1. Liczba kroków nie jest znana z góry:
n <- 6
steps <- 0
repeat {
if (n == 1) break
n <- if (n %% 2 == 0) n / 2 else 3 * n + 1
steps <- steps + 1
}
print(steps)Wynik:
[1] 8next pomija resztę bieżącej iteracji i rozpoczyna następną. Działa w pętlach repeat, while i for:
for (x in 1:8) {
if (x %% 3 == 0) next
cat(x, "")
}
cat("\n")Wynik:
1 2 4 5 7 8 Pętla repeat bez osiągalnego break nigdy się nie kończy. Użyj licznika jako limitu bezpieczeństwa, gdy wyjście zależy od danych:
total <- 0
tries <- 0
repeat {
tries <- tries + 1
total <- total + tries
if (total >= 20 || tries == 100) break
}
print(c(tries, total))Wynik:
[1] 6 21Wyzwanie
ŁatwyUzupełnij digital_root(n). Zastępuj n sumą jego cyfr, aż pozostanie jedna cyfra, i zwróć <result> after <steps> steps: 9875 daje 2 after 3 steps (9875, 29, 11, 2). Liczba, która już ma jedną cyfrę, wymaga 0 kroków.
sum(as.numeric(strsplit(as.character(n), "")[[1]])) sumuje cyfry liczby n.
Dostarczony kod odczytuje n i wypisuje zwróconą wartość.
Spróbuj swoich sił
digital_root <- function(n) {
# Wpisz tutaj swój kod
""
}
# Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
input <- suppressWarnings(readLines(file("stdin")))
cat(digital_root(as.numeric(input[1])), sep = "\n")
Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ sterowania
1Łańcuchy znaków w szczegółach
Podciągi za pomocą substr()Formatowanie za pomocą sprintf()Dzielenie i łączenieWyszukiwanie w łańcuchach znakówZastępowanie tekstuPowtórka – kreator nazwy użytkownika4Macierze
Tworzenie macierzyIndeksowanie macierzyPodsumowania wierszy i kolumnDziałania na macierzachPowtórka – plan miejsc10Zaawansowane sterowanie przepływem
Funkcja switch()Wektorowe ifelse()repeat i breakFunkcje rekurencyjnePodsumowanie — klasyfikator ocen2Wyszukiwanie wartości po kluczach
Wyszukiwanie nazwanych elementów wektoraSprawdzanie kluczyDodawanie i usuwanie kluczyIterowanie po nazwachPowtórzenie — giełda5Projekt — dziennik ocen
Dodawanie uczniówZapisywanie ocen3Zbiory i zliczanie
Unikalne wartościOperacje na zbiorachTesty przynależnościZliczanie za pomocą table()Podsumowanie — goście wydarzenia6Funkcje jako wartości
Funkcje anonimowePrzekazywanie funkcjiZwracanie funkcjiDomknięcia ze stanemPowtórka — reguły rabatowe9Ramki danych
Tworzenie ramek danychKolumny i wierszeFiltrowanie wierszyDodawanie i sortowaniePodsumowanie – raport sprzedaży12Projekt – śledzenie wydatków
Rejestrowanie wydatkówŁączne wydatkiPoćwicz samodzielnie: Kompilator R online