Цикл while в c: Операторы цикла в языке Си : for, while, do…while

Содержание

что это такое, как работает, примеры

Цикл while в Python

В прошлой статье мы изучали цикл for – он используется в тех случаях, когда заранее известно количество итераций, совершаемых в цикле. Число исполнений цикла for определяется функцией range() или размером коллекции. Если диапазон значений не известен заранее, необходимо использовать другой цикл – while: он выполняется, пока не наступит определенное событие (или не выполнится необходимое условие). По этой причине цикл while называют условным. Вот пример простейшего цикла while – он выполняется, пока пользователь не введет 0:

n = int(input())
while n != 0:
    print(n + 5)
    n = int(input())

    

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

Бесконечные циклы можно создавать намеренно – для выполнения фонового скрипта, игры, прикладной программы. Но иногда цикл while может стать бесконечным из-за ошибки. Например, если в приведенном выше коде не указать ввод новой переменной n = int(input()) в теле цикла, while будет бесконечно выводить одно и то же значение, пока пользователь не остановит выполнение программы нажатием Ctrl + C.

Управление бесконечным циклом while в Питоне

Самый простой способ управления бесконечным циклом – использование оператора break. В приведенном ниже коде список lst генерируется случайным образом, и до начала цикла его длина неизвестна. Однако выполнение цикла можно оставить, как только список опустеет в результате многократного выполнения операции pop():

import random
lst = [i for i in range(random.randint(5, 500))]
while True:
    if not lst:
        break
    print(lst.
pop())

Если выполнение цикла не остановить сразу же, как только список опустеет, появится ошибка:

IndexError: pop from empty list
    

Оператор break также помогает сократить количество итераций и прекратить выполнение программы, как только нужное решение найдено. Например, таким образом можно найти наименьший делитель числа n, отличный от 1:

n = int(input())
i = 2
while True:
    if n % i == 0:
        break
    i += 1
print(i)

    

Помимо break, управлять бесконечным циклом можно с помощью флагов (сигнальных меток). В приведенном ниже примере программа бесконечно запрашивает у пользователя ввод любого слова, пока пользователь не введет

exit. Это событие меняет статус цикла на False, и работа программы завершается:

text = 'Введите любое слово: '
text += '\nИли введите exit для выхода: '
active = True
while active:
    message = input(text)
    if message == 'exit':
        active = False
    else: 
        print(message)

    

Пропуск итераций в цикле while

Оператор continue можно использовать для пропуска операций, если элементы не соответствуют заданным критериям. Этот код работает, пока не будет сформирован список из 5 элементов – при этом в список не включаются числа в диапазоне между 90 и 120, а также число 50:

sp = []
while len(sp) < 5:
    num = int(input())
    if num == 50 or 90 <= num <= 120:
        continue
    sp.append(num)  
print(sp)

    

Если пользователь введет набор цифр 45 50 121 119 95 105 3 4 7, в список будут добавлены только числа, соответствующие критериям:

[45, 121, 3, 4, 7]
    

Особенности цикла while

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

import random
lst = [i for i in range(random.randint(5, 500))]
while len(lst) > 1:
    print(lst.pop())
else:
    print('Список пуст')

    

2. В цикле while можно использовать любое количество условий и условных операторов and, or, иnot

:

n = int(input())
while True:
    if n == 0:
        break
    elif n > 50 or n <= -50:
        break
    elif n % 2 == 0:
        break
    print(n / 5)
    n = int(input())

    

3. Цикл while может быть вложенным. Этот код выводит простые числа из диапазона от 2 до 100:

i = 2
while(i < 100):
   j = 2
   while j <= i / j:
      if not i % j:
          break
      j = j + 1
   if j > i / j:
       print(f'{i} - простое число')
   i = i + 1

    

4. В качестве вложенных циклов while могут включать в себя циклы for. Этот код, к примеру, будет бесконечно печатать цифры в диапазоне от 0 до 5:

while True:
    for i in range(5):
        print(i)

    

5.

Любой цикл for можно заменить циклом while, но обратное возможно только в том случае, когда количество итераций можно определить до начала цикла. К примеру, эти циклы while и for равнозначны – оба печатают цифры от 0 до 9:

i = 0
while i < 10:
    print(i)
    i += 1
for i in range(10):
    print(i)

    

А этот цикл while заменить циклом for невозможно – программа будет бесконечно возводить в квадрат все введенные пользователем числа, пока не получит 0:

n = int(input())
while True:
    if n == 0:
        break
    print(n ** 2)
    n = int(input())

    

Практика

Задание 1

Напишите программу, которая принимает на вход целые числа и вычисляет их сумму, пока пользователь не введет 0.

Пример ввода:

4
5
6
0

    

Вывод:

15
    

Решение:

summa = 0
while True:
    n = int(input())
    summa += n
    if n == 0:
        break
print(summa)

    

Задание 2

Напишите программу, которая получает от пользователя число n > 100, и вычисляет (без использования методов строк) произведение цифр, из которых n состоит.

Пример ввода:

335
    

Вывод:

45
    

Решение:

n = int(input())
prod = 1
while n:
    prod *= n % 10
    n //= 10
print(prod)

    

Задание 3

Напишите программу, которая получает на вход два числа a и b, и находит наименьшее число c, которое без остатка делится на a и b.

Пример ввода:

7
12
    

Вывод:

84
    

Решение:

a, b = int(input()), int(input())
c = a
while c % b:
    c += a
print(c)

    

Задание 4

Напишите программу, которая составляет строку из полученных от пользователя слов, пока длина строки не достигнет 50 символов. Слова, начинающиеся с гласных, в строку не включаются.

Пример ввода:

о
бойся
Бармаглота
сын
он
так
свиреп
и
дик
а
в глуще
рымит

    

Вывод:

бойся Бармаглота сын так свиреп дик в глуще рымит
    

Решение:

st = ''
while len(st) < 50:
    word = input()
    if word[0] in 'аиеёоуыэюя':
        continue
    st += ' ' + word
print(st)

    

Задание 5

Напишите программу для конвертации числа из десятичного системы в двоичную без использования функции bin().

Пример ввода:

25
    

Вывод:

11001
    

Решение:

n = int(input())
result = ''
while n > 0:
    result = str(n % 2) + result
    n = n // 2
print(result)

    

Задание 6

Напишите программу, которая получает на вход число и без использования строковых методов переставляет цифры в обратном порядке.

Пример ввода:

176435
    

Вывод:

534671
    

Решение:

n = int(input())
rev = 0
while n!= 0:
    r = n % 10
    rev = rev * 10 + r
    n = n // 10
print(rev)

    

Задание 7

Напишите программу для вычисления факториала числа n без использования функции math.factorial().

Пример ввода:

7
    

Вывод:

5040
    

Решение:

n = int(input())
fact = 1
while n > 1:
    fact *= n 
    n -= 1
print(fact)

    

Задание 8

Напишите программу, которая получает от пользователя число n и определяет, является ли оно простым, или у него есть делители, кроме 1 и самого себя.

Пример ввода:

60
    

Вывод:

60 делится на 2
60 делится на 3
60 делится на 4
60 делится на 5
60 делится на 6
60 делится на 10
60 делится на 12
60 делится на 15
60 делится на 20
60 делится на 30
Таким образом, 60 не является простым числом

    

Решение:

n = int(input())
flag = False
i = 2
while i < n:
    if n % i ==0:
        flag = True
        print(f'{n} делится на {i}')
    i += 1   
if flag:
    print(f'Таким образом, {n} не является простым числом')
else:
    print(f'{n} - простое число')

    

Задание 9

Напишите программу, использующую вложенный цикл while для вывода треугольника размером n x n х n, состоящего из символов*.

Пример ввода:

6
    

Вывод:

*
**
***
****
*****
******

    

Решение:

n = int(input())
i, j = 0, 0
while i < n:
    while j <= i:
        print('*', end='')
        j += 1
    j = 0
    i += 1
    print('')

    

Задание 10

Напишите программу для запоминания английских названий месяцев:

1. Русские названия месяцев выводятся в случайном порядке с помощью метода random.shuffle().

2. Пользователь получает три попытки для написания правильного названия на английском.

3. После трех неверных попыток программа переходит к другому слову.

Пример ввода:

