repeat und break
Teil des Abschnitts Logik und Ablaufsteuerung der R-Journey von Coddy. Lektion 49 von 64.
repeat führt seinen Rumpf immer wieder aus, bis ein darin enthaltenes break die Schleife beendet. Es eignet sich für eine Schleife, deren Abbruchbedingung erst in der Mitte des Rumpfs bekannt ist:
n <- 1
repeat {
n <- n * 2
if (n > 50) break
}
print(n)Ausgabe:
[1] 64Die Collatz-Folge ist ein Beispiel: Halbiere gerade Zahlen, wandle ungerade Zahlen in 3n + 1 um und stoppe bei 1. Die Anzahl der Schritte ist nicht im Voraus bekannt:
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)Ausgabe:
[1] 8next überspringt den Rest der aktuellen Iteration und startet die nächste. Es funktioniert in repeat-, while- und for-Schleifen:
for (x in 1:8) {
if (x %% 3 == 0) next
cat(x, "")
}
cat("\n")Ausgabe:
1 2 4 5 7 8 Eine repeat-Schleife ohne ein erreichbares break endet nie. Verwende einen Zähler als Sicherheitsgrenze, wenn der Ausstieg von den Daten abhängt:
total <- 0
tries <- 0
repeat {
tries <- tries + 1
total <- total + tries
if (total >= 20 || tries == 100) break
}
print(c(tries, total))Ausgabe:
[1] 6 21Aufgabe
EinfachVervollständige digital_root(n). Ersetze n durch die Summe seiner Ziffern, bis eine Ziffer übrig bleibt, und gib <result> after <steps> steps zurück: 9875 ergibt 2 after 3 steps (9875, 29, 11, 2). Eine Zahl, die bereits aus einer Ziffer besteht, benötigt 0 Schritte.
sum(as.numeric(strsplit(as.character(n), "")[[1]])) addiert die Ziffern von n.
Der bereitgestellte Code liest n ein und gibt den zurückgegebenen Wert aus.
Probier es selbst
digital_root <- function(n) {
# Schreibe deinen Code hier
""
}
# Mitgelieferter Ein-/Ausgabe-Code: belasse ihn unverändert
input <- suppressWarnings(readLines(file("stdin")))
cat(digital_root(as.numeric(input[1])), sep = "\n")
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik und Ablaufsteuerung
1Strings im Detail
Teilstrings mit substr()Formatierung mit sprintf()Aufteilen und VerbindenStrings durchsuchenText ersetzenWiederholung – Benutzernamen-Generator4Matrizen
Matrizen erstellenMatrizen indizierenZusammenfassungen von Zeilen und SpaltenMatrizenarithmetikRückblick – Sitzplan10Fortgeschrittener Kontrollfluss
Die switch()-FunktionVektorisierter ifelse()repeat und breakRekursive FunktionenRückblick – Notenklassifizierung2Schlüssel-Wert-Suchen
Benannte Vektor-SuchenSchlüssel prüfenSchlüssel hinzufügen und entfernenNamen durchlaufenRückblick – Aktienübersicht5Projekt – Notenbuch
Schüler hinzufügenNoten eintragen3Mengen und Zählen
Eindeutige WerteMengenoperationenZugehörigkeitstestsZählen mit table()Rückblick – Gäste einer Veranstaltung6Funktionen als Werte
Anonyme FunktionenFunktionen übergebenFunktionen zurückgebenClosures mit ZustandRückblick – Rabattregeln9Datenrahmen
Datenrahmen erstellenSpalten und ZeilenZeilen filternHinzufügen und SortierenZusammenfassung – Verkaufsbericht12Projekt – Ausgaben-Tracker
Ausgaben erfassenGesamtausgabenÜbe selbstständig: Online-R-Compiler