• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Статья Учим Python. Часть 5(Списки и Циклы)

Всем привет! Мы продолжаем наше изучение, и сегодня речь пойдет о циклах и списках. Также мы напишем своего мини чат-бота(если не успеем то в след. части)

Списки.
Списки - это еще один тип данных позволяющий хранить в себе 2 и более элементов.

В списках мы можем хранить как числа и строки, так и переменные. Списки записываются в квадратных скобках и элементы списка перечисляют через запятую.
Код:
>>> x = 2017
>>> sposok = ["C", "O", "D", "E", "B", "Y", x]
>>> print(spisok)
['C', 'O', 'D', 'E', 'B', 'Y', 2017]

Каждый элемент списка имеет свой интекс. Но
индекс элемента = порядковый номер элемента - 1

То есть, если я хочу вывести первый элемент списка и допустим 4-й то индекс первого это 0 а индекс четвертого это 3.
Код:
>>> list = [1, 2, 3,4]
>>> print(list[0])
1
>>> print(list[1])
2

...

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

Код:
list = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
    ]
print(list)
Код:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Не пугайтесь! С ними работать тоже очень просто. Допустим я хочу вывести число 8. Первым делом, я смотрю индекс элемента списка в котором находится 8 и индекс восьмерки в этом списке. Теперь для вывода мы будем использовать такое

Где

  • x - индекс списка
  • y - индекс 8-и
И получаем следующую команду вывода

Код:
print(list[2][1])

Операции со списками.

Со списками, как и с другими типами данных в Python, мы можем проводить опрелеленные операции. Например присвоить новое значение элементу списка.
Код:
>>> abc = ["a", "b", "c"]
>>> print(abc)
['a', 'b', 'c']
>>> abc[1] = "Codeby"
>>> print(abc)
['a', 'Codeby', 'c']

Также как и над строками можно проводить операции сложения/умножения.

Код:
>>> x = [1, 2, 3]
>>> y = [9, 8, 4]
>>> z = y + z
>>> c = y * x[1]
>>> print(z)
[9, 8, 4, 1, 2, 3]
>>> print(c)
[9, 8, 4, 9, 8, 4]

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

Код:
>>> list = ["Codeby", "AL04E", "Python"]
>>> print("Codeby" in list)
True

Команда print("Codeby" in list) как бы говорит
Присутствует ли в списке list элемент 'Codeby'?

Если он там есть, то выведет True.
А если нет, то аналогично - False.

Еще, если добавить not к команде, то можно проверить "Точно ли элемента нет в списке".

Код:
>>> x = [228, 666, 777]
>>> print(not 777 in x)
False
>>> print(not 444 in x)
True

Функции для списков.

list.append(x) - добавляет элемент x в конец списка list

len(list) - выводит длинну списка list(кол-во элементов).

list.insert(x, y) - добавляет новый элемент x в позицию y в списке list.

list.index(x) - ищет элемент x в списке list.

Код:
>>> x = [1, 2]
>>> x.append(3)
>>> print(x)
[1, 2, 3]
>>> x.insert(0, 0)
>>> print(x)
[0, 1, 2, 3]
>>> print(len(x))
4
>>> x.index(2)
2


Range.

Функция range преднозначена для генерации последовательности чисел. В использовании она проста. Но перед ее использованием ознакомимся с функцией list().

Функция list преобразует тип в список. Например

Код:
text = "Codeby"
output = list(text)
print(output)

И мы увидем

Код:
['C', 'o', 'd', 'e', 'b', 'y']

Возратимся к range))
Для генерации простого списка используют следующую конструкцию

Код:
list(range(x))

Код:
>>> print(list(range(5))
[0, 1, 2, 3, 4]

Причем x - это кол-во элементов списка. По умолчанию диапазон от 0 до x. Но мы можем указать и свой диапазон
Код:
>>> x = list(range(3, 7))
>>> print(x)
[3, 4, 5, 6]

И мы получаем список диапазоном от 3 до 7.

Но и на этом не все. У функции range есть и 3-ий аргумент. Он задает интервал всей последовательности.

Код:
>>> c = [0, 10, 2]
>>> print(c)
[0, 2, 4, 6, 8]

Т.е. каждый последующий элемент больше предыдущего на 2.

Закрепим, вобщем вся конструкция такова

len(range(x, y, z))

x -- то с чего начать последовательность.
y -- кол-во элементов последователеости.
z -- интервал между элементами.


Что такое циклы и с чем их едят.
Постараюсь объяснить как только можно понятней. Вы и без меня прекрасно знаете что циклы это последовательность действий которая выполняется n раз. А циклы в программировании это тоже самое, но выполняются они при определенном условии( если оно возвращает True). В Python присутствуют две инструкции для циклов. Это for и while. Как раз ими мы сейчас и займемся.

FOR.

Цикл For значительно короче чем цикл while. В этом главное отличие.

Конструкция:
Код:
for условие:
    действие 1
    действие 2

И так, первый пример

Код:
for i in range(0, 10):
    print(i,"\n")

Здесь переменная i - это переменная счетчик. Она принемает все значения последовательности range(0, 10). Тем самым, значение переменной счетчика выведется на экран 10 раз.

Код:
0
1
2
3
4
5
6
7
8
9

Так же мы можем выводить элементы списков

Код:
x = ["a", "b", "c", "1",  "2"]
for i in x:
    print(x[i],"\n")

Здесь все просто, мы благодаря переменной счетчику выводим все элементы посредством ее изменения. Т.е. когда значение i равно например 3-м, то выведет элемент '1'

Код:
a
b
c
1
2

Давайте выведем 5 раз сообщение "Мы любим Codeby!".

Код:
msg = "Мы любим Codeby!\n"
for k in range(0, 5):
    print(msg)

И получаем

Код:
Мы любим Codeby!
Мы любим Codeby!
Мы любим Codeby!
Мы любим Codeby!
Мы любим Codeby!

While.

While - выполняется при определенном условии.

Конструкция:
Код:
while условие:
    действие 1
    действие 2

На примере все так

Код:
i = 0 # переменная счетчик
while i < 5:
    print(i, ".Hello\n")
    i += 1

i - это переменная счетчик.

В переводе на русский, запись звучит так
Код:
изначално i = 0
ПОКА условие i < 5 истино выполнить
    ВЫВЕСТИ сообщение ...
 
    после каждого раза прибавлять к i еденицу.

То есть, когда цикл выполнится 4-ый раз, то к нему прибавится еще еденица, и i = 5 а мы указывали, пока i < 5
Это значит, что условие False.

Код:
0.Hello
1.Hello
2.Hello
3.Hello
4.Hello

Помимо простых циклов, есть и бесконечно выполняющиеся. Т.к. для работы while требует True, то запись следующего характера
Код:
while True:
    print("Еще круг\n")

Приведет к этому

giphy.gif


Подробней я обьясню вам про цыклы в следующей части)

Домашнее Задание.
Задание 1.
Напишите своего мини чат-бота используя полученые знания. А в следующей части мы проверим)

Задание 2. *
Создайте свою базу данных и используя знания полученые в этом уроке сделайте ее многофункциональной. Например, добавление элементов в бд, редактирование.

Задание 3.

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

[1] -- Часть 1
[2] -- Часть 2
[3] -- Часть 3
[4] -- Часть 4
 
Последнее редактирование:

CyberX88

Green Team
05.02.2017
122
43
BIT
0
Отличные статьи,жду новую статейку!
Добавляй больше домашки,одна из не многих домашек которые я делаю:)
 

Citizen0

Green Team
07.02.2017
203
228
BIT
0
Приветствую.
Разбираюсь потихоньку в python.
Очепятка
sposok
>>> sposok = ["C", "O", "D", "E", "B", "Y", x] >>> print(spisok)
Еще, если добавить not к команде, то можно проверить "Точно ли элемента нет в списке".

>>> x = [228, 666, 777]
>>> print(not 777 in x)
False
>>> print(not 444 in x)
True
Как-то мудрено :)
Сначала проверяем, есть ли элемент в списке
Код:
777 in x
А после инвертируем результат. False станет True, True - False.
Не правильнее (логичнее) ли возвращать True, если элемента нет в списке?
%значение% not in %список%
Код:
print(777 not in x)
print(444 not in x)

list.index(x) - ищет элемент x в списке list.
Я бы уточнил, что будет возвращен индекс искомого элемента или ошибка, если элемента нет в списке.
Закрывающая скобка пропала
Но и на этом не все. У функции range есть и 3-ий аргумент. Он задает интервал всей последовательности.

>>> c = [0, 10, 2]
>>> print(c)
[0, 2, 4, 6, 8]
А где тут range?
Закрепим, вобщем вся конструкция такова
len(range(x, y, z))

x -- то с чего начать последовательность.
y -- кол-во элементов последователеости.
z -- интервал между элементами.
Вместо len нужно list. Иначе вместо списка получим длину.
Код:
x = ["a", "b", "c", "1",  "2"]
for i in x:
    print(x[i],"\n")
У меня ошибка здесь.
Код:
TypeError: list indices must be integers or slices, not str

Здесь все просто, мы благодаря переменной счетчику выводим все элементы посредством ее изменения. Т.е. когда значение i равно например 3-м, то выведет элемент '1'
i тут не может быть равным 3-м. У нас нет такого элемента. Есть только индекс. Но мы ведь перебираем значения.
 
  • Нравится
Реакции: Tihon49, Азиз и moon13
I

in1rovert

спс братишка)
любо читать
... ныне в инете доки - так себе по питону, нормального на русском почему -то нет, или на кривых сайтах
 

Shihskauskas

Green Team
06.11.2017
41
14
BIT
0
Разницу списков и кортежей бы указать. Всё-таки в первом примере указан кортеж;)
 

BKeaton

Green Team
18.07.2018
204
335
BIT
57
Ошибки:
индекс
определенные
al04e сказал(а):
len(list) - выводит длинну списка list(кол-во элементов).
длину
с=list(range(0, 10, 2))
принимает
объясню
Точно ли элемента нет в списке
Так понятней "Точно нет элемента в списке?"
al04e сказал(а):
Напишите своего мини чат-бота используя полученые знания. А в следующей части мы проверим)
Напишите своего мини чат-бота используя полученные(в 2 спойлере есть еще одна ошибка такого вида) знания. А в следующей части его мы проверим)
Объедините спойлеры
 
Последнее редактирование:

Азиз

Green Team
30.05.2018
224
74
BIT
0
Приветствую.
Разбираюсь потихоньку в python.
Очепятка
sposok


Как-то мудрено :)
Сначала проверяем, есть ли элемент в списке
Код:
777 in x
А после инвертируем результат. False станет True, True - False.
Не правильнее (логичнее) ли возвращать True, если элемента нет в списке?
%значение% not in %список%
Код:
print(777 not in x)
print(444 not in x)

Я бы уточнил, что будет возвращен индекс искомого элемента или ошибка, если элемента нет в списке.

Закрывающая скобка пропала

А где тут range?

Вместо len нужно list. Иначе вместо списка получим длину.

У меня ошибка здесь.
Код:
TypeError: list indices must be integers or slices, not str


i тут не может быть равным 3-м. У нас нет такого элемента. Есть только индекс. Но мы ведь перебираем значения.
Очепятка)))
 

Tihon49

Green Team
06.01.2018
193
120
BIT
0
Статьи круть! Поменьше опечаток и просто топ! А так опечатки сбивают. Только врубишься, и тут взрыв мозга )))
 

1984

Grey Team
08.03.2018
137
488
BIT
0
2 задание:
Код:
voln = "*"*50
print(voln)
    
x =  [
    ["Даниил", "Евгений", "Виктор"],
    ["Пожалуйста", "Простите", "Ужас"],
    ["Поговорим?", "Пообщаемся?", "Потрещим?"]
    ]

for i in x:
    print(i)

x[0][1] = input("Как можно обозвать Женю? => ")

print(voln)

for i in x:
    print(i)
    
print(voln)

x.append(input("Добавьте Ваш вопрос => "))


for i in x:
    print(i)
    
print(voln)

3 задание:
Код:
voln = "*"*50
print(voln)
a = input("Как можно обозвать Женю? => ")
b = list(a)
print(b[0]*3)
c = (b[0]*3)
d = list(c)
e = len(d)
print(voln)
while e == 3:
    a = input("Как можно обозвать Женю? => ")
    b = list(a)
    print(b[0]*3)
    c = (b[0]*3)
    d = list(c)
    e = len(d)
    print(voln)
 
Й

ЙЦУКЕН987

В данной статье при упоминании цикла for-in автор зачем-то понаставил предполагаемый им "перевод каретки" в следующем виде: \n
Это - не работает. Вернее, это лишнее:)

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


Для последовательного перебора целых чисел из диапазона [0; n) можно использовать аналогию цикла for:
Код:
for i in range(10):
   print(i)
Этот код по выполняемым действиям полностью аналогичен циклу while:
Код:
i = 0
while i < 10:
  print(i)
  i += 1

Можно задавать начальные и конечные значения для переменной цикла, а также шаг:
Код:
for i in range(20, 10, -2):
  print(i)
Аналогичный цикл while
Код:
i = 20
while i > 10:
  print(i)
  i -= 2


Кроме того, утверждение о том, что Функция range преднозначена для генерации последовательности чисел - НЕВЕРНО.
Функция range не создает готовый список, а возвращает итератор — объект языка Python, специально придуманный для работы с циклами. Однако, если передать этот итератор функции list, получится список чисел.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!