Месяц март по-английски называется: march
Месяц январь по-английски называется: January
Месяц август по-английски называется: august
Месяц май по-английски называется: may
Месяц апрель по-английски называется: aprile
Неверно! Осталось попыток: 2
Месяц апрель по-английски называется: aprill
Неверно! Осталось попыток: 1
Месяц апрель по-английски называется: appril
Неверно! Осталось попыток: 0
Попытки исчерпаны!
Месяц июль по-английски называется: july
Месяц сентябрь по-английски называется: september
Месяц июнь по-английски называется: june
Месяц октябрь по-английски называется: october
Месяц ноябрь по-английски называется: november
Месяц декабрь по-английски называется: december
Месяц февраль по-английски называется: february

    

Вывод:

Конец игры
Количество правильных ответов: 11
Число ошибок: 3

    

Решение:

import random
correct, wrong, attempts = 0, 0, 3
months = {'январь': 'January', 'февраль': 'February', 'март': 'March',
          'апрель': 'April', 'май': 'May', 'июнь': 'June',
           'июль': 'July', 'август': 'August', 'сентябрь': 'September',
          'октябрь': 'October', 'ноябрь': 'November', 'декабрь': 'December'}
rand_keys = list(months. keys())
random.shuffle(rand_keys)
for key in rand_keys:
    counter = 0
    while counter < attempts:
        spelling = input(f'Месяц {key} по-английски называется: ')
        if spelling.title() == months[key]:
            correct += 1
            break
        else:
            counter += 1
            wrong += 1
            print(f'Неверно! Осталось попыток: {attempts - counter}')
    else:
        print(f'Попытки исчерпаны!')
        
print('Конец игры')
print(f'Количество правильных ответов: {correct}')
print(f'Число ошибок: {wrong}')

    

Подведем итоги

Цикл while используют в случаях, когда число итераций невозможно оценить заранее. Во всех остальных случаях лучше применять цикл for. Чтобы цикл while случайно не превратился в бесконечный, стоит продумать все события и условия, которые должны приводить к своевременному прерыванию программы.

В следующей статье приступим к изучению функций.

***

Содержание самоучителя

  1. Особенности, сферы применения, установка, онлайн IDE
  2. Все, что нужно для изучения Python с нуля – книги, сайты, каналы и курсы
  3. Типы данных: преобразование и базовые операции
  4. Методы работы со строками
  5. Методы работы со списками и списковыми включениями
  6. Методы работы со словарями и генераторами словарей
  7. Методы работы с кортежами
  8. Методы работы со множествами
  9. Особенности цикла for
  10. Условный цикл while
  11. Функции с позиционными и именованными аргументами
  12. Анонимные функции
  13. Рекурсивные функции
  14. Функции высшего порядка, замыкания и декораторы
  15. Методы работы с файлами и файловой системой

Циклы while и do-while в Kotlin с примерами кода

Циклы являются способом многократного выполнения кода в Kotlin. В этом уроке мы познакомимся с одним из типов циклов, а именно — циклом while.

Содержание статьи

  • Цикл while в Kotlin
  • Цикл do-while в Kotlin
  • Прерывание цикла с помощью break в Kotlin
  • Задачи для проверки

Если вы уже изучали другие языки программирования, вам будут знакомы концепции и, возможно, даже синтаксис.

Цикл while в Kotlin

Цикл while повторяет блок кода, пока выполняется условие. Цикл while в Kotlin создается следующим образом:

while (<CONDITION>) { <LOOP CODE> }

while (<CONDITION>) {

  <LOOP CODE>

}

Цикл проверяет условие для каждой итерации. Если условие истинно (true), цикл выполняется и переходит к другой итерации.

Если условие ложно (false), цикл останавливается. Как и выражения if, циклы while создает свою собственную область видимости.

Простейший цикл while имеет следующую форму:

while (true) { }

while (true) {

    

}

Это вечный цикл while в Kotlin, так как условие всегда истинно (true). Конечно, вам вряд ли потребуется писать такой цикл while, потому что в этом случае программа будет выполняться вечно! Бесконечный цикл не приведет к сбою программы, но из-за него может зависнуть компьютер.

Далее представлен более полезные пример цикла while в Котлин:

