12 KiB
Отчет по теме 5
Криви Анастасия, А-02-23
1. Настроили рабочий каталог
2. Ветвление по условию – управляющая инструкция if
Выполняется первое условие:
porog=10
rashod1=11
rashod2=10
if rashod1>=porog:
dohod=12
elif rashod2==porog:
dohod=0
else:
dohod=-8
dohod
12
Ни одно из условий не выполняется, значение переменной остаетсяя постоянным:
if rashod1 >= 3 and rashod2 == 4:
dohod = rashod1
if rashod2 == porog or rashod1 < rashod2:
dohod = porog
dohod
12
Ни одно из условий не выполняется, следовательно выполняется последний блок инструкций:
if porog == 3:
dohod = 1
elif porog == 4:
dohod = 2
elif porog == 5:
dohod = 3
else:
dohod = 0
dohod
0
Запись условных инструкций в одну строку:
dohod = 2 if porog >=4 else 0
dohod
2
Несколько функций подряд
if porog >= 5: rashod1 = 6; rashod2 = 0
rashod1
6
rashod2
0
3. Цикл по перечислению – управляющая инструкция for
3.1 Простой цикл
temperatura = 2
for i in range(3, 18, 3): # от 3 до 18 с шагом 3, значит всего будет 5 (3, 6, 9, 12, 15)
temperatura += i
temperatura
47
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 меньше 10, то в конец списка добавляется его первый элемент. Если длина sps больше 10, цикл прерывается. При этом k пробегается по всем даже новым элементам списка и поэтому может делать это бесконечно, так как список постоянно увеличивается. Для каждого элемента списка цикл прибаляет первый элемент в конец, и для k появляется новое значение, которое оно может принять.
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 Список с помощью цикла
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.
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)
stroka = 'Это автоматизированная система'
stroka1 = '' # Сначала пустая
for ss in stroka:
stroka1 += ' ' + ss
stroka1
' Э т о а в т о м а т и з и р о в а н н а я с и с т е м а'
3.5 Запись цикла в строке
Создание списка с синусоидальным сигналом
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]
Создадим график:
import pylab
pylab.plot(sps2)
[<matplotlib.lines.Line2D object at 0x000001A7E1879090>]
pylab.title('Синусоидальный сигнал')
pylab.show()
4. Цикл «пока истинно условие» – управляющая инструкция while
4.1 Цикл со счетчиком.
rashod = 300
while rashod:
print('Расход = ', rashod)
rashod -= 50
Расход = 300
Расход = 250
Расход = 200
Расход = 150
Расход = 100
Расход = 50
Цикл работал пока rashod == True, соответсвенно выход из цикла произошел по значению rashod == False.
4.2 Пример с символьной строкой
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
График
pylab.plot(sps2)
[<matplotlib.lines.Line2D object at 0x00000276105D8A50>]
pylab.title('График выходного сигнала')
pylab.show()
4.3 Определение, является ли число простым
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. Иначе простое число.
chislo = 7
kandidat = chislo // 2
while kandidat > 1:
if chislo%kandidat == 0:
print(chislo, 'имеет множитель', kandidat)
break
kandidat -= 1
else:
print(chislo, 'является простым!')
7 является простым!
Выявление всех простых чисел от 250 до 300:
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, 'является простым!')
Вывод:
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
Эта инструкция не вызывает завершение цикла, но завершает его текущий виток и обеспечивает переход к следующему витку.
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

