Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

16 KiB

Отчет по Теме 5

Беженарь Алёна, А-02-23

Блоки инструкций, управляющие инструкции.

1. Настройка текущего каталога.

import os
os.chdir("C:\\Users\\Дружок\\Desktop\\ПОАС\\python-labs\\TEMA4")

2. Ветвление по условию if()

Условие задается в виде логического выражения, которое может принимать значение True или False. Блок инструкций может располагаться на нескольких строках. Признак конца блока – отсутствие отступов в очередной строке или ввод пустой строки. Пример 1

>>> porog, rashod1, rashod2 = 5, 10, 50
>>> if rashod1>=porog:
...   	dohod=12
... elif rashod2==porog:
...    	dohod=0
... else:
...    	dohod=-8
>>> dohod
    12

Пример 2 (условия внутри условия)

>>> if rashod1>=3 and rashod2==4:
... 	dohod=rashod1
...	if rashod2==porog or rashod1<rashod2:
...        	dohod=porog     
>>> dohod
    12

Пример 3 (ветвление линий потока)

>>> 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 (записи условий в одну строку)

>>> 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

>>> temperatura=5
>>> for i in range(3,18,3):
...	temperatura+=i
>>> temperatura
    50

Пример 3.2

>>> 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]

Выполним чуть-чуть отличающуюся совокупность операций:

>>> 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). Пример такого цикла представлен ниже:

>>> 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 Работа с символьной строкой внутри цикла.

>>> stroka = "Это - автоматизированная система"
>>> stroka1 = ""
>>> for ss in stroka:
...     stroka1 += " " + ss # К каждому символу исходной строки добавлется пробел слева
...    
>>> stroka1
    ' Э т о   -   а в т о м а т и з и р о в а н н а я   с и с т е м а'

Пример 3.5 Запись цикла в строке. Цикл можно записать в строку. Такая запись представлена ниже на примере создания графика синусоидального сигнала:

>>> import math, pylab
>>> sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)] # Запись цикла в строку
>>> pylab.plot(list(range(100)), sps2)
    [<matplotlib.lines.Line2D object at 0x000002741F3CF850>]
>>> pylab.title("Синусоидальный сигнал")
    Text(0.5, 1.0, 'Синусоидальный сигнал')
>>> pylab.xlabel("Время")
    Text(0.5, 0, 'Время')
>>> pylab.ylabel("Сигнал")
    Text(0, 0.5, 'Сигнал')
>>> pylab.show()

Полученный график:

Созданный график

4. Изучение управляющей конструкции while.

Цикл, выполняющийся пока определенное условие истинно, реализуется с помощью конструкции while. В данном цикле нужно учесть возможность его прерывания, иначе, при постоянно истинном условии выполнения, цикл станет бесконечным, что приведет к большим проблемам в работе программы. Пример 4.1. Цикл со счетчиком.

>>> rashod = 300
>>> while rashod:
...     print("Расход =", rashod)
...     rashod -= 50
...    
    Расход = 300
    Расход = 250
    Расход = 200
    Расход = 150
    Расход = 100
    Расход = 50

Цикл в данном примере остановил свою работу, так как на 7 итерации значение переменной rashod достигло 0, что интерпретируется как значение False. Если бы данная переменная никогда не прнинимала значение 0, то получился бы бесконечный цикл.

Пример 4.2. Как и в цикле for, в цикле while можно использовать символьные строки в качестве объекта, задающего условие прерывание цикла:

>>> 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)
    [<matplotlib.lines.Line2D object at 0x00000274207FDC90>]
>>> pylab.title("Сигнал на выходе")
    Text(0.5, 1.0, 'Сигнал на выходе')
>>> pylab.xlabel("Время")
    Text(0.5, 0, 'Время')
>>> pylab.ylabel("Сигнал")
    Text(0, 0.5, 'Сигнал')
>>> pylab.show()

Полученный график:

Созданный график 2

Пример 4.3. Выполнение сложного алгоритма с помощью цикла. С помощью циклов можно реализовывать различные алгоритмы. Так, например, в примере ниже показан алгоритм проверки заданного числа на то, является ли оно простым.

>>> 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):

>>> 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 позволяет завершить выполнение текущей итерации цикла и перейти к следующей:

>>> for i in range(7):
...     if i in [2, 3, 5]: # Если число равно 2, 3 или 5, то сразу же начинается новая итерация
...         continue
...    print(i)
...   
    0
    1
    4
    6
    7

5. Завершение работы со средой.

Сохранила файлы отчета в своем рабочем каталоге и закончила сеанс работы с IDLE.