var sum = 1 while (sum < 1000) { sum = sum + (sum + 1) }

var sum = 1

 

while (sum < 1000) {

    sum = sum + (sum + 1)

}

Данный код подсчитывает математическую последовательность до того момента, где значение больше 1000.

Цикл выполняется следующим образом:

  • Перед итерацией 1: sum = 1, условие цикла = true
  • После итерации 1: sum = 3, условие цикла = true
  • После итерации 2: sum = 7, условие цикла = true
  • После итерации 3: sum = 15, условие цикла = true
  • После итерации 4: sum = 31, условие цикла = true
  • После итерации 5: sum = 63, условие цикла = true
  • После итерации 6: sum = 127, условие цикла = true
  • После итерации 7: sum = 255, условие цикла = true
  • После итерации 8: sum = 511, условие цикла = true
  • После итерации 9: sum = 1023, условие цикла = false

После девятой итерации переменная sum равна 1023, следовательно, условие sum < 1000 становится ложным (false). В данной точке — цикл останавливается.

Цикл do-while в Kotlin

Одним из вариантов цикла while является цикл do-while. Он отличается от цикла while тем, что условие проверяется в конце цикла, а не в начале. Это означает, что хотя бы 1 раз тело цикла будет выполнено.

do { <LOOP CODE> } while (<CONDITION>)

do {

    <LOOP CODE>

} while (<CONDITION>)

Далее дан пример из прошлого раздела, только здесь используется цикл do-while:

sum = 1 do { sum = sum + (sum + 1) } while (sum < 1000)

sum = 1

 

do {

    sum = sum + (sum + 1)

} while (sum < 1000)

В данном примере вывод такой же, как и раньше. Однако, так бывает не всегда. Вы можете получить другой результат с другим условием. Рассмотрим следующий цикл while:

sum = 1 while (sum < 1) { sum = sum + (sum + 1) }

sum = 1

 

while (sum < 1) {

    sum = sum + (sum + 1)

}

Рассмотрим аналогичный цикл do-while, который использует такое же условие:

sum = 1 do { sum = sum + (sum + 1) } while (sum < 1)

sum = 1

 

do {

  sum = sum + (sum + 1)

} while (sum < 1)

В случае обычного цикла while условие sum < 1 является ложным с самого начала. Это означает, что тело цикла не будет выполнено! Значение sum будет равна 1, потому что цикл не будет выполнять никаких итераций. В случае цикла do-while сумма sum будет равна 3, потому что цикл do-while ВСЕГДА выполнится хотя бы один раз, даже если изначально условие ложное.

Прерывание цикла с помощью break в Kotlin

Иногда требуется прервать цикл раньше времени. Для этого можно использовать оператор break, который сразу прерывает цикл и продолжает выполнение кода после него.

К примеру, рассмотрим следующий код:

sum = 1 while (true) { sum = sum + (sum + 1) if (sum >= 1000) { break } }

1

2

3

4

5

6

7

8

sum = 1

 

while (true) {

    sum = sum + (sum + 1)

    if (sum >= 1000) {

        break

    }

}

Здесь условие цикла истинно (true), поэтому цикл будет повторятся бесконечно. Однако оператор break указывает на то, что цикл while завершится, когда сумма будет больше или равна 1000.

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

Вам следует выбирать наиболее удобные в зависимости от ситуации. Это подход, который вы усвоите со временем и практикой.

Задачи для проверки

1. Создайте переменную counter, значением которой будет 0. Создайте цикл while с условием counter < 10, который выводит counter равен X (где Х заменяется значением counter) и затем увеличивает counter на 1;

2. Создайте переменную counter со значением 0. Создайте другую переменную под названием roll, значением которой будет 0. Создайте цикл do-while.

Внутри цикла укажите, что переменная roll равна Random().nextInt(6), то есть выбор случайного числа между 0 и 5. Затем увеличьте counter на 1.

Под конец выведите После X бросков, roll равен Y, где Х является значением counter, а Y — значением roll. Укажите условие цикла, при котором цикл будет заканчиваться при выпаде первого 0.

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


[crayon-63e0a611311ef405516376/]

В то время как петля — Синтаксис, Flowchart

  • Post Автор: