Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 22.06.2019
Сообщений: 1

Изучение языка, цикл for. Не понимаю, как он работает

22.06.2019, 03:48. Показов 4306. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не понимаю, как работает цикл for. Объясните, пожалуйста
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.06.2019, 03:48
Ответы с готовыми решениями:

Не понимаю как работает цикл!
Приветствую! Начал долбить пхп... Есть код: function mult ($a) { static $result=1; //определение $result как статичной ...

Не понимаю как работает цикл в функции определения простых чисел.
var n = +prompt('n?', ''); function showPrimes(n) { for (var i = 2; i < n; i++) { if (!isPrime(i)) continue; ...

Нерабочий цикл. Я не понимаю почему он не работает. Я выделил нерабочий цикл пометками. Знает ли кто то причину?
uses GraphABC,ABCObjects; var i,xHead,yHead,z,appleX,appleY:integer; head,apple:CircleABC; score:TextABC; snake:array of...

9
 Аватар для hitomy
318 / 115 / 16
Регистрация: 07.10.2012
Сообщений: 542
22.06.2019, 09:46
Python
1
2
for i in [1, 2, 3, 4, 5]:
    print(i)
че тут не понимать? В переменную i присваиваются значения по очереди 1 , 2 , 3 , 4 , 5. И выводятся через print
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
22.06.2019, 11:02
Platinus, Для того, что бы понимать все тонкости работы с циклом for , нужно изучить понятия "итерируемые объекты" и "итератор" . Но для начала работы с циклом for достаточно знать следующее,
Синтаксис:
Python
1
2
3
4
for <target> in <object>:                  # Присваивает элементы объекта с переменной цикла    
       <statements>
       if <test>: break                            # Выход из цикла по условию
       if <test>: continue                      # Переход в начало цикла
или с else
Python
1
2
3
4
5
6
for <target> in <object>:                  # Присваивает элементы объекта с переменной цикла    
       <statements>
       if <test>: break                            # Выход из цикла, минуя блок else
       if <test>: continue                      # Переход в начало цикла 
else:
        <statements>                             # Если не была вызвана инструкция 'break'
Примеры:
Python
1
2
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
33
34
35
36
37
38
39
40
41
42
for el in [1, 2, 3]:
    print(el)
else:
    print('всё')
    
# 1 2 3 всё
 
# Проход по элементам словаря.
 
my_dict = {'a': 1, 'b': 2}
 
for item in my_dict.items():
    print(item)
 
# item — кортеж из двух элементов
# ('a', 1)
# ('b', 2)
 
# Распаковка кортежа item в две переменных key и value:
for key, value in my_dict.items():
    print('%s -> %s' % (key, value))
    
# a -> 1
# b -> 2
 
for el in [1, 2, 3]:
    print(el)
    if el == 2:
        break
else:
    print('этот текст не будет выведен')
 
# 1 2
 
for el in [1, 2, 3]:
    if el == 2:
        continue
    print(el)
else:
    print('всё')
    
# 1 3 всё
Инструкция, позволяющая производить проход по элементам объектов, поддерживающих итерирование.
Составная инструкция for in else для прохода (итерирования) по элементам последовательностей (таких как строки, списки, кортежи), либо других типов, поддерживающих итерирование.

(мое прим. Инструкция for осуществляет проход по элементам итерируемого объекта (или итератора), на каждом проходе осуществляя операцию извлечения элемента из итерируемого объекта по индексу, который функция for автоматически подставляет начиная с 0 до N -1 (N количество элементов в итерируемом объекте). Когда доходит до последнего элемента, то на следующем проходе, не получая элемента, возвращается сообщение об ошибке и функция for выходит из цикла, переходя к следующей инструкции в программе, следующей за циклом for).

Часть, идущая после in, будучи вычисленной единожды, должна предоставить объект, поддерживающий итерирование. Для данного объекта создаётся итератор. Далее переменной, предшествующей in, поочерёдно присваиваются значения [элементов], предоставляемые итератором и для каждого из них выполняется тело инструкции.

Для лучшего понимания инструкции for дополню.
Инструкция for при работе использует протокол итераций, зашитый внутри цикла for. По этому протоколу:
1. Если цикл for используется для итерируемого объекта X, то сначала из него создается итератор (с помощью встроенной функции iter(X) ).
2. Затем инструкция for при каждом проходе цикла использует метод итератора __next__, получая последовательно по одному объекту от итератора.
3. Если объект, к которому применяется цикл for, уже является итератором (например, объект файл), и потому уже имеет метод __next__, то шаг 1 протокола пропускается.

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

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

Добавлено через 13 минут
Platinus, Если простыми словами, на примере последовательности, то цикл for берет начиная с первого по одному элементу из последовательности. Присваивает этот элемент переменной цикла и выполняет тело цикла с этим значением переменной. Затем на следующем шаге, берет следующий элемент из последовательности и с этим значением переменной цикла вновь выполняет все действия в теле цикла. И так пока не переберет все элементы из последовательности.

Добавлено через 12 минут
Platinus, Пока Вы не знаете итераторы, просто примите за факт следующую особенность. Если у Вас в ходе выполнения цикла телом цикла будет изменяться итерируемый объект, который был поставлен в шапке цикла после in , то не смотря на изменение самого объекта, в шапке он меняться не будет, Так как там будет уже не сам объект, а его итератор, созданный первоначально.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
22.06.2019, 14:12
Цитата Сообщение от Viktorrus Посмотреть сообщение
Если не была вызвана инструкция 'break'
О! Спасибо, я-то удивлялся, почему ветка else срабатывает. Хотел от неё такого поведения:
Python
1
2
3
4
5
6
ls = [1, 2, 3]
if ls:
    for i in ls:
        pass
else:
    print('error')
0
1 / 1 / 0
Регистрация: 22.06.2019
Сообщений: 6
22.06.2019, 18:44
ветка елс бессмыслена .. так же как и в исключениях .. я ваабще удивляюсь зачем в питоне добавили в эти элементы елсе .. смысла никакого
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
22.06.2019, 18:52
Цитата Сообщение от pyrogrammer Посмотреть сообщение
так же как и в исключениях
В исключениях не бессмысленна, поскольку позволяет явно - согласно Python дзен - указать что сюда заходим, если все хорошо. Хотя, конечно, можно и без нее писать, но это менее питонично.
В цикле for - да, ветка else практически малоприменима, к тому ж неинтуитивна по назначению.
0
1 / 1 / 0
Регистрация: 22.06.2019
Сообщений: 6
23.06.2019, 12:10
Цитата Сообщение от Garry Galler Посмотреть сообщение
указать что сюда заходим, если все хорошо.
если все хорошо .. тогда мы этот елс должны клепать через каждую строчку "всего кода программы"? .... ну .... чтобы знать что было всё хорошо ???
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
23.06.2019, 12:33
Цитата Сообщение от pyrogrammer Посмотреть сообщение
тогда мы этот елс должны клепать через каждую строчку "всего кода программы"?
Нет. else в блоке try except пишется один раз. Кроме того, нормальный программист никогда не будет злоупотреблять try except на каждый чих, поскольку сущестует куча возможностей делать предусмотренные той или иной библиотекой проверки.
0
1732 / 970 / 199
Регистрация: 22.02.2018
Сообщений: 2,693
Записей в блоге: 6
23.06.2019, 14:43
Вот у Лутца простой пример использования в цикле for компонента else.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
>>> items = [“aaa”, 111, (4, 5), 2.01] # Множество объектов 
>>> tests = [(4, 5), 3.14]             # Ключи, которые требуется отыскать 
>>> 
>>> for key in tests:                  # Для всех ключей 
...     for item in items:             # Для всех элементов 
...         if item == key:            # Проверить совпадение 
...             print(key, “was found”)
...             break 
...     else: 
...         print(key,not found!) 
... 
(4, 5) was found 
3.14 not found!
Кстати из этого примера я понял, где можно использовать else.
Когда в цикле мы ожидаем какого то события, и если оно произошло прерываем цикл с помощью break. Если же оно не произошло, то цикл отработает до конца. А как после цикла узнать найдено событие или нет? Я обычно использую флаг.
А оказывается можно вместо флага использовать else. Ну это кому как больше нравится, кому флаг или какой либо еще способ, а кому else. Питон предоставляет вам возможность выбора.
Так же и в исключениях. else не обязателен, не хотите не используйте. А кто то предпочитает использовать его. Питон демократичный язык, свобода выбора.
1
 Аватар для m0nte-cr1st0
1043 / 578 / 242
Регистрация: 15.01.2019
Сообщений: 2,178
Записей в блоге: 1
23.06.2019, 15:51
for/else весьма полезной бывает.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.06.2019, 15:51
Помогаю со студенческими работами здесь

Не правильно работает цикл for while или я чего то не понимаю
Здравствуйте. Происходит очень странная вещь. Помогите пожалуйста кто сможет. Сделал цикл for while, но он почему то считает не так как...

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

изучение языка
у меня специальность прикладная математика и информатика курс второй ,мне придется изучить язык С++ ? Все ли программисты вузов...

Изучение языка
Всем привет. Прочитал пару учебников по питону. Сложностей по основам никаких не возникло, всё просто и понятно. Упражнения лёгкие. ...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru