Цикл вайл: Циклы while и for

Содержание

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

Цикл 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. Методы работы с файлами и файловой системой
  16. Регулярные выражения
  17. Основы скрапинга и парсинга
  18. Основы ООП: инкапсуляция и наследование

Цикл while | Основы JavaScript

Для перемещения по курсу нужно зарегистрироваться

1. Введение ↳ теория

2. Hello, World! ↳ теория / тесты / упражнение

3. Инструкции ↳ теория / тесты / упражнение

4. Арифметические операции ↳ теория / тесты / упражнение

5. Ошибки оформления (синтаксиса и линтера) ↳ теория / тесты / упражнение

6. Строки ↳ теория / тесты / упражнение

7. Переменные ↳ теория / тесты / упражнение

8. Выражения в определениях ↳ теория / тесты / упражнение

9. Именование ↳ теория / тесты / упражнение

10. Интерполяция ↳ теория / тесты / упражнение

11. Извлечение символов из строки ↳ теория / тесты / упражнение

12. Типы данных ↳ теория / тесты / упражнение

13. Неизменяемость и примитивные типы ↳ теория / тесты / упражнение

14. Функции и их вызов ↳ теория / тесты / упражнение

15. Сигнатура функции ↳ теория / тесты / упражнение

16. Вызов функции — выражение ↳ теория / тесты / упражнение

17. Функции с переменным числом параметров ↳ теория / тесты / упражнение

18. Детерминированность ↳ теория / тесты / упражнение

19. Стандартная библиотека ↳ теория / тесты / упражнение

20. Свойства и методы ↳ теория / тесты / упражнение

21. Цепочка вызовов ↳ теория / тесты / упражнение

22. Определение функций ↳ теория / тесты / упражнение

23. Возврат значений ↳ теория / тесты / упражнение

24. Параметры функций ↳ теория / тесты / упражнение

25. Необязательные параметры функций ↳ теория / тесты / упражнение

26. Упрощенный синтаксис функций ↳ теория / тесты / упражнение

27. Логика ↳ теория / тесты / упражнение

28. Логические операторы ↳ теория / тесты / упражнение

29. Результат логических операций ↳ теория / тесты / упражнение

30. Условные конструкции ↳ теория / тесты / упражнение

31. Тернарный оператор ↳ теория / тесты / упражнение

32. Конструкция Switch ↳ теория / тесты / упражнение

33. Цикл while ↳ теория / тесты / упражнение

34. Агрегация данных ↳ теория / тесты / упражнение

35. Обход строк в цикле ↳ теория / тесты / упражнение

36. Условия внутри тела цикла ↳ теория / тесты / упражнение

37. Инкремент и декремент ↳ теория / тесты / упражнение

38. Цикл for ↳ теория / тесты / упражнение

39. Модули ↳ теория / тесты / упражнение

Испытания

1. Фибоначчи

2. Найди Fizz и Buzz

3. Переворот числа

4. Счастливый билет

5. Фасад

6. Идеальные числа

7. Инвертированный регистр

8. Счастливые числа

Порой обучение продвигается с трудом. Сложная теория, непонятные задания… Хочется бросить. Не сдавайтесь, все сложности можно преодолеть. Рассказываем, как

Не понятна формулировка, нашли опечатку?

Выделите текст, нажмите ctrl + enter и опишите проблему, затем отправьте нам. В течение нескольких дней мы улучшим формулировку или исправим опечатку

Что-то не получается в уроке?

Загляните в раздел «Обсуждение»:

  1. Изучите вопросы, которые задавали по уроку другие студенты — возможно, ответ на ваш уже есть
  2. Если вопросы остались, задайте свой. Расскажите, что непонятно или сложно, дайте ссылку на ваше решение. Обратите внимание — команда поддержки не отвечает на вопросы по коду, но поможет разобраться с заданием или выводом тестов
  3. Мы отвечаем на сообщения в течение 2-3 дней. К «Обсуждениям» могут подключаться и другие студенты. Возможно, получится решить вопрос быстрее!

Подробнее о том, как задавать вопросы по уроку

Justin Lyons — Nasty Cycle для продажи на 1stDibs

Товары похожие на Nasty Cycle

Justin Lyons — Dynamite and a Laser Beam — В темноте, но нашел искру

Джастин Лайонс — В огонь

Джастин Лайонс — Добро пожаловать в реальный мир

  • Дизайн: Элизабет Робертс Архитектура и дизайн, Фото: Дастин Аксланд. Размеры: В 152,4 см x Ш 101,6 см

  • Дизайн: Тимоти Годболд, Фото: Карл Симон. Размеры: В 152,4 см x Ш 101,6 см

  • Хотите больше изображений или видео?

    Запросить дополнительные изображения или видео у продавца

1 из 4

О товаре

Джастин Лайонс, «Nasty Cycle» 2022, Холст, смешанная техника.

  • Создатель:

    Джастин Лайонс (1979, американец)

  • Год создания:

    2022

  • Размеры:

    Высота: 152,4 см (60 дюймов) Ширина: 101,6 см (40 дюймов)

  • Средний:

    2 Смешанная техника

    Период:

    2010-

  • Состояние:

  • Местонахождение галереи:

    Atlanta, GA

  • Номер ссылки:

    1stDibs: LU1338110169382 3 50905

    0 View Invo 034

    Доставка и возврат

    Гарантия защиты покупателя 1stDibs

    Если ваш товар не соответствует описанию, мы будем работать с вами и продавцом, чтобы исправить это. Узнать больше

    Части этой страницы были переведены автоматически. 1stDibs не может гарантировать точность переводов. Английский язык является языком по умолчанию на этом веб-сайте.

    О продавце

    Расположен в Атланте, Джорджия

    Проверенный продавец

    Эти опытные продавцы проходят всестороннюю оценку нашей командой штатных экспертов.

    Создано в 2019 году

    1stDibs продавец с 2020 года

    26 продаж на 1stDibs

    Типичное время ответа: 8 часов 002 Джастин Лайонс

    Расположен в Атланта, Джорджия

    Джастин Лайонс, «Динамит и лазерный луч», 2022, холст, смешанная техника.

    Категория

    2010-е Натюрморты

    Материалы

    Смешанная техника

    Джастин Лайонс

    Динамит и лазерный луч, 2022

    22 420 долларов США

  • Нарушение безопасности 2

    By 0 0 GA,

    Justin Lyons

    9 5

    Джастин Лайонс, «Нарушение безопасности 2», 2022 г., Холст, смешанная техника.

    Категория

    Натюрморты 2010-х годов

    Материалы

    Смешанная техника

    Джастин Лайонс

    Нарушение безопасности 2, 2022

    2 долларов США

    2

    Расположен в Атланте, Джорджия.

    Категория

    2010-е Натюрморты

    Материалы

    Смешанная техника

    Джастин Лайонс

    Нравится это или нет, 2022

    9007 20002 023
  • В темноте, но нашел искру

    Джастин Lyons

    Расположен в Атланте, Джорджия

    Джастин Лайонс, «В темноте, но нашел искру» 2022, Холст, смешанная техника.

    Категория

    Натюрморты 2010-х годов

    Материалы

    Смешанная техника

    Джастин Лайонс

    В темноте, но нашел искру, 2022

    долл. США

    9 9 05

  • В огонь

    Джастин Лайонс

    Расположен в Атланте, Джорджия

    Джастин Лайонс, «В огонь» 2022, Холст, смешанная техника.

    Категория

    Натюрморты 2010-х

    Материалы

    Смешанная техника

    Джастин Лайонс

    В огонь, 2022

  • 5
  • 3

    3 2 Добро пожаловать в реальный мир

    Джастин Лайонс

    Расположен в Атланте , GA

    Джастин Лайонс, «Добро пожаловать в реальный мир» 2022, Холст, смешанная техника.

    Категория

    2010-е Натюрморты

    Материалы

    Смешанная техника

    Джастин Лайонс

    Добро пожаловать в реальный мир, 2022

    8 968 долларов США

Вам также может понравиться

  • 1 Cent Портрет, 1925 г.

    Джеймс Лахи

    Расположен в Монреале, Квебек.

    Джеймс Лахи — канадский художник, живущий в Торонто, где у него есть студия. Он получил степень бакалавра искусств в Йоркском университете в 1984 г., изучая искусство и архитектуру в Италии (1982 г.)…

    Категория

    Современные натюрморты 2010-х годов

    Материалы

    Смешанная техника

    Джеймс Лахи

    1 цент Портрет, 1925 г. 0

  • 1 Cent Portrait, 1922 (Сделано в Канаде 3 – Мемуары)

    Джеймс Лахи

    Расположен в Монреале, Квебек

    Джеймс Лахи – канадский художник, живущий в Торонто, где у него есть студия. Он получил степень бакалавра искусств в Йоркском университете в 19 лет.84 с изучением искусства и архитектуры в Италии (1982)…

    Категория

    2010-е годы Современные натюрморты

    Материалы

    Смешанная техника

    Джеймс Лахи

    3 портрета в Канаде (Сделано в 192 – A Memoir), 2019-2020

    32 000 долларов США

  • Peace Lily 151112-02

    Джеймс Лахи

    Расположен в Монреале, Квебек, где живет его канадский художник Джеймс Лай

    9000 студия . Он получил степень бакалавра искусств в Йоркском университете в 19 лет.84, изучал искусство и архитектуру в Италии (1982)…

    Категория

    2010-е годы Современные натюрморты

    Материалы

    Смешанная техника

    Джеймс Лахи

    2 Peace Lily 100059 102111, 1521111

    28 000 долларов США

  • Помидоры — натюрморт, фрукты и овощи, Южная Африка, реалистичный

    Автор Марк Мидгли

    Расположен в Ноул-лейн, Крэнли

    Помидоры Марка Мидгли. Оригинал Масло на холсте. Кейптаунский художник Марк Мидгли родом из Лидса в Великобритании. Он переехал в Южную Африку в 1979, где он начал шелковый…

    Категория

    Начало 2000-х Фотореалист Натюрморт Картины

    Материалы

    Смешанная техника, Масло

    Марк Мидгли

    Помидоры — Натюрморт, Южная Африка, фрукты и овощи Реалистичный, 2006

    9 501 долл. США

  • Роза — 21 век, современная живопись, граффити, цветы, искусство смешанной техники

    Дэнни О’Коннор

    Расположен в Барселоне, Каталония

    «Картины накладываются краской слой за слоем, что придает произведениям большую глубину резкости. Они созданы с помощью арсенала инструментов, которые не согласуются с условностями. A…

    Категория

    21 век и Современная современная фигуративная живопись

    Материалы

    Холст, краски, смешанная техника

    Дэнни О’Коннор

    Роза — 21 век, современная живопись, граффити, цветок, смешанная техника, 2019

  • 9

    долл. США0005

  • Красный цветок I

    Пьер Мари Бриссон

    Находится в Сент-Огастине, Флорида

    Оригинальная подписанная картина маслом на плотной тряпичной бумаге ручной работы французского художника Пьера Мари Бриссона (1955-) под названием «Красный цветок I». в. 2005. Рукописная подпись Бриссона внизу справа. Искусство…

    Категория

    Начало 2000-х Современные натюрморты

    Материалы

    Краски, смешанная техника, масло, бумага ручной работы

    Пьер Мари Бриссон

    Красный цветок I, около: 2005

    4000 долларов США

Недавно просмотренные

Просмотреть больше

The 1stDibs Promise

900seller

Узнать больше

7

Уверенность на кассе

Гарантия соответствия цены

Исключительная поддержка

Защита покупателя

Надежная доставка по всему миру

Дополнительные способы поиска

Велоспорт

Велопокраска

Велоспорт

Жизненный цикл

Современный натюрморт

Цветы в рамке

Художники-флористы

Этюд для натюрморта

Натюрморт с предметами

Натюрморт с природой

025 Жизнь 90 Живопись0 Живопись0

Синий натюрморт

Натюрморт

Цветочные художественные работы

Оригинальный натюрморт

Ретро-натюрморт

Живописные цветы

Просмотреть все популярные поисковые запросы натюрморты

Vile Manifestation · Hour of Devastation (HOU) #80 · Scryfall Magic: The Gathering Search

Существо — Ужас

Мерзкое воплощение получает +1/+0 за каждую карту с циклом на вашем кладбище.

Цикл {2} ( {2} , сбросьте эту карту: возьмите карту.)

Символы корчились и искривлялись, извергая темную, мстительную магию.

0/4

Проиллюстрировано Джейсон Феликс

Стандартный
Незаконно

Алхимия
Незаконно

Пионер
Юрисконсульт

Эксплорер
Юридический

Современный
Юридический

Драка
Незаконно

Наследие
Юридический

Исторический
Юридический

Винтаж
Юридический

Нищий
Незаконно

Командир
Юрисконсульт

Пенни
Незаконно

Клятвопреступник
Юридический

ru эс фр де это пт да ко RU 汉语 漢語 ⋮

долларов США евро
Отпечатки ТИКС
Амонхет обновленный
Час Разрушения 0,10 доллара США 0,02 € 0,03
Посмотреть все принты →
Набор инструментов
Купить эту карту
Изображения и данные
Примечания и правила Информация для Мерзкое проявление:
  • Первая способность Vile Manifestation учитывает только карты с циклическими способностями на вашем кладбище.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *