Занятие 4. Условия и циклы. Первый фрактал своими руками.
Содержание
Что мы уже знаем
Функции конвертации (приведения) к вещественным и целым числам:
Список (list). Его можно выразить в тексте программы через разделённые запятыми значения (элементы), заключённые в квадратные скобки. Элементы списка могут быть разных типов.
Операции над строками:
логический тип данных:
Операторы Vs выражения
- Оператор - это одна полноценная команда языку, а выражение - то, что похоже на математическую формулу.
известные нам:
1 >>> print ('Hi people') # - print ( )
2 Hi people
3 >>> import math # импорт имя.модуля
4 >>> def имя(аргументы):
5 блок операторы # определяет функцию
6 return выражение # return - это тоже известный нам оператор
7
8 >>> name = выражение # оператор присваивания
9 >>> if выражение:
10 блок операторы # оператор if. интуитивно понятно что он делает:
11 >>> if 5<10:
12 print('5<10 it`s true')
13
14
15 5<10 it`s true
16 >>> 123 # оператор выражения
17 123
18 def hello():
19 print ('hello')
20
21 >>> hello()
22 hello
Выражения:
1 >>> 1 # выражение числовой константы
2 >>> 'hello' # выражение строковой константы
3 >>> [1] # выражение создания списка
4 >>> 2*2 # математические операции
5 4
6 >>> 2+4 # "+" для чисел
7 6
8 >>> [1,2,3] + [3,4,5] # а это сложение списков (конкатенация)
9 [1,2,3,3,4,5]
10 >>> a = 2 # оператор присваивания!!!
11 >>> a # выражение получения значения переменной
12 2
13 >>> abs(-2) # выражения вызова функции
14 2
15 >>> [].apppend(1) # выражение вызова метода на объекте ( именно в этом случае объект меняется, а результат не выдается)
16 >>> 1j.imag # выражение получения атрибута объекта ( в этом случае мнимой части )
17 1
18 >>> ['a','b','c'][0] # выражения получения элемента списка по индексу (индексация)
19 'a'
Циклы:
Цикл сводится к последовательности действий : переменной цикла присваевается значение из очередного элемента списка, и выполняется тело цикла. это 1 итерация; она выполняется для каждого элемента списка.
1 >>> for i in [2,3,4,5]: # оператор for объявляет цикл с переменной i
2 print('i*(i+1) =', i*(i+1)) # это тело цикла
3 # Цикл – команда питону исполнить набор каких-либо действий определённое количество раз.
4 # Каждое такое исполнение называется итерацией цикла.
5
6 i*(i+1) = 6
7 i*(i+1) = 12
8 i*(i+1) = 20
9 i*(i+1) = 30
Функция range
Наиболее частая задача цикла – выполнить тело n раз или пройтись по числам от 1 до n. Для этого нужна функция range(n) . range(n) - функция, выдающая список из чисел от 0 до n-1 . range можно вызывать 3-мя способами:
Обратите внимание: и слайсы, и range: левый край включается, правый не включается.
Индексы и слайсы
1 >>> a=range(1,10)
2 >>> a[2] # так мы "вытаскиваем" элемент с индексом 2( индексирование)
3 3
4 >>> a[-1] # последний элемент списка
5 >>> a.insert(2,55) # вставить 55 перед второй позицией (получается что элемент 55 сам становится вторым)
6 [1, 2, 55, 3, 4, 5, 6, 7, 8, 9]
7 >>> a[3:6] # еще списки можно "разрезать"
8 [3, 4, 5]
9 >>> a[1:5:2] # как и для range можно указать шаг (или период). Здесь нумерация начинается с 0
10 [2, 3]
11 >>> a[10:3:-2] # как и для range шаг может быть отрицательный
12 [9, 7, 5] # обратите внимание!, нумерация здесь начинается с конца и -1 это последний элемент списка, -2
13 # -- предпоследний и т.д.
14
15 >>> a[:2]=[] # заменить все от начала до 2го элемента на "ничего"
16 >>> a
17 [55, 3, 4, 5, 6, 7, 8, 9]
Пример про сложности со ссылками
Пример, показывающий различие между объектом и его именем, а также о пользе слайса длиной во весь список:
1 >>> a=[[1]]
2 >>> b=a[0]
3 >>> b
4 [1]
5 >>> a.append(b) # добавляет сам объект b; то есть когда мы изменяем объект b изменяется и элемент b из списка а
6 >>> a
7 [[1], [1]]
8 >>> a.append(b[:]) # добавляет (!) копию списка b, то есть только его содержание, поэтому последующее изменение b
9 >>> a # никак не отражается на элементе в а, соответствующему содержанию b
10 [[1], [1], [1]]
11 >>> b.append('почему?)')
12 >>> a
13 [[1, 'почему?)'], [1, 'почему?)'], [1]]
14 >>> a
15 [[1, 'почему?)'], [1, 'почему?)'], [1]]
1 # вот некое графическое представление того, что происходит
2 # a ----> [|.|]
3 # `-> [.] это b
4 # '->[1]
5 # append(b) a---> [|.|,|.|] ( т.к. a[0] = b )
6 # b <-' '-> b ( то есть [1])
7 # append(b[:]) ---> [|1|,|1|,|.|] [1](из b)
8 # b b ^----'
9 # видно что когда b меняется, меняются и 0 и 1 элементы а, тогда как 2й элемент остается 1.
Дополнение к циклам: операторы break, continue
Оператор break прерывает выполнение самого ближайшего вложенного цикла for или while.
Оператор continue продолжает выполнение цикла со следующей итерации.
Операторы циклов могут иметь ветвь else. Она исполняется, когда цикл выполнил перебор до конца (в случае for) или когда условие становится ложным (в случае while), но не в тех случаях, когда цикл прерывается по break.Пример:
1 >>> for n in range(2, 10):
2 ... for x in range(2, n):
3 ... if n % x == 0:
4 ... print(n, 'равно', x, '*', n//x) # n//x - остаток от деления n на х
5 ... break
6 ... else:
7 ... # циклу не удалось найти множитель
8 ... print(n, '- простое число')
9 ...
10 2 - простое число
11 3 - простое число
12 4 равно 2 * 2
13 5 - простое число
14 6 равно 2 * 3
15 7 - простое число
16 8 равно 2 * 4
17 9 равно 3 * 3
18
19 >>> for i in [1,2,3]: # continue:
20 print(1)
21 continue
22 print('sss')
23
24
25 1
26 1
27 1
Оператор pass
Оператор pass не делает ничего. Он может использоваться когда синтаксически требуется присутствие оператора, но от программы не требуется действий. Например:
Собственно, фрактал
как его задать можно посмотреть выше)