# Отчет по Теме 5 Беженарь Алёна, А-02-23 # Блоки инструкций, управляющие инструкции. ## 1. Настройка текущего каталога. ```py import os os.chdir("C:\\Users\\Дружок\\Desktop\\ПОАС\\python-labs\\TEMA4") ``` ## 2. Ветвление по условию if() Условие задается в виде логического выражения, которое может принимать значение True или False. Блок инструкций может располагаться на нескольких строках. Признак конца блока – отсутствие отступов в очередной строке или ввод пустой строки. Пример 1 ```py >>> porog, rashod1, rashod2 = 5, 10, 50 >>> if rashod1>=porog: ... dohod=12 ... elif rashod2==porog: ... dohod=0 ... else: ... dohod=-8 >>> dohod 12 ``` Пример 2 (условия внутри условия) ```py >>> if rashod1>=3 and rashod2==4: ... dohod=rashod1 ... if rashod2==porog or rashod1>> dohod 12 ``` Пример 3 (ветвление линий потока) ```py >>> if porog==3: ... dohod=1 ... elif porog==4: ... dohod=2 ... elif porog==5: ... dohod=3 ... else: ... dohod=0 >>> dohod 3 ``` Условные инструкции могут записываться также в одну строку в операторе присваивания по сле-дующей схеме: <Объект>=<значение 1> if <условие> else <значение 2> или ещё if <условие>: <инструкция1>[;<инструкция2>….] Пример 4 (записи условий в одну строку) ```py >>> dohod=2 if porog>=4 else 0 >>> dohod 2 >>> if porog>=5 : rashod1=6; rashod2=0 rashod1;rashod2 6 0 ``` ## 3. Цикл по перечислению for(). for <Объект-переменная цикла> in <объект>: <отступы><Блок инструкций 1 – тело цикла> [else: < отступы ><Блок инструкций 2 – если в цикле не сработал break>], где <объект> - любой определенный до начала цикла объект из классов строка, список, кортеж, множество, словарь. <Объект-переменная цикла> - объект, в качестве значений которого поочередно будут задаваться элементы объекта, которые могут быть объектами любого типа. <Блок инструкций 1 – тело цикла> - совокупность инструкций, которая может содержать или не содержать инструкцию break, вызывающую досрочное завершение цикла при некоторых условиях. Если в цикле имеется необязательная часть: else и Блок инструкций 2, то он будет выполняться перед завершением цикла только в том случае, если при выполнении цикла не было его прерывания по инструкции break. Пример 3.1 ```py >>> temperatura=5 >>> for i in range(3,18,3): ... temperatura+=i >>> temperatura 50 ``` Пример 3.2 ```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] ``` Выполним чуть-чуть отличающуюся совокупность операций: ```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] ``` Для 1 случая: Цикл работает непосредственно с исходным списком sps. При каждом добавлении элемента (sps.append(sps[0])) длина списка увеличивается Цикл будет выполняться бесконечно пока список не превысит 10 элементов, потому что список постоянно растет. Для 2 случая: Создается копия списка sps[:] перед началом цикла и сам цикл выполняется для фиксированного количества элементов (исходная длина списка) Изменения исходного списка sps не влияют на выполнение цикла Пример 3.3 Конструкция for - else позволяет реализовать обычный цикл-перечисление с дополнительным условием, которое выполнится только в том случае, если работа цикла завершится самостоятельно (не в случае применения оператора break). Пример такого цикла представлен ниже: ```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) ... 481 # Цикл завершился самостоятельно, поэтому сработало дополнительное условие ``` Пример 3.4 Работа с символьной строкой внутри цикла. ```py >>> stroka = "Это - автоматизированная система" >>> stroka1 = "" >>> for ss in stroka: ... stroka1 += " " + ss # К каждому символу исходной строки добавлется пробел слева ... >>> stroka1 ' Э т о - а в т о м а т и з и р о в а н н а я с и с т е м а' ``` Пример 3.5 Запись цикла в строке. Цикл можно записать в строку. Такая запись представлена ниже на примере создания графика синусоидального сигнала: ```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() ``` Полученный график: ![Созданный график](Figure1.png) ## 4. Изучение управляющей конструкции while. Цикл, выполняющийся пока определенное условие истинно, реализуется с помощью конструкции while. В данном цикле нужно учесть возможность его прерывания, иначе, при постоянно истинном условии выполнения, цикл станет бесконечным, что приведет к большим проблемам в работе программы. Пример 4.1. Цикл со счетчиком. ```py >>> rashod = 300 >>> while rashod: ... print("Расход =", rashod) ... rashod -= 50 ... Расход = 300 Расход = 250 Расход = 200 Расход = 150 Расход = 100 Расход = 50 ``` Цикл в данном примере остановил свою работу, так как на 7 итерации значение переменной rashod достигло 0, что интерпретируется как значение False. Если бы данная переменная никогда не прнинимала значение 0, то получился бы бесконечный цикл. Пример 4.2. Как и в цикле for, в цикле 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 Значение в момент 4 = 0.197375320224904 Значение в момент 5 = 0.2449186624037092 Значение в момент 6 = 0.2913126124515909 Значение в момент 7 = 0.3363755443363322 Значение в момент 8 = 0.3799489622552249 Значение в момент 9 = 0.421899005250008 Значение в момент 10 = 0.4621171572600098 Значение в момент 11 = 0.5005202111902354 Значение в момент 12 = 0.5370495669980353 Значение в момент 13 = 0.5716699660851172 Значение в момент 14 = 0.6043677771171636 Значение в момент 15 = 0.6351489523872873 Значение в момент 16 = 0.6640367702678489 Значение в момент 17 = 0.6910694698329307 Значение в момент 18 = 0.7162978701990245 Значение в момент 19 = 0.7397830512740043 Значение в момент 20 = 0.7615941559557649 Значение в момент 21 = 0.7818063576087741 Значение в момент 22 = 0.8004990217606297 Значение в момент 23 = 0.8177540779702878 Значение в момент 24 = 0.8336546070121553 Значение в момент 25 = 0.8482836399575129 Значение в момент 26 = 0.8617231593133063 Значение в момент 27 = 0.874053287886007 Значение в момент 28 = 0.8853516482022625 Значение в момент 29 = 0.8956928738431645 Значение в момент 30 = 0.9051482536448664 Значение в момент 31 = 0.9137854901178277 Значение в момент 32 = 0.9216685544064713 Значение в момент 33 = 0.9288576214547277 Значение в момент 34 = 0.935409070603099 Значение в момент 35 = 0.9413755384972874 Значение в момент 36 = 0.9468060128462683 Значение в момент 37 = 0.9517459571646616 Значение в момент 38 = 0.9562374581277391 >>> 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() ``` Полученный график: ![Созданный график 2](Figure2.png) Пример 4.3. Выполнение сложного алгоритма с помощью цикла. С помощью циклов можно реализовывать различные алгоритмы. Так, например, в примере ниже показан алгоритм проверки заданного числа на то, является ли оно простым. ```py >>> chislo = 267 #Проверяемое число >>> kandidat = chislo // 2 # Для значений chislo > 1 >>> while kandidat > 1: ... if chislo % kandidat == 0: # Остаток от деления ... print(chislo, "имеет делитель", kandidat) ... break # else выполняться не будет ... kandidat -=1 ... else: # При завершении цикла без break ... print(chislo, "является простым") ... 267 имеет делитель 89 ``` Данный алгоритм можно переработать для проверки некоторого диапазона чисел(например возьмем диапазон от 250 до 300): ```py >>> prost = [] # Список для записи в него простых чисел >>> for num in range(250, 301): # Цикл, задающий диапазон рассматривыаемых значений ... 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 253 имеет делитель 23 254 имеет делитель 127 255 имеет делитель 85 256 имеет делитель 128 257 является простым 258 имеет делитель 129 259 имеет делитель 37 260 имеет делитель 130 261 имеет делитель 87 262 имеет делитель 131 263 является простым 264 имеет делитель 132 265 имеет делитель 53 266 имеет делитель 133 267 имеет делитель 89 268 имеет делитель 134 269 является простым 270 имеет делитель 135 271 является простым 272 имеет делитель 136 273 имеет делитель 91 274 имеет делитель 137 275 имеет делитель 55 276 имеет делитель 138 277 является простым 278 имеет делитель 139 279 имеет делитель 93 280 имеет делитель 140 281 является простым 282 имеет делитель 141 283 является простым 284 имеет делитель 142 285 имеет делитель 95 286 имеет делитель 143 287 имеет делитель 41 288 имеет делитель 144 289 имеет делитель 17 290 имеет делитель 145 291 имеет делитель 97 292 имеет делитель 146 293 является простым 294 имеет делитель 147 295 имеет делитель 59 296 имеет делитель 148 297 имеет делитель 99 298 имеет делитель 149 299 имеет делитель 23 300 имеет делитель 150 >>> prost # Отображение списка простых чисел после работы алгоритма [251, 257, 263, 269, 271, 277, 281, 283, 293] ``` Пример 4.3. Инструкция continue. Инструкция continue позволяет завершить выполнение текущей итерации цикла и перейти к следующей: ```py >>> for i in range(7): ... if i in [2, 3, 5]: # Если число равно 2, 3 или 5, то сразу же начинается новая итерация ... continue ... print(i) ... 0 1 4 6 7 ``` ## 5. Завершение работы со средой. Сохранила файлы отчета в своем рабочем каталоге и закончила сеанс работы с IDLE.