Break
Часть раздела Основы путешествия по R на Coddy. Урок 40 из 78.
Иногда нужно выйти из цикла досрочно, before он завершит все свои итерации. Инструкция break позволяет немедленно остановить цикл, когда выполняется определённое условие.
for (i in 1:10) {
if (i == 5) {
break
}
print(i)
}Вывод:
[1] 1
[1] 2
[1] 3
[1] 4Цикл был настроен на выполнение от 1 до 10, но когда i достигло 5, оператор break полностью остановил loop. Обрати внимание, что 5 никогда не выводилось, потому что break немедленно завершает выполнение.
Это особенно полезно с циклами while при поиске чего-либо:
num <- 1
while (TRUE) {
if (num * num > 20) {
break
}
num <- num + 1
}
print(num)Вывод:
[1] 5Здесь while (TRUE) обычно выполнялся бы бесконечно, но break останавливает его, как только мы находим первое число, квадрат которого превышает 20. Этот шаблон часто используется, когда нужно выполнять поиск, пока не будет выполнено условие.
Задание
ЛегкоПрочитайте number limit из input. Используйте цикл for, чтобы выполнить итерацию от 1 до limit, но остановите loop досрочно с помощью break, когда встретите первый number, который divisible both 3 и 7.
Выводите каждый number перед проверкой condition. Когда вы find number, который divisible both 3 и 7, выведите этот number, затем выйдите из loop.
После того как loop ended, выведите "Loop ended" с помощью print().
Например, если input равен 30, output должен быть таким:
[1] 1
[1] 2
[1] 3
[1] 4
[1] 5
[1] 6
[1] 7
[1] 8
[1] 9
[1] 10
[1] 11
[1] 12
[1] 13
[1] 14
[1] 15
[1] 16
[1] 17
[1] 18
[1] 19
[1] 20
[1] 21
[1] "Loop ended"Loop останавливается на 21, потому что это первый number, который divisible both 3 и 7 (21 = 3 × 7).
Попробуйте сами
# Прочитать ввод
con <- file("stdin", "r")
limit <- as.integer(suppressWarnings(readLines(con, n = 1)))
# TODO: Напишите ваш код ниже
# Используйте цикл for от 1 до limit
# Выводите каждое число перед проверкой условия
# Прервите цикл, когда найдёте число, делимое и на 3, и на 7
# Hint: Используйте оператор %% для проверки делимости
# Выведите "Loop ended" после цикла
print("Loop ended")В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы. Часть 2
Логические операторы (AND, OR)Логические операторы. Часть 2 (NOT)Повторение: простая логикаВекторизованная логика. Часть 1Векторизованная логика. Часть 27Калькулятор разделения счета
Приветственное сообщениеПолучение пользовательского ввода13Векторы: продвинутый уровень
Срезы и индексация векторовЛогическая индексацияАрифметика и ресайклинг векторовОператор %in%2Переменные и типы данных
Числовой тип данныхЦелочисленный тип данныхСимвольный тип данныхЛогический тип данныхПроверка типов данныхПравила именованияПропущенные значения: NAИтоги — создание переменных5Принятие решений
Оператор ifКонструкция if - elseПовторение: Простой калькуляторВложенные конструкции if - else8Циклы
Цикл ForЦикл WhileBreakNext (Continue)Повторение: ФакториалГенерация последовательностей (seq, :)Вложенные циклыПовторение: Динамический ввод3Операторы. Часть 1
Арифметические операторыЦелочисленное деление и остаток от деленияОператоры присваиванияПовторение: простая математикаОператоры сравнения6Основы ввода-вывода
Вывод через printКоманда cat для выводаВывод с переменнымиЧтение ввода через readline()Основы преобразования типовПовторение — Калькулятор возрастаПовторение — Истина или ложь9Функции
Объявление функцииАргументы функцииВозвращаемые значенияПовторение — функция SigmaПовторение — функция валидацииЗначения параметров по умолчанию12Итерация по последовательностям
Итерация по элементам вектораИспользование seq_along()Итерация по символам (strsplit)Функции для работы со строкамиПотренируйтесь самостоятельно: Онлайн-компилятор R