The while and do-while Statements

The while and do-while Statements Английский

Назад в начало

Цикл while («пока») позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается после ключевого слова while и проверяется до выполнения тела цикла.

Цикл while используется, когда невозможно определить точное количество повторений цикла.

i # объявление переменной i для условия цикла

i: # ключевое слово ‘while’ и условие выполнение цикла

    # тело цикла

    (i) # вывод значения переменной i

    i # увеличение значения переменной i на единицу

0

1

2

3

4

Цикл while может быть бесконечным.

i

: # условие всегда истинно

    (i)

    i

Выполнение цикла можно прерывать с помощью оператора break.

i

: # условие всегда истинно

    i : # если i равно 3, то вызываем оператор break

         # оператор break прерывает выполнение цикла

    (i)

    i

Оператор continue начинает повторение цикла заново.

i

i:

    i

    i : # если значение i нечетно, то вызываем оператор continue

         # оператор continue начинает повторение цикла заново

    # в случае вызова continue код ниже не выполнится

    (i)

Как и для цикла for, для цикла while мы можем записать конструкцию else.

1

2

3

4

Цикл завершен

The while and do-while Statements

Сегодня разберём с вами не простой вопрос. Непростой, потому что здесь значение слова сразу же отражается на грамматике. Возьмёшь одно значение, надо употребить одно из времён Simple (простых), а с другим значением только Continuous (продолженное) возможен. Вот такая интересная тема сегодня. Ну а слова, которые мы рассмотрим, — это when и while.

Произношение и перевод:

в какой-то момент (1) или на протяжении какого-то другого действия (2)

I was busy you called me. — Я был занят, когда ты мне позвонил.

She was taking a bath they were watching TV. — Она принимала ванну, когда они смотрели телевизор.

Если when используется для связи двух частей предложения в одно целое и речь идёт о будущем времени, после when не используется будущее время, только настоящее (послк when не ставится will).

home, I will call you. — Когда я приду домой, я тебе позвоню.

When I will come — WRONG — неверно.

Ещё несколько примеров:

finish. — Скажи, когда закончишь.

to Brazil, he will swim in the ocean. — Когда он поедет в Бразилию, он искупается в океане.

показывает, что действие продолжалось в течение какого-то времени (подчёркивается процесс)

He was looking at her she was dancing. — Он смотрел на неё, пока она танцевала.

Mat lost his keys he was talking on the phone. — Мэт потерял ключи, когда говорил по телефону.

Так же, как и в случае с when, после while не употребляется будущее время. Заменяем на настоящее. Например:

I’ll look after your cat are having a rest. — Я присмотрю за вашей кошкой, пока вы будете отдыхать.

Эти слова в придаточных предложениях переводятся обычно одинаково. И все же между When и while разница в использовании существует. Давайте рассмотрим правильное употребление этих слов и примеры предложений с ними. Начнем мы с основных правил использования слова when, а затем перейдем к while.

When

When будет использоваться если:

My cat always purrs when I pet him. – Мой кот кот всегда мурлычет, когда я его глажу.

I’ll go on a vacation, when I get some money. – Я отправлюсь в отпуск, когда получу деньги.

I was watching a movie when you called me. – Я смотрел фильм, когда ты мне позвонил.

While

Означает “в то время как”, “до тех пор пока”. В предложениях, как и when, может переводиться «когда», также переводится как «пока».

He kept a video blog while he was travelling. – Он вел видео блог, пока он путешествовал.

I’ll read a book while I’m waiting for my turn to consult a doctor. – Я буду читать книгу, пока буду ждать своей очереди, чтобы проконсультироваться с врачом.

The delivery guy rang the doorbell while I was watching a movie. – Курьер звонил в дверь, пока я смотрела фильм.

Здесь мы указываем, что наше действие длилось дольше, чем действие курьера.

While Sam made tea, Denis made sandwiches. – Пока Сэм сделал чай, Дэнис сделал бутерброды.

Здесь указывается то, что бутерброды и чай были готовы в одно и то же время.

When, while – разница между этими словами весьма простая. Для начала ориентируйтесь на правила, приведенные выше, а со временем вы научитесь использовать их правильно практически интуитивно. Главное, как можно больше тренироваться и обращать внимание на эти слова в предложениях. Так, вы будете замечать оттенки этих слов из контекста и сами начнете употреблять их безошибочно.

Обучение с трудоустройством

Синтаксис цикла while выглядит так:

while ‹условие›:
‹тело цикла›

  • ‹условие› — логическое выражение, т.е. выражение, которое может быть
    истинным или ложным.
  • ‹тело цикла› — последовательность операторов с отступом

Если тело цикла состоит из одного оператора, то цикл, также как и if,
можно записать в одну строчку:

while ‹условие›: ‹тело цикла›

Но так лучше не писать из стилистических соображений.

Как он выполняется:

  • Вычисляется значение выражения ‹условие›.
  • Если условие ложное, цикл прерывается, ‹тело цикла› ни разу не выполняется.
  • Если условие истинноое, выполняется ‹тело цикла›.
  • И потом снова вычисляется ‹условие›.
  • Если оно ложное — цикл прерывается, если истинное, снова выполняется ‹тело
    цикла›.
  • И так далее.

Т.е. пока значение ‹условия› истинное, поочерёдно вычисляется ‹условие›
и выполняется тело цикла.

Блок либо выполнится, либо не выполнится.

Блок может выполняться много раз.

Читайте также:  Used to driving

Итерация — однократное выполнение тела цикла.

Пример. Просуммировать все числа от 1 до 100.

В переменной i находится очередное число. В начале оно равно 1, затем
на каждой итерации (проходе, витке) цикла оно увеличивается на 1. В результате
на первом витке i равно 1, на втором — i равно 2 и т.д. Таким образом,
в переменной i на входе в цикл находится номер текущей итерации.

Переменная sum изначально равна нулю, на каждом витке цикла её содержимое
увеличивается на номер этой итерации цикла (значение переменной i). В итоге,
значение переменной sum после завершения цикла увеличится на сумму чисел
от 1 до 100. Начальным её значением было число 0, поэтому после завершения
цикла в ней будет сумма чисел от 0 до 100.

Этот цикл обязательно завершится, т.к. до начала цикла переменная i хранила
значение меньше 100, на каждом проходе цикла переменная i увеличивается
и поэтому рано или поздно превысит 100 — условие i <= 100 станет ложным
и цикл прервётся.

Этот пример можно записать компактнее:

Здесь мы использовали сокращённую запись операторов присваивания. Вспомним,
что запись вида

является сокращением для

‹перем› = ‹перем› ‹знак› ‹выраж›

Вернёмся к циклу while. Для цикла вида

если в теле цикла нет явных конструкций прерывания цикла (break, return),
можно быть уверенным, что после завершения цикла ‹условие› будет ложным.

А внутри самого цикла ‹условие› истинное.

Пример. Написать функцию is_prime(n), проверяющую число на простоту.

Число простое, если оно больше чем 2 и делится только на себя и на единицу.
Число делится на другое, если остаток от деления равен нулю.

Считаем, что n у нас не меньше 2. Среди чисел от 2 до бесконечности
рано или поздно найдётся делитель числа n — для составного числа это будет
один из делителей n, для простого — само n.

Функцию можно оптимизировать, перебирая делители не до бесконечности
(фактически, до n), а до √n:

Цикл продолжается, пока divisor <= √n и при этом n не делится на divisor
без остатка. Соответственно, чтобы цикл прекратился, должно нарушится
хотя бы одно из условий:

Признаком того, что число простое, является первое условие — очередной кандидат
в делители превысил √n.

Пример. Найти сумму цифр целого числа.

Нам нужно разбить число на отдельные цифры и их сложить. Разбивать число будем
справа налево: последняя цифра числа — это его остаток от деления на 10,
все цифры, кроме последней — результат целочисленного деления на 10.

Целочисленное деление в Python — это операция //, возвращает целую часть
частного:

Назовём функцию sum_digits(n):

Для хранения суммы заведём переменную-аккумулятор sum, которую на каждой
итерации будем увеличивать на величину очередной цифры. До цикла положим
в неё 0, после завершения цикла в ней будет находиться сумма цифр.

The while and do-while Statements

Сложные предложения, у которых есть главная и придаточная части, делятся на несколько видов в зависимости от вида придаточного. На прошлом уроке мы рассмотрели предложение с придаточным-дополнением. На этом уроке мы рассмотрим сложные предложения с придаточными времени, в них придаточное предложение — это развернутое обстоятельство времени. В таких предложениях используются союзы when — когда, while — в то время как, before — до того как, after — после того как.

  • Условимся о действии А и действии Б.
  • Предложения с союзами when и while: I will call you when you are ready.
  • Сложные предложения с before и after.
  • Упражнения.
  • Словарь.

Условимся о действии А и действии Б

Смысл предложения с придаточным времени несколько отличается в зависимости от времени главного и придаточного предложений. Для удобства давайте условимся: ниже я основное действие (то, что в главной части) буду называть действием А, второстепенное (в придаточной) — действием Б.

