repeat et break
Fait partie de la section Logique et flux d’exécution du Journey R de Coddy. Leçon 49 sur 64.
repeat exécute son corps encore et encore jusqu’à ce qu’un break à l’intérieur arrête la boucle. Il convient à une boucle dont la condition de sortie n’est connue qu’au milieu du corps :
n <- 1
repeat {
n <- n * 2
if (n > 50) break
}
print(n)Sortie :
[1] 64La suite de Collatz en est un exemple : diviser les nombres pairs par deux, transformer les nombres impairs en 3n + 1, et s’arrêter à 1. Le nombre d’étapes n’est pas connu à l’avance :
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)Sortie :
[1] 8next ignore le reste de l’itération actuelle et commence la suivante. Il fonctionne dans les boucles repeat, while et for :
for (x in 1:8) {
if (x %% 3 == 0) next
cat(x, "")
}
cat("\n")Sortie :
1 2 4 5 7 8 Une boucle repeat sans break accessible ne se termine jamais. Conservez un compteur comme limite de sécurité lorsque la sortie dépend des données :
total <- 0
tries <- 0
repeat {
tries <- tries + 1
total <- total + tries
if (total >= 20 || tries == 100) break
}
print(c(tries, total))Sortie :
[1] 6 21Défi
FacileComplétez digital_root(n). Remplacez n par la somme de ses chiffres jusqu’à ce qu’il ne reste plus qu’un chiffre, et renvoyez <result> after <steps> steps : 9875 donne 2 after 3 steps (9875, 29, 11, 2). Un nombre qui ne comporte déjà qu’un chiffre nécessite 0 étape.
sum(as.numeric(strsplit(as.character(n), "")[[1]])) additionne les chiffres de n.
Le code fourni lit n et affiche la valeur renvoyée.
Essayez vous-même
digital_root <- function(n) {
# Écrivez votre code ici
""
}
# Code d'entrée/sortie fourni : gardez-le tel quel
input <- suppressWarnings(readLines(file("stdin")))
cat(digital_root(as.numeric(input[1])), sep = "\n")
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et flux d’exécution
1Les chaînes en profondeur
Sous-chaînes avec substr()Mise en forme avec sprintf()Scinder et joindreRechercher dans les chaînesRemplacer du texteRécapitulatif - Créateur de nom d'utilisateur4Matrices
Créer des matricesIndexer des matricesRécapitulatifs des lignes et des colonnesArithmétique matricielleRécapitulatif - Plan de salle7La famille Apply
lapply et sapplyMap et mapplyFilter et FindReduceRécapitulatif - Pipeline de données10Structures de contrôle avancées
La fonction switch()ifelse() vectorisérepeat et breakFonctions récursivesRécapitulatif – Classificateur de notes2Recherches par clé-valeur
Recherches dans des vecteurs nommésVérifier les clésAjouter et supprimer des clésParcourir les nomsRécapitulatif - Bureau des stocks5Projet - Carnet de notes
Ajouter des élèvesEnregistrer les notes3Ensembles et comptage
Valeurs uniquesOpérations sur les ensemblesTests d’appartenanceCompter avec table()Récapitulatif - Invités à l’événement6Les fonctions comme valeurs
Fonctions anonymesPasser des fonctionsRetourner des fonctionsFermetures avec étatRécapitulatif - Règles de remise9Data Frames
Créer des Data FramesColonnes et lignesFiltrer les lignesAjouter et trierRécapitulatif - Rapport des ventes12Projet - Suivi des dépenses
Enregistrer les dépensesDépenses totalesEntraînez-vous par vous-même : Compilateur R en ligne