# Отчет по теме 5 Криви Анастасия, А-02-23 ## 1. Настроили рабочий каталог ## 2. Ветвление по условию – управляющая инструкция if Выполняется первое условие: ```py porog=10 rashod1=11 rashod2=10 if rashod1>=porog: dohod=12 elif rashod2==porog: dohod=0 else: dohod=-8 dohod 12 ``` Ни одно из условий не выполняется, значение переменной остаетсяя постоянным: ```py if rashod1 >= 3 and rashod2 == 4: dohod = rashod1 if rashod2 == porog or rashod1 < rashod2: dohod = porog dohod 12 ``` Ни одно из условий не выполняется, следовательно выполняется последний блок инструкций: ```py if porog == 3: dohod = 1 elif porog == 4: dohod = 2 elif porog == 5: 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 ### 3.1 Простой цикл ```py temperatura = 2 for i in range(3, 18, 3): # от 3 до 18 с шагом 3, значит всего будет 5 (3, 6, 9, 12, 15) temperatura += i temperatura 47 ``` ### 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] ``` Если длина sps меньше 10, то в конец списка добавляется его первый элемент. Если длина sps больше 10, цикл прерывается. При этом k пробегается по всем даже новым элементам списка и поэтому может делать это бесконечно, так как список постоянно увеличивается. Для каждого элемента списка цикл прибаляет первый элемент в конец, и для k появляется новое значение, которое оно может принять. ```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] ``` В этом случае длина sps не сможет достигнуть 10, Так как у нас есть заданное количество выполнений цикла(4). Срез sps по сути создает новый объект, постоянный в отличии от изменяемого в цикле объекта списка. k проходится только по 4 элементам, так как срез не изменяется. ### 3.3 Список с помощью цикла ```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: #здесь else относится не к if, а к for print(ss) 374 sps5 [51, 28, 29, 41, 51, 29, 60, 44, 29, 12] ``` Программа работает исправно. ss не превысело значение равное 500, поэтому цикл завершился после 10 значения i. ```py for i in range(10): sps5.append(rn.randint(1,100)) ss=sum(sps5) if ss>500: break else: print(ss) ss 519 sps5 [51, 28, 29, 41, 51, 29, 60, 44, 29, 12, 76, 69] ``` ss превысело значение равное 500, поэтому вывода суммы не произошло ### 3.4 Пример с символьной строкой Прибаляется пробел и один элемент из строки (ss проходит по каждому элементу stroka) ```py stroka = 'Это автоматизированная система' stroka1 = '' # Сначала пустая for ss in stroka: stroka1 += ' ' + ss stroka1 ' Э т о а в т о м а т и з и р о в а н н а я с и с т е м а' ``` ### 3.5 Запись цикла в строке Создание списка с синусоидальным сигналом ```py import math sps2 = [math.sin(i*math.pi/5 + 2) for i in range(100)] sps2 [0.9092974268256817, 0.49103209793281005, -0.11479080280322804, -0.6767675184643197, -0.9802420445539634, -0.9092974268256817, -0.49103209793281016, 0.11479080280322791, 0.6767675184643196, 0.9802420445539634, 0.9092974268256818, 0.4910320979328103, -0.1147908028032278, -0.6767675184643196, -0.9802420445539632, -0.9092974268256818, -0.4910320979328104, 0.11479080280322768, 0.6767675184643195, 0.9802420445539632, 0.9092974268256819, 0.4910320979328105, -0.11479080280322579, -0.6767675184643194, -0.9802420445539632, -0.9092974268256819, -0.4910320979328106, 0.11479080280322743, 0.6767675184643193, 0.9802420445539632, 0.909297426825682, 0.49103209793281066, -0.1147908028032273, -0.6767675184643192, -0.9802420445539632, -0.909297426825682, -0.4910320979328108, 0.11479080280322719, 0.6767675184643192, 0.9802420445539631, 0.9092974268256822, 0.491032097932814, -0.11479080280322707, -0.676767518464319, -0.9802420445539625, -0.9092974268256822, -0.491032097932811, 0.11479080280323047, 0.6767675184643189, 0.9802420445539625, 0.9092974268256822, 0.4910320979328142, -0.11479080280322682, -0.6767675184643215, -0.9802420445539631, -0.9092974268256808, -0.4910320979328112, 0.11479080280322317, 0.6767675184643187, 0.9802420445539624, 0.9092974268256823, 0.4910320979328082, -0.11479080280322658, -0.6767675184643213, -0.980242044553963, -0.9092974268256838, -0.49103209793281144, 0.11479080280322293, 0.6767675184643186, 0.9802420445539637, 0.9092974268256824, 0.49103209793280844, -0.11479080280322633, -0.6767675184643158, -0.980242044553963, -0.9092974268256839, -0.49103209793281166, 0.11479080280322974, 0.6767675184643184, 0.9802420445539637, 0.9092974268256825, 0.4910320979328149, -0.11479080280321903, -0.6767675184643209, -0.9802420445539629, -0.909297426825681, -0.4910320979328119, 0.11479080280322244, 0.6767675184643129, 0.9802420445539636, 0.9092974268256826, 0.49103209793281505, -0.11479080280322584, -0.6767675184643155, -0.9802420445539644, -0.9092974268256812, -0.49103209793281205, 0.1147908028032222, 0.6767675184643127, 0.980242044553965] ``` Создадим график: ```py import pylab pylab.plot(sps2) [] pylab.title('Синусоидальный сигнал') pylab.show() ``` ![График](pic/F1.png) ## 4. Цикл «пока истинно условие» – управляющая инструкция while ### 4.1 Цикл со счетчиком. ```py rashod = 300 while rashod: print('Расход = ', rashod) rashod -= 50 Расход = 300 Расход = 250 Расход = 200 Расход = 150 Расход = 100 Расход = 50 ``` Цикл работал пока rashod == True, соответсвенно выход из цикла произошел по значению rashod == False. ### 4.2 Пример с символьной строкой ```py import math 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 # Прибавляется один до тех пор, пока i не превышает длину строки. Тогда выходим из цикла по значению False Значение в момент 0 = 0.0 Значение в момент 1 = 0.049958374957880025 Значение в момент 2 = 0.09966799462495568 Значение в момент 3 = 0.14888503362331795 Значение в момент 4 = 0.197375320224904 ... Значение в момент 38 = 0.9562374581277391 ``` График ```py pylab.plot(sps2) [] pylab.title('График выходного сигнала') pylab.show() ``` ![График выходного сигнала](pic/F2.png) ### 4.3 Определение, является ли число простым ```py chislo = 267 kandidat = chislo // 2 # Для значений chislo > 1. Oкруг. в меньшую сторону while kandidat > 1: if chislo%kandidat == 0: # Остаток от деления print(chislo, 'имеет множитель', kandidat) break # else выполняться не будет kandidat -= 1 else: # При завершении цикла без break print(chislo, 'является простым!') ``` 267 имеет множитель 89 С помощью цикла проверяем все числа от kandidat до 1. Иначе простое число. ```py chislo = 7 kandidat = chislo // 2 while kandidat > 1: if chislo%kandidat == 0: print(chislo, 'имеет множитель', kandidat) break kandidat -= 1 else: print(chislo, 'является простым!') 7 является простым! ``` Выявление всех простых чисел от 250 до 300: ```py for i in range(250, 301): chislo = i kandidat = chislo // 2 while kandidat > 1: if chislo%kandidat == 0: print(chislo, 'имеет множитель', kandidat) break kandidat -= 1 else: print(chislo, 'является простым!') ``` Вывод: ```py 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 ``` ### 4.4 Инструкция continue Эта инструкция не вызывает завершение цикла, но завершает его текущий виток и обеспечивает переход к следующему витку. ```py l=0 for i in range(1, 10): if i == 5: continue # Пропускаем значение i равное 4, переходим к следующему else: l +=i print(l) 1 3 6 10 16 23 31 40 ``` ## 5. Завершение работы.