Цикл for
Цикл for в языке программирования Python предназначен для перебора элементов структур данных и других составных объектов. Это не цикл со счетчиком, каковым является for во многих других языках.
Что значит перебор элементов? Например, у нас есть список, состоящий из ряда элементов. Сначала берем из него первый элемент, затем второй, потом третий и так далее. С каждым элементом мы выполняем одни и те же действия в теле for . Нам не надо извлекать элементы по их индексам, заботиться, на каком из них список заканчивается, и следующая итерация бессмысленна. Цикл for сам переберет и определит конец.
>>> spisok = [10, 40, 20, 30] >>> for element in spisok: . print(element + 2) . 12 42 22 32
После ключевого слова for используется переменная под именем element . Имя здесь может быть любым. Нередко используют i . На каждой итерации цикла for ей будет присвоен очередной элемент из списка spisok . Так при первой прокрутке цикла идентификатор element связан с числом 10, на второй – с числом 40, и так далее. Когда элементы в spisok заканчиваются, цикл for завершает свою работу.
С английского «for» переводится как «для», «in» как «в». Перевести конструкцию с языка программирования на человеческий можно так: для каждого элемента в списке делать следующее (то, что в теле цикла).
В примере мы увеличивали каждый элемент на 2 и выводили его на экран. При этом сам список конечно же не изменялся:
>>> spisok [10, 40, 20, 30]
Нигде не шла речь о перезаписи его элементов, они просто извлекались и использовались. Однако бывает необходимо изменить сам список, например, изменить значение каждого элемента в нем или только определенных, удовлетворяющих определенному условию. И тут без переменной, обозначающей индекс элемента, случаев не обойтись:
>>> i = 0 >>> for element in spisok: . spisok[i] = element + 2 . i += 1 . >>> spisok [12, 42, 22, 32]
Но если мы вынуждены использовать счетчик, то выгода от использования цикла for не очевидна. Если знать длину списка, то почему бы не воспользоваться while . Длину можно измерить с помощью встроенной в Python функции len() .
>>> i = 0 >>> while i < len(spisok): . spisok[i] = spisok[i] + 2 # или spisok[i] += 2 . i = i + 1 # или i += 1 . >>> spisok [14, 44, 24, 34]
Кроме того, с циклом while мы избавились от переменной element .
Функция range()
Теперь пришло время познакомиться со встроенной в Python функцией range() . «Range» переводится как «диапазон». Она может принимать один, два или три аргумента. Их назначение такое же как у функции randrange() из модуля random . Если задан только один, то генерируются числа от 0 до указанного числа, не включая его. Если заданы два, то числа генерируются от первого до второго, не включая его. Если заданы три, то третье число – это шаг.
Однако, в отличие от randrange() , функция range() генерирует не одно случайное число в указанном диапазоне. Она вообще не генерирует случайные числа. Она генерирует последовательность чисел в указанном диапазоне. Так, range(5, 11) сгенерирует последовательность 5, 6, 7, 8, 9, 10. Однако это будет не структура данных типа «список». Функция range() производит объекты своего класса – диапазоны:
>>> a = range(-10, 10) >>> a range(-10, 10) >>> type(a)
Несмотря на то, что мы не видим последовательности чисел, она есть, и мы можем обращаться к ее элементам:
>>> a[0] -10 >>> a[5] -5 >>> a[15] 5 >>> a[-1] 9
Хотя изменять их нельзя, так как, в отличие от списков, объекты range() относятся к группе неизменяемых:
>>> a[10] = 100 Traceback (most recent call last): File "", line 1, in TypeError: 'range' object does not support item assignment
Цикл for и range()
Итак, зачем нам понадобилась функций range() в теме про цикл for ? Дело в том, что вместе они образуют неплохой тандем. For как цикл перебора элементов, в отличие от while , позволяет не следить за тем, достигнут ли конец структуры. Не надо вводить счетчик для этого, изменять его и проверять условие в заголовке. С другой стороны, range() дает последовательность целых чисел, которые можно использовать как индексы для элементов того же списка.
>>> range(len(spisok)) range(0, 4)
Здесь с помощью функции len() измеряется длина списка. В данном случае она равна четырем. После этого число 4 передается в функцию range() , и она генерирует последовательность чисел от 0 до 3 включительно. Это как раз индексы элементов нашего списка.
Теперь «соединим» for и range() :
>>> spisok = [14, 44, 24, 34] >>> for i in range(len(spisok)): . spisok[i] += 2 . >>> spisok [16, 46, 26, 36]
Еще раз обратим внимание, в заголовке цикла for берутся элементы вовсе не списка, а объекта range .
Практическая работа
- Заполните список случайными числами. Используйте в коде цикл for, функции range() и randint() .
- Если объект range (диапазон) передать встроенной в Python функции list() , то она преобразует его к списку. Создайте таким образом список с элементами от 0 до 100 и шагом 17.
- В заданном списке, состоящем из положительных и отрицательных чисел, посчитайте количество отрицательных элементов. Выведите результат на экран.
- Напишите программу, которая заполняет список пятью словами, введенными с клавиатуры, измеряет длину каждого слова и добавляет полученное значение в другой список. Например, список слов – [‘yes’, ‘no’, ‘maybe’, ‘ok’, ‘what’], список длин – [3, 2, 5, 2, 4]. Оба списка должны выводиться на экран.
Примеры решения и дополнительные уроки в pdf-версии курса
X Скрыть Наверх
Python. Введение в программирование
Прибавление в переменной к уже существующим символам ещё символы

Добавить данные в БД к уже существующим
Здравствуйте 🙂 Помоги пожалуйста в решении задачи) Например в БД есть строка которая имеет 3.
Добавить запись в столбец, к уже существующим записям
Как добавить запись в столбец, что бы при этом уже имеющиеся там записи не удалились, новую запись.

Запрет на создание папки с уже существующим именем
Добрый день! Есть bat файл для создания папки: @echo off chcp 1251 >nul echo Создание новой.
Как внести изменения к уже существующим записям
Буду краток, есть таблица в ней 58638 строк нужно чтоб в одном из столбцов к каждой записи в ячейке.
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
Конкатенация строк, все банально
Регистрация: 07.11.2015
Сообщений: 58
У меня почему-то не работает:
strout += n+count
Добавлено через 21 секунду
Вот весь код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
struser = input('Введите строку: ') strlist = list(struser) strout = 0 count = 1 n = strlist[0] for i in strlist: if i == n: count+=1 else: scount = str(count) sn = str(n) strout = +sn+scount n = i count = 1 print(strout)
103 / 81 / 54
Регистрация: 25.11.2016
Сообщений: 278
Сообщение от DJ338 
У меня почему-то не работает:
а вы уверены, что у вас все элементы приведены к строчному типу?
что-то мне подсказывает, что n и count это числовые переменные.
а конкатенировать строки с числами нельзя
Регистрация: 07.11.2015
Сообщений: 58
Сообщение от Ennjin 
что n и count это числовые переменные.
Так вот же —
scount = str(count) sn = str(n)
103 / 81 / 54
Регистрация: 25.11.2016
Сообщений: 278
Сообщение от DJ338 
Так вот же —
Я написал сообщение одновременно с вами.
strout равно нулю, вы пытаетесь к числу прибавить строку.
Нужно так
strout = sn+scount
Регистрация: 07.11.2015
Сообщений: 58
В программе мне надо в переменную strout прибавлять каждый пройденный цикл n и count
Добавлено через 12 секунд
Как это сделать?
103 / 81 / 54
Регистрация: 25.11.2016
Сообщений: 278
DJ338, Опишите задачу полностью, а то у вас не код, а лапша какая-то
Регистрация: 07.11.2015
Сообщений: 58
Надо чтобы программа сжимала строку (например, aaabbccc = a3b2c3). Не надо мне всю программу писать, просто с выходным результатом не идёт.
Добавлено через 41 секунду
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
struser = input('Введите строку: ') strlist = list(struser) strout = '0' count = 1 n = strlist[0] for i in strlist: scount = str(count) sn = str(n) if i == n: count+=1 else: strout = sn+scount n = i count = 1 print(strout)
Новая версия кода.
Добавлено через 56 секунд
почему то теперь он мне возвращает как был в начале 0 в strout так и выводится. Странно 0_о
Добавлено через 2 минуты
То есть мне надо в цикле делать результат (т.е. каждый раз, когда текущий символ (i) не равен предыдущему (n), программа в переменную strout должна прибавлять результат.)
Добавлено через 1 минуту
Но она не хочет подставлять к переменной strout результат, т.е когда в начале у переменной strout начальное значение = ‘0’, так она мне и возвращает этот ноль.
Добавлено через 1 минуту
счётчик работает, да к переменной эти символы не прибавляются.
Передача параметров в скрипт Python из командной строки.
При запуске скриптов, часто требуется указать какие-то дополнительные параметры, которые будут использованы в ходе работы программы. Конечно, можно при помощи функции input() получить данные от пользователя и сохранить их в переменных. Как говорится, дело вкуса. Но вместо множественного вызова функции input() есть намного более элегантное решение. Это передача параметров в скрипт python, непосредственно в командной строке — в момент вызова программы. Как это сделать? Давайте разберемся.
Для начала, наберите небольшую программу в своем редакторе. Сохраните её в папке C:\PyScript под именем input_var.py. Разумеется, папку и файл можете назвать как угодно, но тогда не забудьте указать свои данные при вызове скрипта в командной строке.
1. #-*- coding: UTF-8 -*- 2. from sys import argv 3. 4. script, first, second, third = argv 5. 6. print ("Этот скрипт называется: ", script) 7. print ("Значение первой переменной: ", first) 8. print ("Значение второй переменной: ", second) 9. print ("Значение третьей переменной: ", third)
Как видите, программа очень маленькая. Но её вполне хватит для демонстрации способа передачи данных в скрипт. После того, как следуя приведенным выше инструкциям, вы набрали и сохранили программу, вызовите командную строку Windows. После этого укажите имя интерпретатора python, путь к вызываемому файлу и три значения, разделяя все пробелами, как на рисунке ниже:

Рис. 1 Передача данных в скрипт Python
Если у вас скрипт хранится в другой папке — укажите свой путь к нему. После этого нажмите клавишу Enter на клавиатуре. В результате вы должны увидеть следующее:

Рис. 2 Результат выполнения программы
А теперь давайте разберем, как же это все работает.
Во второй строке мы импортируем argv из модуля sys. Во многих языках переменных argv — стандартное имя. В этой переменной хранятся данных, которые вы передаете сценарию. Пока нам достаточно знать, что эта переменная работает как «контейнер», в котором мы можем передать данные скрипту.
В четвертой строке мы производим «распаковку» содержимого argv в переменные. Слово «распаковка» может показаться странным, но в данном случае оно наиболее подходит. Фактически, мы сообщаем интерпретатору Python, что он должен взять данные из argv и последовательно поместить их в переменные, которые мы указали с левой стороны. После этого мы можем работать с ними как с обычными переменными, которым присвоили значения.
Вы можете указать свои значения вместо «15 два 105», но число значений, которые вы передаете скрипту, должно строго соответствовать количеству переменных, в которые «распаковывается» содержимое argv. Иначе вы увидите сообщение об ошибке:

Рис. 3 Ошибка распаковки данных.
Это сообщение возникло потому что мы передали в скрипт Python недостаточно данных. Если конкретнее, то строка ValueError прямо сообщает, что необходимо 4 значения, но указано 3 (имя скрипта передается автоматически).
Не забывайте, что все данные, которые мы передаем в программу python являются строковыми значениями. Поэтому параметры «10» и «105» сначала необходимо преобразовать в числовой тип при помощи функции int(), а только потом использовать в математических операциях. Будьте внимательны!
Скрипты Python против Bash
Не секрет, что в плане автоматизации каких-либо простых действий и тот, и другой вариант скриптов — мощное орудие. Прочел я эту статейку, и подумал — а чем мы хуже? Возьму, да и опишу, как автоматизировать простые консольные действия с помощью python-скриптов, даром что это тема довольно широкая.
Поехали!
Чтобы сделать скрипт на языке Python исполняемым в консоли — нужно, чтобы первая строчка имела вид
где /usr/bin/python — адрес интерпретатора Python, установленного в вашей системе. Ну и, естественно, пользователь, запускающий скрипт, должен иметь права для его выполнения. Что характерно, это будет работать только в NIX-системах. В Windows скрипты автоматически становятся исполняемыми при установке соответствия между программой-интерпретатором и типом файлов .py.
В целом скрипты Python во многом похожи на скрипты Bash, однако, на мой взгляд, они куда изящнее. Рассмотрим основные функции, которые могут нам понадобиться:
listdir(path)
Возвращает список имен файлов и папок в папке с именем path.
mkdir(path)
Создает папку с именем path.
makedirs(path)
Работает аналогично функции mkdir(), но автоматически создает все необходимые промежуточные папки.
remove(path)
Удаляет файл с именем path.
rmdir(path)
Удаляет каталог с именем path.
removedirs(path)
Работает аналогично функции rmdir(), но автоматически удаляет все родительские пустые папки.
rename(src, dst)
Переименовывает файл или папку с именем src в dst.
open(filename, flag)
Открывает файл с именем filename. Flag нужен для определения режима доступа: «r» — чтение, «w» — запись, «a» — дописывание.
read(size)
Считывает из файла данные размером size и возвращает в виде строки. Если аргумент опущен, то считывается все содержимое файла.
readline()
Считывает из файла одну строку, включая символ перехода на новую строку («\n»).
readlines()
Считывает из файла все строки и возвращает их в виде списка.
write(string)
Записывает строку string в файл.
writelines(lines)
Записывает строки из списка lines в файл. Символ перехода на новую строку между ними не добавляется.
tell()
Возвращает текущее положение в файле в байтах от начала файла.
seek(offset, whence)
Изменяет положение на offset. Характер определения положения зависит от аргумента whence (по умолчанию 0):
1) 0 – новое положение отсчитывается от начала файла;
2) 1 – от конца файла;
3) 2 – от текущего положения в файле;
truncate(size)
Усекает файл до размера size.
close()
Закрытие файла. Запомните! Любое открытие файла должно сопровождаться последующим закрытием с помощью этого метода.
А теперь — к более частным случаям.
Каша в голове? Ничего, сейчас мы разберем все подробнее.
Первым делом добавим немного интерактивности. Иначе смысл в нашем скрипте, если он ничего не будет спрашивать у пользователя? 🙂 Для ввода с клавиатуры используется метод raw_input(). Почему не просто input()? Потому что при считывании строки через input() она пропускается через интерпретатор, преобразующий введенную строку в команду. Руки так и чешутся ввести rm -rf… Ну ладно, погнали дальше! Синтаксис у функции такой:
login = raw_input(«Enter your name: «)
Здесь login — переменная, в которую считывается после нажатия Enter введенная пользователем строка.
Теперь давайте откроем файл и запишем в него какую-нибудь информацию.
gogo = open («/home/username/helloworld»,»w»)
gogo.write(«Hello, world!»)
gogo.close()
Кстати, рекомендую проверить, перед тем, как исполнять вышенаписанное, не завалялся ли у вас какой-нибудь нужный файл по адресу /home/username/helloworld? А то ведь все в нем сотрет и ничего не оставит на месте преступления, кроме «Hello, world!».
Ну а теперь давайте поработаем напрямую с консолью. Лично я в одном фрагменте кода доставал из выдачи команды host domen.com адрес хоста своего провайдера. Сказано — сделано.
import os
import re
vid = os.popen(«host l2tp.corbina.ru»)
re_dns = re.compile(r»([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)»)
for line in vid.readlines():
  hst=re_dns.search(line)
  if (hst != None):
    break
host=hst.group(0)
print «Corbina host adress is «+host
Ух ты, сколько всего… Ну, давайте разбираться. Построчно.
import os
import re
Подключаем стандартные библиотеки питона, чтобы все работало. os — библиотека для работы с системными вызовами и консолью. re — для работы с регулярными выражениями.
vid = os.popen («host l2tp.corbina.ru»)
Здесь мы как бы «вводим в консоль» команду host l2tp.corbina.ru, а то, что получилось, запихиваем в виде списка в переменную vid.
re_dns=re.compile(r»([\d]+)\.([\d]+)\.([\d]+)\.([\d]+)»)
Это, друзья мои, преобразование регулярного выражения. re_dns — это переменная, в которую записывается особый объект, полученный при помощи метода re.compile(). Сам синтаксис регулярного выражения я объяснять не буду, тем более что он простейший, скажу только — это самый простой вариант фильтра для IP-адресов.
for line in vid.readlines():
Здесь стартует цикл for. Думаю, вы уже заметили, что в языке Python синтаксис цикла for довольно сильно отличается от других языков. Здесь берется переменная line, в которую по очереди записываются строки из списка vid.readlines(). Закончатся строки в списке — закончится и цикл. Двоеточие в конце обозначает начало раздела операторов, которые происходят в цикле. Эти операторы должны отделяться табуляцией или несколькими пробелами. Как только мы написали все, что должно происходить в цикле — просто пишем очередной оператор с начала строки. Кстати, это также касается и условного оператора if, как видно ниже.
hst=re_dns.search(line)
А здесь мы применяем полученный ранее объект регулярного выражения к строке line, в результате чего в hst возвращается либо список подходящих под него строк, либо None в случае, если ничего не найдено.
if (hst != None):
  break
Проверка на тот самый None. Обратите еще раз внимание на отступ перед break. Как вы, наверное, знаете из других языков, этот самый break является оператором прерывания цикла. Таким образом, как только hst становится не равен None — цикл прерывается.
host=hst.group(0)
Как я уже говорил, в переменную hst возвращается список подходящих под регулярное выражение строк. На самом деле, точнее говоря, возвращается не список, а кортеж элементов. А поскольку мы прервали цикл, как только нашли первую подходящую строку — она и запишется в первый (он же нулевой) элемент кортежа, который мы благополучно достаем и записываем в host.
print «Corbina host adress is «+host
А потом выводим этот айпишник в консоль. Оператор print выводит переданную ему строку в консоль, да еще и допускает конкатенацию строк простым сложением.
Ну, собственно, вот и все для начала. Попрошу особо не ругать и не пинать за рваность повествования, если есть какие-то нарекания — с радостью прислушаюсь и постараюсь исправить.