Цикл питон: Циклы for и while, операторы break и continue, волшебное слово else

Содержание

операторы циклов while и for, операторы break и continue

Смотреть материал на видео

Ни одна сколь-нибудь серьезная программа на Python не обходится без циклов. Что такое циклы?

Представьте, что спортсмен бегает по дорожкам стадиона и решил: пока не прошел один час, он бежит. То есть, пока выполняется условие (оно истинно – не прошел час), циклично выполняются некие действия – бегун бежит. Вот такую операцию на уровне языка Python выполняет оператор цикла while, имеющий следующий синтаксис:

Смотрите как в Python записывается группа операторов (тело цикла): вся группа должна иметь один и тот же сдвиг относительно оператора while (обычно ставят четыре пробела или символ табуляции). Причем такой отступ строго обязателен – это элемент синтаксиса python. И благодаря этому текст программы становится наглядным и хорошо читаемым. Это, безусловно, один из плюсов данного языка.

Однократное выполнение тела цикла называется итерацией. То есть, может быть первая итерация, вторая итерация, N-я итерация и так далее.

Давайте в качестве примера с помощью оператора цикла while вычислим вот такую вот сумму:

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

S=0; i=1
while i <= 1000:
    S += 1/i
    i += 1
print(S)

В качестве выражения в цикле while можно писать все те же самые условия, что и в условном операторе if. Например, можно вычислять сумму S пока либо i<=1000, либо S < 5. Такое условие запишется так:

while i <= 1000 and S < 5:

здесь цикл будет работать пока i<=1000 и S<5 как только одно из подусловий станет ложным, все составное условие становится ложным и цикл завершит свою работу.

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

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

А что будет, если условие в цикле while будет истинным всегда? В этом случае мы получим «вечный» цикл, программа фактически зависнет и наш спортсмен будет обречен на бесконечный бег по кругу.

S=0; i=1
while 1 : S += 1
print(S)

Далее, цикл while может иметь необязательный блок else, который идет после цикла:

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

И здесь часто возникает вопрос: а чем блок else отличается от блока операторов, просто идущих после блока while? Ведь когда цикл while завершится, мы так и так перейдем к последующим операторам! Однако, тут есть один нюанс. Любой оператор цикла в Python может быть досрочно прерван с помощью оператора

break

Как только он встречается в теле цикла, цикл (в данном случае while) завершает свою работу. Это как если вдруг возник пожар и спортсмен не дожидаясь окончания круга спешно бежит со стадиона. В этом случае спортсмену уже не до душа, он сразу хватает свои вещи и убегает из спортивного комплекса. То есть, при досрочном прерывании работы цикла while, конструкция else не выполняется и управление переходит на последующие операторы. Вот в чем отличие блока else от операторов, стоящих непосредственно после while. Например:

S=0; i=-10
while i < 100:
    if i == 0: break
    S += 1/i
    i=i+1
else:
    print("Сумма вычислена корретно")
print(S)

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

Сумма вычислена корректно

означающее выполнение блока else.

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

continue

Этот оператор позволяет пропускать тело цикла и перейти к следующей итерации, не прерывая работу самого цикла. Например, мы хотим перебрать все целые значения от -4 до 4, исключая значение 0. Такую программу можно реализовать так:

S=0; i=-5
while i < 4:
    i=i+1
    if i == 0: continue
    print(i)
    S += 1/i
print(S)

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

Так как при i=0 срабатывает условие и выполняется оператор continue. Все что находится после этого оператора пропускается и цикл продолжается уже со значением i=1.

Вот так работают эти два управляющих оператора break и continue, которые можно использовать во всех операторах циклов.

Оператор цикла for

Следующий и, наверное, самый часто используемый оператор цикла – это оператор for, который имеет такой синтаксис:

for <переменная> in <список> :
      операторы 1…N

Например,

for x in 1,5,2,4:
    print(x**2)

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

начальное значение, шаг, конечное значение

Для этого используется генератор последовательностей

range(start, stop, step)

Например, если мы запишем его вот так:

for x in range(1,5,1):
    print(x)

то в консоли увидим числа от 1 до 4 с шагом 1. То есть, range генерирует последовательность в интервале

[1;5)

Последнее значение не входит в интервал. Если в нашем примере поставить шаг отрицательный -1, то конечное значение 5 не может быть достигнуто и в этом случае Python возвратит пустую последовательность:

for x in range(1,5,-1):
    print(x)

Если нам нужны числа от 5 до 1, то следует записывать range в таком виде:

for x in range(5,0,-1):
    print(x)

Причем, в range можно записывать только целые числа, с вещественными он не работает.

Давайте перепишем нашу программу подсчета суммы

с помощью цикла for, получим:

S=0
for i in range(1, 1001, 1):
    S += 1/i
print(S)

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

Вторым примером рассмотрим задачу вычисления значений линейной функции

Программа будет выглядеть так:

k = 0. 5; b = 2
lst = [0, 0.1, 0.2, 0.3, 0.4, 0.5]
for x in lst:
    print(x*k+b)

Этот пример показывает, что для перебора значений счетчика x можно использовать списки, сформированные ранее в программе. (О списках мы подробнее будем говорить на последующих занятиях). Здесь же приведем еще один пример:

msg = "Hello World!"
for x in msg:
    print(x)

Он показывает, что строку можно воспринимать как список и перебирать с помощью цикла for.

Также в цикле for можно использовать блок else, о котором мы говорили ранее:

for <переменная> in <список> :
      операторы 1…N
else:
      операторы 1…N

Вложенные циклы

Итак, мы с вами рассмотрели два оператора циклов: while и for. Все эти циклы можно комбинировать друг с другом. То есть, создавать вложенные циклы (цикл внутри цикла).

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

В частности, такие вложенные циклы очень полезны для перебора элементов матрицы

Тогда мы делаем первый цикл от 1 до N и вложенный от 1 до M

A = [ [1,2,3], [4,5,6] ]
N=2; M=3
for i in range(N):
    for j in range(M):
       print(A[i][j])
    print()

Или для подсчета вот такой двойной суммы ряда

Программа будет выглядеть так:

S=0; M=10; N=5
for i in range(1,N+1):
    for j in range(1,M+1):
        S += i*j
print(S)

Мы здесь сначала пробегаем все значения j от 1 до M при фиксированном i=1, затем, значение i увеличивается на 1, становится 2 и при этом i снова пробегаются значения j от 1 до M. И так пока i не превысит значение N. То есть, второй цикл вложен вот в этот первый. И таких вложений можно делать сколько угодно.

Вот так работают операторы циклов в Python и теперь вы знаете как их можно применять на практике.

Видео по теме

#1. Первое знакомство с Python Установка на компьютер

#2. Варианты исполнения команд. Переходим в PyCharm

#3. Переменные, оператор присваивания, функции type и id

#4. Числовые типы, арифметические операции

#5. Математические функции и работа с модулем math

#6. Функции print() и input(). Преобразование строк в числа int() и float()

#7. Логический тип bool. Операторы сравнения и операторы and, or, not

#8. Введение в строки. Базовые операции над строками

#9. Знакомство с индексами и срезами строк

#10. Основные методы строк

#11. Спецсимволы, экранирование символов, row-строки

#12. Форматирование строк: метод format и F-строки

#13. Списки — операторы и функции работы с ними

#14. Срезы списков и сравнение списков

#15. Основные методы списков

#16. Вложенные списки, многомерные списки

#17. Условный оператор if. Конструкция if-else

#18. Вложенные условия и множественный выбор. Конструкция if-elif-else

#19. Тернарный условный оператор. Вложенное тернарное условие

#20. Оператор цикла while

#21. Операторы циклов break, continue и else

#22. Оператор цикла for. Функция range()

#23. Примеры работы оператора цикла for. Функция enumerate()

#24. Итератор и итерируемые объекты. Функции iter() и next()

#25. Вложенные циклы. Примеры задач с вложенными циклами

#26. Треугольник Паскаля как пример работы вложенных циклов

#27. Генераторы списков (List comprehensions)

#28. Вложенные генераторы списков

#29. Введение в словари (dict). Базовые операции над словарями

#30. Методы словаря, перебор элементов словаря в цикле

#31. Кортежи (tuple) и их методы

#32. Множества (set) и их методы

#33. Операции над множествами, сравнение множеств

#34. Генераторы множеств и генераторы словарей

#35. Функции: первое знакомство, определение def и их вызов

#36. Оператор return в функциях. Функциональное программирование

#37. Алгоритм Евклида для нахождения НОД

#38. Именованные аргументы. Фактические и формальные параметры

#39. Функции с произвольным числом параметров *args и **kwargs

#40. Операторы * и ** для упаковки и распаковки коллекций

#41. Рекурсивные функции

#42. Анонимные (lambda) функции

#43. Области видимости переменных. Ключевые слова global и nonlocal

#44. Замыкания в Python

#45. Введение в декораторы функций

#46. Декораторы с параметрами. Сохранение свойств декорируемых функций

#47. Импорт стандартных модулей. Команды import и from

#48. Импорт собственных модулей

#49. Установка сторонних модулей (pip install). Пакетная установка

#50. Пакеты (package) в Python. Вложенные пакеты

#51. Функция open. Чтение данных из файла

#52. Исключение FileNotFoundError и менеджер контекста (with) для файлов

#53. Запись данных в файл в текстовом и бинарном режимах

#54. Выражения генераторы

#55. Функция-генератор. Оператор yield

#56. Функция map. Примеры ее использования

#57. Функция filter для отбора значений итерируемых объектов

#58. Функция zip. Примеры использования

#59. Сортировка с помощью метода sort и функции sorted

#60. Аргумент key для сортировки коллекций по ключу

#61. Функции isinstance и type для проверки типов данных

#62. Функции all и any. Примеры их использования

#63. Расширенное представление чисел. Системы счисления

#64. Битовые операции И, ИЛИ, НЕ, XOR. Сдвиговые операторы

#65. Модуль random стандартной библиотеки

Циклы в Python по спискам и словарям, как работает цикл for в Python

При написании программ часто возникает потребность делать одно и то же действие для нескольких объектов. Например, сохранить 5 пользователей:

user1.save()
user2.save()
user3.save()
user4.save()
user5.save()

Кода пока не очень много, но что будет, когда пользователей будет 20? А что если нужно обработать 3 миллиона пользователей вашего сайта? Помогут циклы.

Цикл по списку

Цикл — это запуск одного и того же кода для каждого элемента в списке. Вот как выглядит пример выше с использованием списка и циклов:

users = [user1, user2, user3, user4, user5]
for user in users:
  user.save()

Каждый элемент списка users по очереди подставится в переменную user и для него запустится код с отступом.

Что, всё ещё копипастить пользователей в список? Нет, чаще всего такое не требуется и код выглядит так:

users = get_users_from_database()  # возвращает список всех пользователей
for user in users:
  user.do_something()  # работа с каждым пользователем по очереди
  user.save()

Снова, каждый пользователь по очереди попадёт в переменную user, у него вызовется метод . do_something(), а затем метод .save().

Цикл по словарю

Словарь очень легко можно превратить в 2 списка:

capitals = {
  "Russia": "Moscow",
  "England": "London",
  "China": "Beijing",
  "Italy": "Rome"
}

Первый список — ключи словаря (первые элементы в парах):

print(capitals.keys())
# ['Russia', 'England', 'China', 'Italy']

Второй список — значения (вторые элементы в парах):

print(capitals.values())
# ['Moscow', 'London', 'Beijing', 'Rome']

По умолчанию, если передать в for словарь, он начнёт перебирать ключи:

for country in capitals:
  print(country)
# Russia
# England
# China
# Italy

Но так же через ключи словаря можно добраться и до значений:

for country in capitals:
  capital = capitals[country]
  print("столица {} это {}".format(country,capital))
# столица Russia это Moscow
# столица England это London
# столица China это Beijing
# столица Italy это Rome

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

print(capitals)
# {
#   "Russia": "Moscow",
#   "England": "London",
#   "China": "Beijing",
#   "Italy": "Rome"
# }
print(capitals.items())
# [
#     ('Russia', 'Moscow'),
#     ('England', 'London'),
#     ('China', 'Beijing'),
#     ('Italy', 'Rome')
# ]

И теперь цикл сможет итерироваться сразу по двум переменным:

for country, capital in capitals.items():
  print("столица {} это {}".format(country, capital))
# столица Russia это Moscow
# столица England это London
# столица China это Beijing
# столица Italy это Rome

Выполнить код несколько раз

Что, если нужно выполнить код заранее известное количество раз? например, сгенерировать 10 случайных чисел и вывести на экран? По какому такому списку мне перебиать элементы?

В таком случаевыручает функция range().

Что она делает проще показать на примерах:

  • range(5) — вернёт список из 5 элементов, начинаяс нуля: [0, 1, 2, 3, 4]
  • range(2,10) — вернёт список из элементов от 2 до 10: [2, 3, 4, 5, 6, 7, 8, 9]
  • range(2,10,3) — вернёт список из каждого третьего элемента от 2 до 10: [2, 5, 8]

Теперь, научившись генерировать списки нужной длины, можно сгенерировать 10 случайных чисел:

import random
for number in range(10):
  print(random. randint(1,100))

В терминал выведется 10 случайных чисел от 1 до 100. Работает так же, как и ранее: range(10) — это список с числами от 0 до 9. Они по очереди подставятся в переменную number, но ни на что не повлияют, т.к. в коде «внутри for» переменная number не используется.

Строка — тоже “список”

Python запросто переводит одни типы данных в другие. Он может притвориться, что строка — это список из её символов:

text = "Девман"
for letter in text:
  print(letter)
# Д
# е
# в
# м
# а
# н

Можно превратить строку в список более явно с помощью функции list():

text = "Девман"
my_list = list(text)
print(my_list)
# ['Д', 'е', 'в', 'м', 'а', 'н']

Что дальше

  • Примеры использования циклов и условий

19. Для циклов | Учебник по Python

Автор Бернд Кляйн . Последнее изменение: 29 июня 2022 г.

На этой странице ➤

Введение

Как и цикл while, цикл for является оператором языка программирования, т. е. оператором итерации, который позволяет повторять блок кода определенное количество раз.

Практически нет языков программирования без циклов for, но цикл for существует во многих различных вариантах, то есть как синтаксис, так и семантика различаются от одного языка программирования к другому.

Различные виды петель for:

  • Контролируемый подсчетом цикл for (трехвыраженный цикл for)

    Это самый распространенный тип. Этот оператор используется в C. Заголовок цикла for такого типа состоит из выражения управления циклом с тремя параметрами. Обычно он имеет вид: для (А; Я; Я) A — это часть инициализации, Z определяет выражение завершения, а I — выражение подсчета, где переменная цикла увеличивается или увеличивается. Примером такого цикла является цикл for языка программирования C: для (я=0; я <= п; я++) Такой цикл for не реализован в Python!

  • Векторизация для петель

    Они ведут себя так, как будто все итерации выполняются параллельно. То есть, например, все выражения в правой части операторов присваивания оцениваются до присваивания.

  • Цикл на основе итератора

    Наконец, мы подошли к тому, который используется Python. Этот вид цикла for повторяет перечисление набора элементов. Обычно он характеризуется использованием неявного или явного итератора. На каждом шаге итерации переменной цикла присваивается значение в последовательности или другом наборе данных. Такой цикл for известен в большинстве оболочек Unix и Linux, и именно он реализован в Python.

Живое обучение Python

Нравится эта страница? Мы предлагаем живых обучающих курса Python , охватывающих содержание этого сайта.

См.: Обзор курсов Live Python

Зарегистрироваться здесь

Синтаксис цикла For

Как мы упоминали ранее, цикл for Python — это итератор, основанный на цикле for. Он проходит через элементы списков, кортежей, строк, ключей словарей и других итераций. Цикл Python for начинается с ключевого слова «for», за которым следует произвольное имя переменной, которая будет содержать значения следующего объекта последовательности, который проходится пошагово. Общий синтаксис выглядит так:

 для <переменной> в <последовательности>:
    <утверждения>
еще:
    <утверждения>
 

Элементы объекта последовательности присваиваются один за другим переменной цикла; чтобы быть точным, переменная указывает на элементы. Для каждого элемента выполняется тело цикла.

Пример простого цикла for в Python:

 языков = ["C", "C++", "Perl", "Python"]
для языка на языках:
    печать (язык)
 

ВЫХОД:

 С
С++
Перл
питон
 

Блок else является особым; в то время как программисты Perl знакомы с ним, это неизвестная концепция для программистов C и C++. Семантически он работает точно так же, как необязательный else цикла while. Он будет выполнен только в том случае, если цикл не был «разорван» оператором break. Таким образом, он будет выполнен только после того, как все элементы последовательности в заголовке будут использованы.

Если в потоке программы цикла for необходимо выполнить оператор break, цикл будет прерван, и поток программы продолжится с первого оператора, следующего за циклом for, если он вообще есть. Обычно операторы break завернуты в условные операторы, например.

 edibles = ["бекон", "спам", "яйца", "орехи"]
для еды в съестных припасах:
    если еда == "спам":
        print("Больше никакого спама, пожалуйста!")
        сломать
    print("Отлично, вкусно" + еда)
еще:
    print("Я так рад: никакого спама!")
print("Наконец-то я наелся")
 

ВЫВОД:

 Отличный, вкусный бекон
Пожалуйста, больше никакого спама!
Наконец я закончил набивать себя
 

Удалив «спам» из нашего списка съестных припасов, мы получим следующий вывод:

 $ Python для .py
Отличный, вкусный бекон
Отличные, вкусные яйца
Отличные, вкусные орешки
Я так рада: никакого спама!
Наконец я закончил набивать себя
$
 

Может быть, наше отвращение к спаму не настолько велико, чтобы мы хотели перестать потреблять другую пищу. Теперь это вызывает оператор continue в игру. В следующем небольшом скрипте мы используем оператор continue , чтобы продолжить наш список съестных припасов, когда мы столкнулись со спамом. Так что продолжить мешает нам есть спам!

 edibles = ["бекон", "спам", "яйца","орехи"]
для еды в съестных припасах:
    если еда == "спам":
        print("Больше никакого спама, пожалуйста!")
        Продолжить
    print("Отлично, вкусно" + еда)
print("Наконец-то я наелся")
 

ВЫВОД:

 Отличный, вкусный бекон
Пожалуйста, больше никакого спама!
Отличные, вкусные яйца
Отличные, вкусные орешки
Наконец я закончил набивать себя
 

Функция range()

Встроенная функция range() — это правильная функция для перебора последовательности чисел. Он генерирует итератор арифметических прогрессий: Пример:

Диапазон
(5)
 

ВЫВОД:

 диапазон (0, 5)
 

Этот результат не говорит сам за себя. Это объект, способный выдавать числа от 0 до 4. Мы можем использовать его в цикле for, и вы увидите, что это означает:

 для i в диапазоне (5):
    печать (я)
 

ВЫХОД:

 0
1
2
3
4
 

range(n) генерирует итератор для обработки целых чисел, начиная с 0 и заканчивая (n -1). Чтобы создать список с этими числами, мы должны привести range() к list(), как мы делаем в следующем примере.

Список
 (диапазон (10))
 

ВЫВОД:

 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
 

range() также может вызываться с двумя аргументами:

 диапазон (начало, конец)
 

Приведенный выше вызов создает итератор списка чисел, начинающихся с begin (включительно) и заканчивающихся на единицу меньше, чем число end .

Пример:

 диапазон(4, 10)
 

ВЫХОД:

 диапазон (4, 10)
 
Список
 (диапазон (4, 10))
 

ВЫВОД:

 [4, 5, 6, 7, 8, 9]
 

До сих пор приращение range() было равно 1. Мы можем указать другое приращение с помощью третьего аргумента. Приращение называется шаг . Может быть как отрицательным, так и положительным, но не нулевым:

 диапазон (начало, конец, шаг)
 

Пример с шагом:

Список
 (диапазон (4, 50, 5))
 

ВЫВОД:

 [4, 9, 14, 19, 24, 29, 34, 39, 44, 49]
 

Можно и в обратном порядке:

Список
 (диапазон (42, -12, -7))
 

ВЫВОД:

 [42, 35, 28, 21, 14, 7, 0, -7]
 

Функция range() особенно полезна в сочетании с циклом for, как мы можем видеть в следующем примере. Функция range() предоставляет числа от 1 до 100 для цикла for, чтобы вычислить сумму этих чисел:

 н = 100
сумма = 0
для счетчика в диапазоне (1, n+1):
    сумма = сумма + счетчик
print("Сумма от 1 до %d: %d" % (n, сумма))
 

ВЫВОД:

 Сумма от 1 до 100: 5050
 

Живое обучение Python

Нравится эта страница? Мы предлагаем живых обучающих курса Python , охватывающих содержание этого сайта.

См.: Обзор интерактивных курсов Python

Предстоящие онлайн-курсы

Основы Python для начинающих

Интенсивный продвинутый курс

Python для инженеров и ученых

Объектно-ориентированное программирование на Python

Зарегистрироваться здесь

Расчет чисел Пифагора

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

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

Итак, определение очень простое: Три целых числа, удовлетворяющие условию a2+b2=c2, называются числами Пифагора.

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

 из математического импорта sqrt
n = int(input("Максимальное число?"))
для a в диапазоне (1, n+1):
    для b в диапазоне (a, n):
        c_square = а**2 + б**2
        c = интервал (sqrt (c_square))
        если ((c_square - c**2) == 0):
            напечатать (а, б, в)
 

ВЫХОД:

 3 4 5
5 12 13
6 8 10
7 24 25
8 15 17
9 12 15
9 40 41
10 24 26
11 60 61
12 16 20
12 35 37
13 84 85
14 48 50
15 20 25
15 36 39
16 30 34
16 63 65
18 24 30
18 80 82
20 21 29
20 48 52
20 99 101
21 28 35
21 72 75
24 32 40
24 45 51
24 70 74
25 60 65
27 36 45
28 45 53
28 96 100
30 40 50
30 72 78
32 60 68
33 44 55
33 56 65
35 84 91
36 48 60
36 77 85
39 52 65
39 80 89
40 42 58
40 75 85
40 96 104
42 56 70
45 60 75
48 55 73
48 64 80
48 90 102
51 68 85
54 72 90
56 90 106
57 76 95
60 63 87
60 80 100
60 91 109
63 84 105
65 72 97
66 88 110
69 92 115
72 96 120
80 84 116
 

Перебор списков с помощью range()

Если вам нужно получить доступ к индексам списка, не рекомендуется использовать цикл for для перебора списков. Мы можем получить доступ ко всем элементам, но индекс элемента недоступен. Однако есть способ получить доступ как к индексу элемента, так и к самому элементу. Решение заключается в использовании range() в сочетании с функцией длины len():

 Фибоначчи = [0, 1, 1, 2, 3, 5, 8, 13, 21]
для i в диапазоне (len (фибоначчи)):
    печать (я, фибоначчи [я])
Распечатать()
 

ВЫХОД:

 0 0
1 1
2 1
3 2
4 3
5 5
6 8
7 13
8 21
 

Примечание. Если вы примените len() к списку или кортежу, вы получите количество элементов этой последовательности.

Живое обучение Python

Нравится эта страница? Мы предлагаем живых обучающих курса Python , охватывающих содержание этого сайта.

См.: Обзор курсов Live Python

Зарегистрируйтесь здесь

Итерация списка с побочными эффектами

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

 цветов = ["красный"]
для i в цветах:
    если я == "красный":
        цвета += ["черный"]
    если я == "черный":
        цвета += ["белый"]
печать (цвета)
 

ВЫВОД:

 ['красный', 'черный', 'белый']
 

Чтобы избежать этих побочных эффектов, лучше всего работать с копией с помощью оператора среза, как показано в следующем примере:

 цветов = ["красный"]
для i в цветах[:]:
    если я == "красный":
        цвета += ["черный"]
    если я == "черный":
        цвета += ["белый"]
печать (цвета)
 

ВЫВОД:

 ['красный', 'черный']
 

Мы еще могли что-то сделать, чего делать не следовало. Мы изменили список «цвета», но наше изменение никак не повлияло на цикл. Элементы, которые должны быть зациклены, оставались неизменными во время итераций.

Упражнения с циклами for

Упражнение 1

Это упражнение посвящено числу Рамануджана-Харди. Есть небольшой анекдот о математике Г.Х. Харди, когда он посетил индийского математика Шринивасу Рамануджана в больнице. Это выглядит так:

 Помню, однажды я зашел к нему, когда он был болен, в Путни. Я ездил в такси номер 1729 и заметил, что номер показался мне довольно скучным и что я надеюсь, что это не было неблагоприятным предзнаменованием. «Нет, — ответил он, — это очень интересное число; это наименьшее число, которое можно выразить как сумму двух кубов двумя разными способами».
 92$ четырьмя различными способами с целыми положительными числами a и b . 

Живое обучение Python

Нравится эта страница? Мы предлагаем живых обучающих курса Python , охватывающих содержание этого сайта.

См.: Обзор курсов Live Python

Зарегистрироваться здесь

Решения

Решение упражнения 1

 импорт математики
число = 1729
n = int (число ** (1/3))
кубы = {}
для я в диапазоне (n + 1):
    для j в диапазоне (i):
        результат = я ** 3 + j ** 3
        если результат в кубах:
            кубы[результат].append((i, j))
        еще:
            кубы[результат] = [(i,j)]
        если результат > число:
            сломать
для x в кубах:
    если len(cubes[x]) > 1:
        печать (х, кубы [х])
 

ВЫВОД:

 1729 [(10, 9), (12, 1)]
 

Решение упражнения 2

 импорт математики
число = 1729
n = целое (число ** (1/2))
результаты = {}
для диапазона (n+1):
    для b в диапазоне (a):
        результат = а**2 + а*б + б**2
        если результат:
            результаты[результат].append((a, b))
        еще:
            результаты[результат] = [(а,б)]
        если результат > число:
            сломать
для x в результатах:
    если len(результаты[x]) > 3:
        печать (х, результаты [х])
 

ВЫВОД:

 1729 [(25, 23), (32, 15), (37, 8), (40, 3)]
 

Живое обучение Python

Нравится эта страница? Мы предлагаем живых обучающих курса Python , охватывающих содержание этого сайта.

См.: Обзор интерактивных курсов Python

Предстоящие онлайн-курсы

Основы Python для начинающих

Интенсивный курс повышения квалификации

Python для инженеров и ученых

Объектно-ориентированное программирование на Python

Зарегистрируйтесь здесь

Python For Loop — PYnative

В этой статье вы узнаете, что такое цикл for в Python и как его написать. Мы используем цикл для , когда хотим повторить блок кода фиксированное количество раз.

Цикл for — это часть инструкции потока управления, которая помогает вам понять основы Python.

Содержание

  • Что такое цикл for в Python
    • Пример: вывести первые 10 чисел, используя цикл for
  • цикл for с диапазоном()
  • Как работает цикл for
  • Зачем использовать цикл for?
  • Оператор If-else в цикле for
  • Операторы управления циклом в цикле for
    • Оператор Break в цикле
    • Оператор Continue в цикле for
    • Оператор Pass в цикле for
  • Блок Else в цикле for 20 Reverse

    90 Цикл

  • Обратная итерация с использованием функции reversed()
  • Обратный цикл for с использованием range()
  • Вложенный для циклов
    • Пока цикл внутри для цикла
  • для цикла в одной строке
  • Доступ к индексу в цикле для
  • Итерация строки с использованием цикла для
  • Итерация словаря 90 с использованием цикла для6 loop
  • Что такое цикл for в Python

    В Python цикл for используется для перебора последовательностей, таких как список, строка, кортеж и других итерируемых объектов, таких как диапазон.

    С помощью цикла for мы можем перебирать каждый элемент, присутствующий в последовательности, и выполнять один и тот же набор операций для каждого элемента. Используя циклы для в Python, мы можем эффективно автоматизировать и повторять задачи.

    Суть в том, что с помощью цикла for мы можем повторять блок операторов фиксированное количество раз. Давайте разберемся с этим на примере.

    В отличие от циклов while, которые выполняются до тех пор, пока условие не станет истинным, для циклов выполняется фиксированное количество раз, вам нужно знать, сколько раз повторять код.

    • Неизвестное количество раз : Например, попросите пользователя угадать счастливый номер. Вы не знаете, сколько попыток потребуется пользователю, чтобы угадать правильно. Это может быть 1, 20 или, может быть, неопределенный срок. В таких случаях используйте цикл while .
    • Фиксированное количество раз : Распечатайте таблицу умножения 2. В этом случае вы знаете, сколько итераций вам нужно. Здесь нужно 10 итераций. В таком случае используйте для петли .
    for loop в Python

    Синтаксис for loop

     for i in range/sequencee:
        заявление 1
        заявление 2
        оператор n 
    • В синтаксисе i — это повторяющаяся переменная, а диапазон указывает, сколько раз должен выполняться цикл. Например, если список содержит 10 чисел, цикл for будет выполняться 10 раз для вывода каждого числа.
    • В каждой итерации цикла переменная i получить текущее значение.

    Пример : Выведите первые 10 чисел, используя цикл for
    • Здесь мы использовали функцию range() для генерации целых чисел от 0 до 9
    • Затем мы использовали цикл for для перебора чисел, полученных функцией range()
    • В теле цикла мы напечатали текущее число.
     для числа в диапазоне (10):
        print(num) 

    Вывод :

     0
    1
    2
    3
    4
    5
    6
    7
    8
    9

    Цикл for с range()

    Функция range() возвращает последовательность чисел, начинающуюся с 0 (по умолчанию), если начальный предел не указан, и увеличивается на 1 (по умолчанию) до конечного предел достигнут.

    Функция range() используется с циклом для указания диапазона (сколько раз) будет выполняться кодовый блок. Давайте посмотрим на примере.

    for loop with range()

    Пример: вывести сумму всех четных чисел от 10 до 20

    • Установить переменную суммы на ноль.
    • Используйте диапазон (2, 22, 2) , чтобы получить все четные числа от 2 до 20. (Здесь значение шага равно 2, чтобы получить четное число, потому что четные числа делятся на 2)
    • Затем используйте цикл for для перебора каждого числа
    • На каждой итерации добавляйте текущее число к переменной суммы с помощью арифметического оператора.
     сумма = 0
    для я в диапазоне (2, 22, 2):
        сумма = сумма + я
    печать (сумма)
    # вывод 110 

    Как работает цикл

    для

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

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

    Пример: Вычислить квадрат каждого числа из списка

    Список Python — это упорядоченная последовательность элементов. Предположим, у вас есть список из 10 чисел. Давайте посмотрим, как вычислить квадрат каждого числа, используя цикл вместо .

     чисел = [1, 2, 3, 4, 5]
    # перебираем каждый элемент в списке num
    для я в цифрах:
        # ** оператор экспоненты
        квадрат = я ** 2
        print("Квадрат:", i, "есть:", квадрат) 

    Вывод:

     Квадрат: 1 равен: 1
    Квадрат: 2 равен: 4
    Квадрат: 3 равен: 9
    Площадь: 4 составляет: 16
    Квадрат: 5 равен: 25 

    Примечание :

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

    Блок-схема цикла for

    Зачем использовать цикл

    for ?

    Давайте посмотрим на использование цикла вместо в Python.

    • Определенная итерация : Когда мы знаем, сколько раз мы хотим запустить цикл, мы используем циклы с контролируемым счетом, такие как циклы for. Он также известен как определенная итерация. Например, Рассчитайте процент 50 студентов. здесь мы знаем, что нам нужно повторить цикл 50 раз (по 1 итерации для каждого ученика).
    • Уменьшает сложность кода. : Цикл повторяет определенный блок кода определенное количество раз. Это уменьшает повторение строк кода, тем самым уменьшая сложность кода. Используя для циклов и для циклов, мы можем эффективно автоматизировать и повторять задачи.
    • Цикл по последовательностям : используется для перебора списков, строк, кортежей, словарей и т. д. и выполнения над ними различных операций в зависимости от условий, заданных пользователем.

    Пример: вычислить среднее значение списка чисел

     чисел = [10, 20, 30, 40, 50]
    # определенная итерация
    # запустить цикл 5 раз, потому что список содержит 5 элементов
    сумма = 0
    для я в цифрах:
        сумма = сумма + я
    list_size = длина (числа)
    среднее = сумма / размер_списка
    print(average) 

    Output :

     30.0 

    If-else in for loop

    В этом разделе мы увидим, как использовать операторы if-else с циклом. Если-иначе используется, когда требуется условная итерация. Например, выведите имена учащихся, набравших более 80 процентов.

    Оператор if-else проверяет условие и, если условие равно True , он выполняет блок кода, присутствующий внутри блока if, а если условие имеет значение False, он выполняет блок кода, присутствующий внутри блока else.

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

     если условие:
        блок заявлений
    еще:
        блок утверждений 

    Пример : Вывести все четные и нечетные числа

    • В этой программе оператор цикла for сначала перебирает все элементы от 0 до 20.
    • Далее, оператор if проверяет, является ли текущее число четным или нет. Если да, то печатает. В противном случае выполняется блок else.
     для i в диапазоне (1, 11):
        если я % 2 == 0:
            print('Четное число:', i)
        еще:
            print('Нечетное число:', i) 

    Вывод:

     Нечетное число: 1
    Четное число: 2
    Нечетное число: 3
    Четное число: 4
    Нечетное число: 5
    Четное число: 6
    Нечетное число: 7
    Четное число: 8
    Нечетное число: 9
    Четное число: 10 

    Практическая задача : –

    Используйте цикл for для создания списка чисел от 9 до 50, кратных 2.

    Показать решение
     для i в диапазоне (9, 51):
        # делим каждое число на 2
        если я%2==0:
            print(i) 

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

    Теперь давайте узнаем о трех типах операторов управления циклом, т. е. break , continue и pass .

    Break for loop

    Оператор break используется для завершения цикла . Вы можете использовать оператор break всякий раз, когда хотите остановить цикл. Просто вам нужно ввести разрыв внутри цикла после оператора, после которого вы хотите разорвать цикл.

    Когда встречается оператор break , Python останавливает текущий цикл, и поток управления переносится на следующую строку кода, следующую сразу за циклом.

    Пример: разорвать цикл, если число число больше 15

    • В этой программе цикл for перебирает каждое число из списка.
    • Затем оператор if проверяет, больше ли текущее значение 15. Если да, то разорвать цикл, иначе вывести текущее число
     чисел = [1, 4, 7, 8, 15, 20, 35, 45, 55]
    для я в цифрах:
        если я > 15:
            # разорвать петлю
            сломать
        еще:
            print(i) 

    Вывод:

     1
    4
    7
    8
    15 

    Примечание : Если оператор break используется внутри вложенного цикла (цикл внутри другого цикла), он завершит самый внутренний цикл.

    Оператор continue в цикле for

    Оператор continue пропускает текущую итерацию цикла и сразу же переходит к следующей итерации

    Используйте оператор continue , если вы хотите немедленно перейти к следующей итерации цикла. Проще говоря, когда переводчик нашел continue оператор внутри цикла пропускает оставшийся код и переходит к следующей итерации.

    Оператор continue пропускает блок кода в цикле только для текущей итерации. Цикл не завершается, а продолжается в следующей итерации, игнорируя указанный блок кода. Давайте посмотрим на использование оператора continue на примере.

    Пример: Подсчитать общее количество «m» в заданной строке.

    • В этой программе 9Оператор цикла 0129 for перебирает каждую букву заданной строки.
    • Далее оператор if проверяет, является ли текущий символ m или нет. Если это не m, он переходит к следующей итерации, чтобы проверить следующую букву. иначе он увеличивает счет
     имя = "Мария Меннен"
    количество = 0
    для char в имени:
        если символ != 'м':
            Продолжить
        еще:
            количество = количество + 1
    print('Общее количество m равно:', count) 

    Вывод:

     Общее количество m равно: 2 

    Примечание : В случае внутреннего цикла продолжается только внутренний цикл.

    Оператор Pass в цикле for

    Оператор pass является пустым оператором, т. е. при его выполнении ничего не происходит. В основном он используется в пустых функциях или классах. Когда интерпретатор находит в программе оператор pass , он не возвращает никакой операции.

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

    Давайте рассмотрим использование оператора pass на примере.

     число = [1, 4, 5, 3, 7, 8]
    для i в числе:
        # вычислить умножение в будущем, если требуется
        pass 

    Блок Else в

    for loop

    То же, что и оператор if , Python позволяет нам использовать оператор else вместе с циклом for. В Python цикл for может иметь блок else , который будет выполняться, когда цикл завершится нормально . Определение в противном случае часть с петлей для не является обязательной.

    иначе блок будет пропущен, когда

    • for цикл резко завершится
    • оператор break используется для разрыва цикла

    Пример 1: Блок Else в цикле for

    В этом примере мы печатаем первые 5 чисел, и после успешного выполнения цикла интерпретатор выполнит блок else.

     для i в диапазоне (1, 6):
        печать (я)
    еще:
        распечатать("Готово")
     

    Выход:

     1 
    2
    3
    4
    5
    Готово

    Пример 2: Оба Break и ERSE . из 5, и после этого мы используем оператор break , чтобы остановить цикл. Поскольку цикл завершается внезапно, блок else не будет выполняться.

     количество = 0
    для i в диапазоне (1, 6):
        количество = количество + 1
        если количество > 2:
            сломать
        еще:
            печать (я)
    еще:
        печать("Готово") 

    Вывод:

     1 
    2

    Обратный цикл

    До сих пор мы изучали прямой цикл в цикле for на различных примерах. Теперь мы узнаем об обратной итерации цикла.

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

    Существует три способа повторения цикла for в обратном направлении

    • Обратный цикл for с использованием диапазон()
    • Обратный цикл for с использованием функции reversed()

    Обратная итерация с использованием функции reversed()

    Мы можем использовать встроенную функцию reversed() с циклом for для изменения порядка элементов, и это самый простой способ выполнить обратный цикл.

    Пример :

     # Перевернутые числа с помощью функции reversed()
    список1 = [10, 20, 30, 40]
    для числа в обратном порядке (список1):
        печать (число)
      

    Выход:

     40
    30
    20
    10 

    Обратный цикл for с помощью range()

    Мы можем использовать встроенную функцию range() с циклом for , чтобы изменить порядок элементов. range()  генерирует целые числа между заданным начальным целым числом и конечным целым числом.

     print("Обратные числа с использованием цикла for")
    число = 5
    # начало = 5
    # стоп = -1
    # шаг = -1
    для числа в (диапазон (число, -1, -1)):
        печать (число) 

    Вывод:

    4
    3
    2
    1
    0

    Пример 3: Перевернуть список с помощью цикла

     числа = [1, 42,]
    для i в числах[::-1]:
        Печать (I) 

    Выход:

    4
    3
    2
    1

    Вложенные

    для петли

    вложенные для петли - для петли внутри еще для .

    Вложенный цикл состоит из одного цикла внутри другого. Он в основном используется с двумерными массивами. Например, печать цифр или узоров в виде звезд. Здесь внешний цикл — это не что иное, как строка, а внутренний цикл — это столбцы.

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

    Синтаксис вложенных циклов for :

     # внешний цикл for
    для элемента в последовательности
       # внутренний цикл for
       для элемента в последовательности:
           тело внутреннего цикла for
       тело внешнего цикла for
    прочая отчетность 

    Пример : Вложенный цикл for для печати следующего шаблона

     *
    * *
    * * *
    * * * *
    * * * * * 
     строк = 5
    # внешний цикл
    для я в диапазоне (1, строки + 1):
        # внутренний цикл
        для j в диапазоне (1, i + 1):
            распечатать("*", конец=" ")
        print('') 
    Вложенный цикл for
    • В этой программе внешний цикл - это число печатаемых строк.
    • Количество строк равно пяти, поэтому внешний цикл будет выполняться пять раз
    • Далее внутренний цикл определяет общее количество столбцов в каждой строке.
    • Для каждой итерации внешнего цикла количество столбцов увеличивается на 1
    • В первой итерации внешнего цикла количество столбцов равно 1, в следующей — 2 и так далее.
    • Итерация внутреннего цикла равна количеству столбцов.
    • На каждой итерации внутреннего цикла мы печатаем звездочку

    Цикл While внутри цикла for

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

    Пример: Печать таблицы умножения первых 5 чисел с использованием цикла for и цикла while

    • В этой программе мы повторяем первые пять чисел одно за другим, используя внешний цикл и диапазон функцию
    • Далее, в каждой итерации внешнего цикла, мы будем использовать внутренний цикл while для печати таблицы умножения текущего числа
     # внешний цикл
    для i в диапазоне (1, 6):
        print('Таблица умножения:', i)
        количество = 1
        # внутренний цикл для вывода таблицы умножения текущего числа
        в то время как количество < 11:
            печать (я * количество, конец = '')
            количество = количество + 1
        print('\n') 

    for цикл в одной строке

    Мы также можем сформулировать оператор цикла for в одну строку, чтобы уменьшить количество строк кода. Давайте посмотрим пример этого.

    Пример: Вывести четные числа, добавив 1 к нечетным числам в списке

     нечетное = [1, 5, 7, 9]
    четный = [i + 1 для нечетного i, если i % 2 == 1]
    печать (даже)
     

    Выход :

     [2, 6, 8, 10] 

    Доступ к индексу

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

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

    Есть три способа получить доступ к индексу в цикле for, давайте рассмотрим каждый по одному

    Пример 1: Вывести элементы списка с номером индекса, используя функцию enumerate()

    В этой программе функция for цикл выполняет итерацию по списку и отображает элементы вместе с их порядковым номером.

     чисел = [4, 2, 5, 7, 8]
    для i, v в перечислении (числа):
        print('Числа[', i, '] =', v) 

    Вывод:

     Числа[ 0 ] = 4
    Числа [ 1 ] = 2
    Числа [ 2 ] = 5
    Числа [3] = 7
    Numbers[ 4 ] = 8 

    Пример 2: Печать элементов списка с их порядковым номером с использованием функции range()

     чисел = [1, 2, 4, 6, 8]
    размер = длина (числа)
    для я в диапазоне (размер):
        print('Индекс:', i, " ", 'Значение:', числа [i])
     

    Выход:

     Индекс: 0 Значение: 1
    Индекс: 1 Значение: 2
    Индекс: 2 Значение: 4
    Индекс: 3 Значение: 6
    Индекс: 4 Значение: 8 

    Итерация

    Строка с использованием для цикла

    Перебирая строку с использованием цикла для цикла , мы можем выполнять множество строковых операций. Давайте посмотрим, как выполнять различные операции со строками, используя цикл for .

    Пример 1: Доступ ко всем символам строки

     имя = "Джесса"
    для я в имени:
        напечатать (я, конец = ' ') 

    Вывод:

     Je s s a 

    Пример 2: Повторить строку в обратном порядке

     name = "Jessa"
    для i в имени[::-1]:
        напечатать (я, конец = '')
     

    Вывод:

     as s e J 

    Пример 3: Перебор определенного набора символов в строке

     name = "Jessa watson"
    для char в имени[2:7:1]:
        print(char, end=' ') 

    Вывод:

     s s a w 

    Пример 5: Перебор слов в предложении с помощью функции split() .

     dialog = «Помни, Рэд, надежда — это хорошо, может быть, даже лучше всего, а хорошее никогда не умирает»
    # разделить по пробелам
    для слова в dialog.split():
        печать (слово)
     

    Вывод:

     Помните,
    Красный,
    надеяться
    является
    а
    хороший
    предмет,
    может быть
    в
    Лучший
    из
    вещи,
    и
    нет
    хороший
    предмет
    Когда-либо
    dies 

    Итерировать список, используя цикл

    for

    Сначала давайте узнаем, что такое список. Список Python — это упорядоченный набор элементов различных типов данных. Это означает, что списки упорядочены по порядковым номерам, начиная с 0 и заканчивая общим количеством элементов-1. Элементы списка заключены в квадрат [] Кронштейны.

    Ниже приведены несколько примеров списка Python.

     цифр = [1,2,4,6,7]
    игроки = ["Месси", "Роналдо", "Неймар"] 

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

    Пример 1: Перебор списка

     чисел = [2, 3, 5, 6, 7]
    для числа в цифрах:
        печать(число) 

    Вывод:

     2 
    3
    5
    6
    7

    Пример 2: Перебор списка с использованием цикла for и диапазона .

     чисел = [1, 2, 3, 6, 7]
    размер = длина (числа)
    для я в диапазоне (размер):
        Печать (Числа [i]) 

    Выход:

     1 
    2
    3
    6
    7

    Пример 3: Понимание

     Числа = [1, 2, 3, 7, 8]]
    # понимание списка
    [print(i) for i в цифрах] 

    Вывод:

     1 
    2
    3
    7
    8

    Итерация словаря с использованием

    для цикла

    Сначала давайте узнаем, что такое словарь. Словарь Python используется для хранения элементов в формате пары ключ-значение. Он не позволяет дублировать элементы. Он заключен в {}.

    Оставить комментарий

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

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