# Отчет по теме 5 ***Цель работы: Изучение способов формирования и использования блоков инструкций и обеспечения разветвления линий потока в алгоритмах.*** Терехов Фёдор Валерьевич, А-01-23 >Управляющие инструкции, как и в других языках программирования, используются в Python для разветвления линий потока. Их применение имеет как сходство, так и заметные отличия по сравнению с другими языками программирования. В программах на Python они применяются по следующей общей схеме: <Управляющая инструкция>: <отступы><Блок инструкций> Здесь управляющая инструкция начинается зарезервированными словами, такими как if, while, for… и дополняется логическим выражением, со значением True или False. Блок инструкций – это совокупность инструкций на языке Python, возможно, включающая вложенные управляющие инструкции. Относительно управляющей инструкции блок инструкций сдвигается влево с использованием одинаковых отступов, задаваемых либо некоторым числом пробелов, либо одной или несколькими табуляциями. Величина отступа задаётся в настройках среды (Indentation Width). По умолчанию – это 4 пробела или 1 табуляция. ## 1. Изучите ветвление по условию – управляющая инструкция if. **Общее правило написания:** if <условие>: <отступы><Блок инструкций, выполняемый, если условие истинно>. [elif <условие2>: <отступы><Блок инструкций2, выполняемый, если условие2 истинно> ] [else: < отступы><Блок инструкций3, выполняемый, если условие ложно> ] >Условие задается в виде логического выражения, которое может принимать значение True или False. Блок инструкций может располагаться на нескольких строках. Отступы во всех строках блока должны быть одинаковыми по отношению к первому символу управляющей инструкции. Если имеется вложенная управляющая инструкция, то она вводится с таким же отступом, а все строки ее блоков – отступают по отношению к ее первому символу. Признак конца блока – отсутствие отступов в очередной строке или ввод пустой строки. Если в Блоке инструкций только одна инструкция, её можно записывать без отступов сразу за знаком «:». Пример 1.1: ```python porog=100 rashod1=50 rashod2=100 if rashod1>=porog: dohod=12 elif rashod2==porog: dohod=0 else: dohod=-8 print(dohod) ``` Ответ программы: ```shell 0 ``` Пример 1.2: ```python rashod1=2 rashod2=4 porog=5 dohod=0 if rashod1>=3 and rashod2==4: dohod=rashod1 if rashod2==porog or rashod1Условные инструкции могут записываться также в одну строку в операторе присваивания по следующей схеме: <Объект>=<значение 1> if <условие> else <значение 2> или ещё: if <условие>: <инструкция1>[;<инструкция2>….] Пример 1.4: ```python porog=4 dohod=2 if porog>=4 else 0 print(dohod) ``` Ответ программы: ```shell 2 ``` Пример 1.5: ```python porog=5 rashod1=2 rashod2=4 if porog>=5 : rashod1=6; rashod2=0 print(rashod1,rashod2) ``` Ответ программы: ```shell 6 0 ``` ## 2. Цикл по перечислению – управляющая инструкция for. ***Общее правило написания:*** for <Объект-переменная цикла> in <объект>: <отступы><Блок инструкций 1 – тело цикла> [else: < отступы ><Блок инструкций 2 – если в цикле не сработал break>] >Здесь <объект> - любой определенный до начала цикла объект из классов строка, список, кортеж, множество, словарь. <Объект-переменная цикла> - объект, в качестве значений которого поочередно будут задаваться элементы объекта, которые могут быть объектами любого типа. <Блок инструкций 1 – тело цикла> - совокупность инструкций, которая может содержать или не содержать инструкцию break, вызывающую досрочное завершение цикла при некоторых условиях. Блок инструкций 1 обычно выполняется многократно по мере того, как объект-переменная цикла принимает значения из сложного объекта. Если в цикле имеется необязательная часть: else и Блок инструкций 2, то он будет выполняться перед завершением цикла только в том случае, если при выполнении цикла не было его прерывания по инструкции break. Если Блоке инструкций 1 или в Блоке инструкций 2 только одна инструкция, то её можно записывать без отступов сразу за двоеточием. ### 2.1. Простой цикл. ```python temperatura=5 for i in range(3,18,3): temperatura+=i print(temperatura) ``` Ответ программы: ```shell 50 ``` ### 2.2. Более сложный цикл. ```python sps=[2,15,14,8] for k in sps: if len(sps)<=10:sps.append(sps[0]) else: break print("После первого цикла:",sps) sps=[2,15,14,8] for k in sps[:]: if len(sps)<=10:sps.append(sps[0]) else: break print("После второго цикла:",sps) ``` Ответ программы: ```shell После первого цикла: [2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2] После второго цикла: [2, 15, 14, 8, 2, 2, 2, 2] ``` >Во втором варианте итерация происходит по неизменяемой копии списка, поэтому цикл выполняется полное количество раз (4 раза), тогда как в первом варианте итерация происходит по изменяемому списку, и цикл завершается досрочно (через break, иначе цикл был бы бесконечным). ### 2.3. Пример: создание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500, эта сумма должна быть отображена на экране. ```python 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) ``` Ответ программы (1 попытка): ```shell ``` Ответ программы (2 попытка): ```shell 484 ``` Ответ программы (3 попытка): ```shell 450 ``` Ответ программы (4 попытка): ```shell ``` Ответ программы (5 попытка): ```shell 359 ``` >Объяснение поведения программы: Почему вывод значения ss бывает не всегда: else относится к циклу for, а не к if Блок else выполняется только если цикл завершился нормально (без оператора break). Если срабатывает break, блок else пропускается. ### 2.4. Пример с символьной строкой. ```python stroka='Это – автоматизированная система' stroka1="" for ss in stroka: stroka1+=" "+ss print(stroka1) ``` Ответ программы: ```shell Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а ``` ### 2.5. Запись цикла в строке. Пример: создание списка с синусоидальным сигналом. ```python import math import pylab sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)] pylab.plot(sps2) pylab.title('Синусоидальный сигнал') pylab.xlabel('Отсчеты') pylab.ylabel('Амплитуда') pylab.grid(True) pylab.show() ``` Ответ программы: ![График](Graf_2.5.png) ## 3. Цикл «пока истинно условие» – управляющая инструкция while. ***Общее правило написания:*** while <Условие>: <отступы><Блок инструкций 1 – тело цикла> [else: <отступы><Блок инструкций 2 – если в цикле не сработал break>] >Здесь <Условие> - некоторое логическое выражение. Если на очередном витке цикла оно принимает значение True (или ≠0), то выполняется Блок инструкций 1. При этом, если в этом блоке присутствует инструкция break и она будет выполнена, то цикл завершается, иначе – переходит к новому витку цикла. В блоке инструкций 1 могут быть изменены значения объектов, входящих в Условие и его значение тоже может измениться, Если же его значением останется True, то вновь выполняется Блок инструкций 1 и т.д. Если в цикле присутствует Блок инструкций 2, то он будет выполнен, если завершение цикла произошло не по инструкции break, а по значению False (или значению =0) Условия. ### 3.1. Цикл со счётчиком. ```python rashod=300 while rashod: print("Расход=",rashod) rashod-=50 ``` Ответ программы: ```shell Расход= 300 Расход= 250 Расход= 200 Расход= 150 Расход= 100 Расход= 50 ``` Цикл завершился, потому что в Python число 0 интерпретируется как логическое значение False. ### 3.2. Пример с символьной строкой. ```python import math import pylab stroka='Расчет процесса в объекте регулирования' i=0 sps2=[] while i 1: if chislo % kandidat == 0: break kandidat -= 1 else: print(chislo, end=' ') ``` Ответ программы: ```shell 267 имеет множитель 89 Простые числа в диапазоне от 250 до 300: 251 257 263 269 271 277 281 283 293 ``` ### 3.4. Continue. >Помимо инструкции break в обоих видах циклов могут использоваться инструкции continue, которые не вызывают завершения цикла, но завершают его текущий виток и обеспечивают переход к следующему витку. Пример: Вывод четных чисел от 1 до 10 с использованием continue. ```python for i in range(1, 11): if i % 2 != 0: continue print(i, end=' ') ``` Ответ программы: ```shell 2 4 6 8 10 ```