TGViewer
Python: задачки и вопросы Python: задачки и вопросы @quiz_python · 6.93K subscribers
Post #4485 764
Главный подвох здесь в том, что переменная цикла num остаётся доступной после цикла и сохраняет последнее значение из итерируемой последовательности.​

Разбор по шагам:
🔘Создание исходных данных:
𝚗𝚞𝚖𝚜 = 𝟷, 𝟸, 𝟹, 𝟺, 𝟻, 𝟼, 𝟽, 𝟾, 𝟿 # список чисел от 1 до 9.​
𝚗𝚞𝚖𝚜_𝚎𝚟𝚎𝚗 = [] # пустой список для чётных чисел.​

🔘Цикл фильтрации:
𝚏𝚘𝚛 𝚗𝚞𝚖 𝚒𝚗 𝚗𝚞𝚖𝚜: # перебираем каждое число.​
▸ 𝚒𝚏 𝚗𝚘𝚝 𝚗𝚞𝚖 % 𝟸: # проверяем чётность (остаток от деления на 2 равен 0).​
▸▸ 𝚗𝚞𝚖𝚜_𝚎𝚟𝚎𝚗.𝚊𝚙𝚙𝚎𝚗𝚍(𝚗𝚞𝚖) # добавляем чётные числа: 𝟸, 𝟺, 𝟼, 𝟾.​

После цикла:
𝚗𝚞𝚖𝚜_𝚎𝚟𝚎𝚗 = 𝟸, 𝟺, 𝟼, 𝟾 # четыре элемента.​
𝚗𝚞𝚖 = 𝟿 # переменная цикла сохраняет последнее значение из 𝚗𝚞𝚖𝚜.​

🔘Попытка удаления:
𝚗𝚞𝚖𝚜_𝚎𝚟𝚎𝚗.𝚙𝚘𝚙(𝚗𝚞𝚖) # пытаемся вызвать pop(9).​
Метод list.pop(index) принимает индекс, а не значение.​
Список имеет длину 4, индексы от 𝟶 до 𝟹, поэтому индекс 𝟹 выходит за границы и вызывает IndexError: pop index out of range.​

🔘Почему это неочевидно:
Вообще говоря pop() удаляет последний элемент, если не указан индекс, но здесь указан индекс 𝚗𝚞𝚖 = 𝟿.​ Переменная 𝚗𝚞𝚖 после цикла не «сбрасывается», а сохраняет последнее значение, что часто приводит к ошибкам.​
— Если нужно удалить последний элемент, следует использовать 𝚗𝚞𝚖𝚜_𝚎𝚟𝚎𝚗.𝚙𝚘𝚙() без аргументов.​
— Если нужно удалить по значению, следует использовать 𝚗𝚞𝚖𝚜_𝚎𝚟𝚎𝚗.𝚛𝚎𝚖𝚘𝚟𝚎(𝚗𝚞𝚖).​

Кратко выводы

Правило: переменные цикла for в Python не локальны внутри цикла, они остаются в той же области видимости, где был цикл.​ После цикла for num in nums: переменная num доступна и равна последнему элементу из nums.​ Это часто приводит к ошибкам, если забыть, что num сохранилась, и использовать её в коде после цикла.
  • ✍ 9
More from @quiz_python
  1. Sep 22, 2026Развёрнутое пояснение: 1. Вызов build_batch создаёт генератор, но его тело пока не исполня…
  2. Sep 22, 2026Post #4884
  3. Sep 22, 2026Развёрнутое пояснение: 1. Вызывается load_config, управление переходит в блок try. 2. Перв…
  4. Sep 22, 2026Post #4882
  5. Sep 21, 2026Развёрнутое пояснение: 1. make_handlers создаёт пустой список handlers. 2. Цикл дважды при…
  6. Sep 21, 2026Post #4880
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →