# Отчет по теме 5 Коломейцев Дмитрий, А-02-23 ## Блоки инструкций, управляющие инструкции ### 1-2. Изучение управляющей конструкции if. Оператор if используется для того, чтобы в программе выбирать разные пути выполнения кода в зависимости от условия. Условие - это логическое выражение, которое принимает значение True или False. После условия идет блок кода с отступом. ```py porog = 10 rashod1 = 6 rashod2 = 4 if rashod1 >= porog: # Проверяем первое условие dohod = 12 # Код выполнится, если условие верно elif rashod2 == porog: # Проверяем второе условие dohod = 0 # Код выполнится, если верно второе условие else: # Если оба условия неверны dohod = 8 # Этот код выполнится во всех остальных случаях ... dohod 8 ``` В условиях можно проверять несколько выражений сразу, используя операторы and и or: ```py if rashod1 >= 3 and rashod2 == 4: dohod = rashod1 if rashod2 == porog or rashod1 < rashod2: dohod = porog dohod 6 ``` Можно проверить много разных условий подряд: ```py if porog == 3: dohod = 1 elif porog == 4: dohod = 2 elif porog == 4: dohod = 3 else: dohod = 0 dohod 0 ``` Условный оператор можно записать в одну строку: ```py dohod = 2 if porog >= 4 else 0 dohod 2 ``` Еще один способ написать условие в одну строку: ```py if porog >= 5 : rashod1 = 6; rashod2 = 0 ... rashod1 6 rashod2 0 ``` ### 3. Изучение управляющей конструкции for. Цикл for используется, чтобы пройти по всем элементам списка, строки или других подобных объектов. Цикл перебирает каждый элемент по очереди. #### 3.1. Простой цикл. Чтобы создать простой цикл for, нужно задать диапазон чисел, которые будут перебираться: ```py temperatura = 5 for i in range(3, 18, 3): # i будет принимать значения 3, потом 6, потом 15 temperatura += i # Каждый раз прибавляем значение i temperatura 50 ``` #### 3.2. Более сложный цикл. В цикле for можно использовать условия и оператор break, чтобы остановить цикл: ```py sps = [2, 15, 14, 8] for k in sps: if len(sps) <= 10 : sps.append(sps[0]) else: break # Останавливаем цикл sps [2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2] ``` Различие между этим примером и следующим в том, что в первом случае мы меняем сам список во время цикла, а во втором - работаем с копией. Поэтому в первом примере список вырос до 11 элементов (цикл остановился по break), а во втором - остался с 8 элементами (прошелся по 4 исходным элементам и добавил 4 новых). ```py sps = [2, 15, 14, 8] for k in sps[:]: if len(sps) <= 10 : sps.append(sps[0]) else: break sps [2, 15, 14, 8, 2, 2, 2, 2] ``` #### 3.3. Конструкция for - else. Конструкция for - else позволяет добавить блок else, который выполнится только если цикл завершился сам по себе, без использования break. Если использовали break, то else не выполнится. Примеры: ```py import random as rn sps5 = [] for i in range(10): sps5.append(rn.randint(1, 100)) ss = sum(sps5) if ss > 500: break else: print(ss) # Ничего не напечаталось, потому что сработал break sps5 = [] for i in range(10): sps5.append(rn.randint(1, 100)) ss = sum(sps5) if ss > 500: break else: print(ss) 466 # Цикл прошел полностью, поэтому сработал блок else ``` #### 3.4. Работа с символьной строкой внутри цикла. В Python строки можно перебирать в цикле, как список элементов: ```py stroka = "Это - автоматизированная система" stroka1 = "" for ss in stroka: stroka1 += " " + ss # Добавляем пробел перед каждым символом stroka1 ' Э т о - а в т о м а т и з и р о в а н н а я с и с т е м а' ``` #### 3.5. Конструкция list comprehension. Цикл можно написать коротко в одну строку. Внутри квадратных скобок записано выражение-генератор. Вот пример, где рисуем график синуса: ```py import math, pylab sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)] # Цикл в одну строку pylab.plot(list(range(100)), sps2) [] pylab.title("Синусоидальный сигнал") Text(0.5, 1.0, 'Синусоидальный сигнал') pylab.xlabel("Время") Text(0.5, 0, 'Время') pylab.ylabel("Сигнал") Text(0, 0.5, 'Сигнал') pylab.show() ``` Полученный график: ![alt text](pictures/image1.png) ### 4. Изучение управляющей конструкции while. Цикл while выполняется пока условие верно. Нужно быть осторожным, чтобы цикл не стал бесконечным, иначе программа зависнет. Поэтому в цикле должно быть что-то, что изменяет условие. #### 4.1. Цикл со счетчиком. Самый простой while - это цикл со счетчиком, который мы уменьшаем или увеличиваем в каждой итерации: ```py rashod = 300 while rashod: print("Расход =", rashod) rashod -= 50 Расход = 300 Расход = 250 Расход = 200 Расход = 150 Расход = 100 Расход = 50 ``` Цикл остановился потому что на 7-й итерации переменная rashod стала равна 0, что в Python значит False. Если бы она никогда не стала 0, цикл был бы бесконечным. #### 4.2. Цикл с символьной строкой. В while можно использовать строку как условие, чтобы пройти по всем ее символам: ```py import math, pylab stroka = "Расчет процесса в объекте регулирования" i = 0 sps2 = [] while i < len(stroka): r = 1 - 2 / (1 + math.exp(0.1 * i)) sps2.append(r) print("Значение в момент", i, "=", r) i += 1 Значение в момент 0 = 0.0 Значение в момент 1 = 0.049958374957880025 Значение в момент 2 = 0.09966799462495568 Значение в момент 3 = 0.14888503362331795 ... Значение в момент 29 = 0.8956928738431645 Значение в момент 30 = 0.9051482536448664 Значение в момент 31 = 0.9137854901178277 pylab.plot(list(range(39)), sps2) [] pylab.title("Сигнал на выходе") Text(0.5, 1.0, 'Сигнал на выходе') pylab.xlabel("Время") Text(0.5, 0, 'Время') pylab.ylabel("Сигнал") Text(0, 0.5, 'Сигнал') pylab.show() ``` Полученный график: ![alt text](pictures/image2.png) #### 4.3. Выполнение сложного алгоритма с помощью цикла. С помощью циклов можно решать разные задачи. Вот пример: проверяем, является ли число простым. ```py chislo = 267 kandidat = chislo // 2 while kandidat > 1: if chislo % kandidat == 0: print(chislo, "имеет делитель", kandidat) break kandidat -=1 else: print(chislo, "является простым") 267 имеет делитель 89 ``` Этот алгоритм можно переделать, чтобы проверить целый диапазон чисел: ```py prost = [] # Список, куда будем писать простые числа for num in range(250, 301): # Проходим по числам от 250 до 300 kandidat = num // 2 while kandidat > 1: if num % kandidat == 0: print(num, "имеет делитель", kandidat) break kandidat -= 1 else: prost.append(num) print(num, "является простым") 250 имеет делитель 125 251 является простым 252 имеет делитель 126 ... 299 имеет делитель 23 300 имеет делитель 150 prost # Выводим список найденных простых чисел [251, 257, 263, 269, 271, 277, 281, 283, 293] ``` #### 4.4. Инструкция continue. Инструкция continue пропускает остаток текущей итерации и переходит к следующей: ```py for i in range(10): if i in [2, 4, 6, 8]: # Если число 2, 3 или 5, пропускаем его continue print(i) 0 1 3 5 7 9 ``` ### 5. Завершение работы со средой. Сохранил файлы отчета в своем рабочем каталоге и закончил сеанс работы с IDLE.