Академия: Конспект второй недели курса Программирование на Python
Продолжаем изучение Python. В этом уроке будут циклы и списки.
Начнём с циклов.
Что такое циклы и как их использовать
Цикл - это не что иное как перебор каких либо данных. Под данными можно понимать переменную типа массив или просто набор чисел от нуля до бесконечности. Но, так как бесконечно программа работать не должна - из цикла нужно будет сделать выход, или попросту остановить его.
Оператор while
Данный оператор удобно использовать когда необходимо перебрать ряд натуральных чисел.
Синтаксис оператора такой:
while {логическое условие} :
{действия}
Например нам нужно перебрать и вывести на экран числа от 10 до 17:
a = 10
while a <= 17:
print(a)
a += 1
По коду видно, что цикл будет работать до тех пор, пока a<=17. Изначально a=10, а в конце цикла к a прибавляется 1.
Попробуем более сложный пример, например найдём сумму всех чётных чисел в интервале между 5 и 33
i = 5
s = 0
while i <= 33:
if i % 2 == 0:
s += i
i += 1
print(s)
В этом примере я складывал сумму в переменную s. Причём только в том случае, если переменная i делилась на 2 без остатка.
Прерывание цикла
На каждой итерации(при каждом прохождение по циклу) его можно прервать. Причём можно прервать цикл и выйти из него, или же прервать текущую итерацию и продолжить выполнение цикла со следующей.
Прерывание с выходом из цикла осуществляется оператором break
Например мы перебираем цифры от 0 до 100 и нужно выйти из цикла, если мы дошли до 25
i = 0
while i <= 100:
print(i)
if i >= 25:
break
i += 1
Как вы видите - при достижении i = 25 цикл успешно остановился.
Прерывание только текущей итерации осуществляется оператором continue
Теперь будем прерывать цикл на всех нечётных числах:
i = 0
while i <= 10 :
if i % 2 == 1:
i += 1
continue
print(i)
i += 1
Тут при нечётном значении i цикл не прерывался, а выполнялась его следующая итерация.
Оператор for
Данный оператор удобен когда нужно перебрать конкретный набор данных, например список чисел.
for i in 2, 3, 8:
print(i)
Чтобы не создавать список вручную - можно использовать функцию range
Она может принимать до трёх аргументов.
Это:
- старт (по-умолчанию 0)
- стоп (значение по-умолчанию отсутствует)
- шаг (по-умолчанию 1)
range(5) // стоп = 5
range(2, 7) // старт = 3, стоп = 7
range(1, 30, 3) // старт = 1, стоп = 30, шаг = 3
Рассмотрим последний пример:
Вложенные циклы
Да, циклы можно вкладывать друг в друга неограниченное количество раз. То есть если у вас есть один вложенный цикл - он будет "прогоняться" при каждом прогоне "родительского" цикла. Рассмотрим простой пример:
Как видно - главный цикл перебирает числа от 0 до 30 с шагом 5, а внутренний перебирает по 3 числа, начиная от переменной верхнего цикла.
Важно - обратите внимание, что переменная для перебора внутреннего цикла y у меня не совпадает с переменной верхнего i. Так как все эти переменные находятся в одной области видимости - то переменная i из верхнего цикла попала бы во внутренний и сломала логику работы скрипта. Попробуйте заменить for y на for i.
Таким работу циклами можно представить следующей диаграммой
Строки
Ранее мы работали со строковыми переменными. Сейчас мы рассмотрим строку - как список символов, к каждому из которых можно обратиться.
Чтобы обратиться к конкретному символу строки - нужно передать его номер в квадратных скобках. Нумерация начинается с 0.
a = 'String'
print(a[4]) //выведет n
И сразу попробуем перебрать строку как список переменных:
for b in 'Golos'
print(b):
Если указать отрицательный индекс - то выведется символ с конца:
a = 'Computer'
print(a[-3]) // выведется t
Нумерация с конца начинается с -1.
Если вы указали слишком большое или слишком маленькое число и "вышли за границы" слова - то вы получите пустую строку, ошибки не будет.
Также можно извлечь сразу часть строки, указав диапазон индексов.Первая цифра - начальный индекс, вторая - конечный. Один из индексов можно не указывать
Например:
var = 'My Golos blog'
print(var[3:8])
print(var[:8])
print(var[9:])
print(var[3:-5])
Функции для работы со строками
В реальных приложениях очень часто приходится работать со строками. Большинство типичных задач уже решены в языке Python и вынесены в функции.
Чтобы применить функцию к переменной - нужно указать её после переменной, отделив точкой.
Например:
b = 'My var'
b.upper()
Ниже рассмотрим самые распространённые функции:
- upper() - переведёт строку в верхний регистр
- lower() - переведёт строку в нижний регистр
- count(p) - посчитает количество вхождений p в строку
- find(p) - вернёт индекс первого вхождения p в строку(-1 если вхождения нет)
- replace(f, r) - заменит все f на r
Рассмотрим на практике:
a = 'Golos'
print(a.lower())
print(a.upper())
print(a.count('o'))
print(a.find('s'))
print(a.replace('o', '0'))
Регистр букв важен, и не забывайте, если вы передаёте в функцию переменную - она должна быть без кавычек, а если строку - то в кавычках. Я везде передавал строки.
Списки
Список - это ни что иное, как массив переменных. Каждая переменная - это строка, число, логическая переменная или другой список.
Все элементы списка помещаются между квадратными скобками и отделяются друг от друга запятыми.
students = ['Ivan', 'Maria', 'Alexandr']
Количество элементов списка можно подсчитать функцией len()
students = ['Ivan', 'Maria', 'Alexandr']
c = len(students)
print(c)
Обратиться к элементу списка можно так же, как и к символу в строке.
h = ['abc', 'def', 'ghi']
print(h[1]) // выведет 'def
Нумерация так же начинается с нуля.
Сложение списков
Два списка можно легко сложить, как обыкновенные переменные. Результатом будет список, состоящий из всех элементов обоих списков.
Обратите внимание, если в обоих списках присутствует одинаковая строка - она будет в результирующем списке дважды.
Добавление и удаление элементов в списках.
Для добавления элемента в конец списка можно использовать функцию append.
Для добавления элемента в нужное место списка следует воспользоваться функцией insert, передав ей индекс и сам элемент
students = ['Ivan', 'Maria', 'Alexandr']
students.append('Olga')
print(students) // выведет ['Ivan', 'Maria', 'Alexandr', 'Olga']
students += ['Ivan']
print(students) //выведет ['Ivan', 'Maria', 'Alexandr', 'Olga', 'Ivan']
students.insert(2, 'Kate')
print(students) //выведет ['Ivan', 'Maria', 'Kate', 'Alexandr', 'Olga', 'Ivan']
Ещё можно добавить элемент в список по индексу.
Например:
students = ['Ivan', 'Maria', 'Alexandr']
students[1] = 'Sofia'
print(students) // выведет ['Ivan', 'Sofia', 'Alexandr']
Удалить элемент из списка можно по его значению или индексу.
Рассмотрим на примере:
a = ['Tom', 'Bob', 'Samanta', 'Glock']
a.remove('Samanta')
print(a) //выведет ['Tom', 'Bob', 'Glock']
del a[2]
print(a) //выведет ['Tom', 'Bob']
Важно - если удалять элемент по значению - то будет удалён только первый найденный элемент с таким значение.
Поиск элемента в списке
Для нахождения элемента в списке можно использовать конструкцию if in, или функцию index.
Пример:
students = ['Ivan', 'Maria', 'Alexandr']
if 'Ivan' in students:
print('Ivan is student')
if 'Sofia' not in students:
print('Sofia not a student')
Как вы заметили - если нужно проверить отсутствие элемента в списке - перед оператором in можно поставить ключевое слово not
Если же вам нужно узнать индекс элемента - то находится он так:
students = ['Ivan', 'Maria', 'Alexandr']
ind = students.index('Maria')
print(ind) //выведет 1
Если элемент не будет найден в списке - то переменной ind не будет передано значения.
Сортировка списков
Можно отсортировать список, сохранив его при этом, или просто отсортировать и передать его уже отсортированный в другую переменную, сохранив при этом его изначальный порядок.
Например:
students = ['Ivan', 'Maria', 'Alexandr']
sorted_students = sorted(students)
print(students)
print(sorted_students)
Как видите - список students сохранён в первоначальной форме.
Сортировка исходного списка:
students = ['Ivan', 'Maria', 'Alexandr']
students.sort()
print(students)
В этом случае список students уже претерпел изменения
Для того, чтобы отобразить список "задом наперёд" - следует воспользоваться функцией reverse
students = ['Ivan', 'Maria', 'Alexandr']
students.reverse()
print(students)
Многомерные списки
Как я писал выше - элементами списка могут быть и другие списки.
Такая запись будет абсолютно валидна:
persons = [['Linda', 'Sofia', 'Maria'], ['Ivan', 'Jon', 'Alexandr'], 'Bob']
Первые два элемента списка persons тоже являются списками. Третий элемент - строка.
Элемент вложенного списка списка выводится точно так же, как и не вложенного:
persons = [['Linda', 'Sofia', 'Maria'], ['Ivan', 'Jon', 'Alexandr'], 'Bob']
print(persons[0][2]) //выведет Maria
print(persons[1][1]) //выведет Jon
Так, разобравшись с основами работы со списками можно свести знания в такую диаграмму
Что для меня было наиболее интересным и впечатляющим в данной неделе курса?
Понравилась реализация хранения в одной переменной массива из множества переменных. Возможность упорядочить их, а так же удобно к ним обращаться. Возможности циклов позволяют не только просмотреть содержимое списков, но реализовать "фильтрацию" на выводе и любую другую обработку элементов списка.