Еще раз: основное, в главном предложении — действие А, дополняющее, в придаточном предложении — действие Б.

Сначала рассмотрим предложения с союзами when — когда и while — в то время как.

Предложения с союзом when отличаются разнообразием значений, зависящих от времени главного и придаточного предложений. Запомнить эти значения нетрудно, если не просто зубрить их, а понять, что они проистекают из значений тех или иных видовременных форм глагола.

Например, время Present Simple выражает обычное, регулярное действие, поэтому неудивительно, что предложение, где обе части в этом времени, выражает закономерность: одно действие регулярно происходит, когда происходит другое действие.

Время Past Continuous выражает длительное действие в прошлом, поэтому неудивительно, что если обе части предложения в Past Continuous, в целом в нем говорится о двух действиях, происходивших одновременно.

Рассмотрим несколько вариантов предложений с when.

Если в обеих частях предложения глагол в форме Present Simple, смысл предложения такой: А происходит тогда, когда происходит Б. То есть речь идет об общей закономерности.

People drink more water when it is hot. — Люди пьют больше воды, когда жарко.

Обратите внимание, что в предложениях с придаточным времени, придаточная часть может стоять перед главной. В этом случае после нее ставится запятая.

When people get tired, they need some rest. – Когда люди устают, им нужен отдых.

Смысл предложения такой: А случится, когда случится Б.

Важный момент: в английском языке придаточное времени используется в настоящем времени (в примере подчеркнуто), а не в будущем, как в русском языке.

I will help you when you . – Я помогу тебе, когда ты .

When you , I will talk to you. — Когда ты я с тобой поговорю.

Частая ошибка — ставить оба глагола в будущее время, как в русском языке:

Правильно: I will help you when you are ready. – Я помогу тебе, когда ты будешь готов.

Неправильно: I will help you when you will be ready. — Я помогу тебе, когда ты будешь готов.

Другими словами, в сложном предложении с придаточным времени обе части не могут быть в будущем времени. В будущее время ставится только основная часть, а придаточная ставится в настоящее время. Это правило распространяется не только на предложения с союзом when, но и на предложения, где придаточное времени присоединяется другими союзами.

Читайте также:  Флаг США - сколько звезд, фото, картинки, сколько полос, как выглядит флаг конфедерации, история, герб

Смысл предложения: 1) А произошло после того, как произошло Б, 2) А произошло тогда же, когда и Б.

My dog came back home when rain started. — Моя собака вернулась домой, когда начался дождь.

When I fell down, a police officer came to help me. – Когда я упал, полицейский подошел помочь.

Сначала начался дождь, потом собака вернулась домой. Сначала я упал, потом подошел полицейский. Впрочем, эти предложения можно понимать иначе: начался дождь, и в этот момент вернулась собака, я упал, и в это время подошел полицейский.

Примечание: слово home может использоваться не только как существительное «дом», но и как наречие «домой», «дома». В этом случае перед ним не нужен предлог. Например:

Honey, I’m home. — Дорогая, я дома.

Let’s go home. — Давай пойдем домой.

Бывают случаи, когда home можно использовать и как существительное (с предлогом), и как наречие без разницы в смысле:

I will stay at home. — Я останусь дома (буквально: в доме).

I will stay home. — Я останусь дома.

А произошло в то время, как происходило (не произошло, а именно происходило) Б.

I came in when he was sleeping. – Я зашел, когда он спал.

When I was walking, John called me. — Когда я прогуливался, Джон позвонил мне.

Иными словами, шел некий длительный процесс, выраженный в Past Continuous (I was walking), затем во время этого процесса произошло разовое действие, выраженное в Past Simple (John called me).

А и Б происходило одновременно.

I was sleeping when you were watching TV. – Я спал, когда (в то время, как) ты смотрел телевизор.

В этом случае часто используют союз while – в то время как, одновременно с тем как. Он в большей мере, чем when подчеркивает одновременность протекания действий.

I was sleeping while you were watching TV. – Я спал в то время, как ты смотрел телевизор.

Сложные предложения с before и after

Теперь рассмотрим предложения с союзами before, after.

Как и в предложениях с when, общий смысл предложения зависит от того, в какой видовременной форме используется глагол в основной части и придаточной. Важно не механически заучивать схемы типа «главная часть в таком времени, придаточная в таком», а понимать, что смысл сложного предложения проистекает из смысла простых + значение союза. Например, если в обеих частях Present Simple, предложение будет выражать закономерность:

Stars rise after the sun sets. — Звезды восходят после того, как садится солнце.

Теоретически в предложениях с before и after возможны разные комбинации времен в главной части и придаточной, но на практике обычно встречаются такие:

Не забывайте, если главное предложение в будущем времени, придаточное – в настоящем. Напоминаю, это правило распространяется вообще на все сложные предложения с придаточным времени.

I will find you before you leave. – Я найду тебя до того, как ты уедешь.

I will find you after you leave. – Я найду тебя после того, как ты уедешь.

Одно действие случилось до/после другого.

I found you before you left. — Я нашел тебя до того, как ты ушел.

I found you after you left. — Я нашел тебя после того, как ты ушел.

Кстати, в английском языке существует специальная видовременная форма для «позапрошлого» действия, то есть действия, которое случилось раньше другого действия в прошлом. Чтобы сделать действие в Past Simple «позапрошлым», нужно добавить перед ним «had»:

I had found you before you left. — Я нашел тебя до того, как ты ушел.

Но, во-первых, «позапрошлое» действие используется, если промежуток между действиями достаточно продолжительный, то есть действия произошли не сразу друг за другом, во-вторых, в разговорной речи, им часто пренебрегают. К «позапрошлому» действию мы еще вернемся.

Напоминаю, слова before и after могут выступать не только как союзы, соединяющие части сложного предложения. Они также могут выступать в роли предлогов в простом предложении. В этом случае сочетание «предлог + существительное» образует обстоятельство в простом предложении.

I found you before the lesson. — Я нашел тебя до урока.

She left after the interview. — Она ушла после собеседования.

Упражнения

Пройдите упражнение на употребление сложных предложений с придаточным времени. Вам нужно выбрать один правильный вариант ответа.

Словарь

Глагол to get (в прошедшем времени — got) — один из лидеров по употреблению в разговорной речи. Вы можете встретить его в разных контекстах. Запомните несколько употребительных случаев:

I got your ticket. — Я получил твой билет.

Get your things and let’s go. — Бери свои вещи и пойдем.

I am getting old. — Я старею (букв.: становлюсь старым).

It is getting dark. — Становится темно.

We got to the restaurant after the party started. — Мы прибыли в ресторан после того, как вечеринка началась.

What time will we get to the park? — Во сколько мы приедем (прибудем) в парк?

Глагол to get также входит в конструкцию to have got — иметь.

По-английски, когда нужно сказать «у меня есть что-то» обычно говорят не «I have», а «I have got».

I have got two tickets. — У меня есть два билета.

He has got many friends. — У него много друзей.

Это касается только настоящего времени. В будущем и прошедшем времени «will have got», «had got» обычно не используется. «Have got» и «has got» могут сокращаться:

Читайте также:  Идиомы в английском языке

I’ve got two tickets. — У меня есть два билета.

He’s got many friends. — У него много друзей.

Вам также может встретиться употребление просто «got» вместо «have got», но учтите, что это уже совсем нелитературно, так лучше не говорить:

I got two tickets. — У меня есть два билета.

He got many friends. — У него много друзей.

Также существует множество фразовых глаголов и устойчивых выражений с глаголом to get, они разобраны в этой статье: «Фразовый глагол GET, разговорные выражения и идиомы».

  • << Предыдущий урок
  • Все уроки

The while and do-while Statements

Здравствуйте! Меня зовут Сергей Ним, я автор этого сайта, а также книг, курсов, видеоуроков по английскому языку.

У меня также есть канал на где я регулярно публикую свои видео.

Задание на закрепление

Отметьте в комментариях, в каких предложениях можно использовать while.

  • Он мне всё рассказал, когда мы прощались.
  • Позвони, когда придёшь.
  • Я буду ждать тебя, пока ты тренируешься.
  • Пока ты “гуляешь” по интернету, я схожу в парк.
  • Я уронила кошелёк, когда стояла в очереди.
  • Когда выключат свет, приходи ко мне в гости.
  • Он, наверное, будет спать, когда ты закончишь работать.

1, 3, 4, 5

Поиск значения при помощи цикла while

Решаемая задача. Есть множество каких-то значений, нужно среди них найти
первое, которое удовлетворяет заданным свойствам, в частности, равно чему-либо.

Пример. Ранее мы рассматривали пример на определение простоты числа.
Рассмотрим его ещё раз, но уже с точки зрения приёма поиска при помощи цикла
while.

Если число составное, то у него найдутся два делителя: m = n × k, при этом
либо n == k, т.е. m = n² = k², либо один из делителей будет меньше √n,
а второй — больше, чем √n.

Поэтому, чтобы определить, составное ли это число, нужно найти делитель,
который будет не больше, чем √n. Т.е. задача проверки на простоту сводится
к проверке на поиск делителя.

Немного уточним фразы в псевдокоде:

Можем уточнить две последние фразы: если делитель найден, число составное,
функция возвращает ложь. Если не найден — простое, функция возвращает истину:

Кандидата в делители положим в переменную divisor и перепишем на Python ещё
несколько фраз в псевдокоде:

Получили готовую работающую функцию. Но её можно упростить.

Как мы знаем, конструкцию вида

можно упростить до

В рассматриваемой функции мы видим похожую конструкцию:

Теперь мы можем упростить его до одной строчки:

Целиком функция примет вид:

Пример. Найти наибольший общий делитель. Мы будем рассматривать поиск
наибольшего общего делителя именно как задачу поиска, т.е. без алгоритма
Евклида.

Делитель числа не превышает модуль (абсолютное значение) этого числа.

Чтобы найти общий делитель, нужно перебирать числа и искать среди них число,
на которое делятся два исходных без остатка. Чтобы общий делитель был
наибольшим, нужно перебирать числа в порядке убывания.

Поэтому в качестве начального кандидата в делители мы можем взять абсолютное
значение одного из двух аргументов.

Кандидат в делители будем хранить в переменной res. Перебирать числа будем
в порядке убывания, начнём с абсолютного значения m. На самом деле, можно
и с n, можно выбрать из них наименьшее, но это нам не важно, нам важно
рассмотреть поиск.

  • ‹установка на начало — res = abs(m)
  • ‹текущее — не искомое› — НЕ общий делитель. Общий делитель — делится
    на оба числа без остатка. Т.е. НЕ общий делитель — not (m % res == 0 and
    n % res == 0).

Вопрос. А может ли res быть равным нулю? Отрицательным быть не может, т.к.
это абсолютное значение числа (res = abs(m)). Нулём может, только когда
m сам равен нулю. Но если одно из чисел равно нулю, то наибольший общий
делитель — второе число.

Поэтому, в случае, когда делителя не нашлось (m == 0), возвращаем n,
а в остальных случаях — найденный общий делитель:

Примечание. Часто для результата функции заводят переменную с именем res.

В чём разница

Слово when может использоваться, когда мы говорим как о коротких действиях (фактах, не процессах), так и о чём-то продолжительном.

While мы можем употребить только тогда, когда речь идёт о продолжающемся действии, тем самым обозначая, что оно длилось на протяжении времени.

Примеры

Числа от A до B

12

7

12

11

10

9

8

7

5

2

5

4

3

2

1

10

100

1000

0

Количество чисел 4

10

Наименьший делитель равен 2

15

Наименьший делитель равен 3

17

Наименьший делитель равен 17

Перебор всех значений

Решаемая задача. Есть некоторая последовательность значений, нужно перебрать
их все и с каждым значением что-нибудь сделать.

Под этот шаблон хорошо подходит предыдущий пример — суммирование цифр числа:

  • Здесь ‹установки на начало› нет, т.к. в переменной n уже лежит исходное
    число.
  • ‹значения не кончились› — условие n != 0 — цифры в числе не кончились.
  • ‹сделать что-то с текущим› — две первые строчки тела цикла:

Другой пример с сегодняшней лекции:

Решение задач

Четные от A до B

10

1

10

8

6

4

2

От A до B на три

Пользователь вводит числа A и B (A < B, A меньше B). Выведите числа от A до B включительно, которые делятся на три.

1

15

3

6

9

12

15

Пользователь вводит числа до тех пор, пока не введет 0. Выведите сумму введенных чисел (0 считать не нужно).

1

15

10

11

2

0

Сумма равна: 39

Пользователь вводит числа до тех пор, пока не введет 0. Выведите максимальное введенное число (0 считать не нужно).

1

15

10

11

2

0

Максимум равен: 15

Пользователь вводит числа до тех пор, пока не введет 0. Выведите минимальное введенное число (0 считать не нужно).

1

15

10

11

2

0 # 0 не входит в последовательность

Минимум равен: 1

Пользователь вводит число N. Выведите факториал число N. Факториал числа N — это произведение всех чисел от 1 до N включительно. Например, факториал числа 5 равен 120.

Фибоначчи (финальный босс)

Пользователь вводит число N. Выведите N-ное по счету число Фибоначчи. Последовательность чисел Фибоначчи рассчитывается по такой формуле: F(1) = 1, F(2) = 1, F(K) = F(K-2) + F(K-1). Идея такая: каждое следующее число равно сумму двух предыдущих.

Оцените статью