9.4 KiB
Отчет по теме 5
Володин Денис, А-02-23
Пункт 1
>>> import os
>>> os.chdir(r"C:\Users\denvo\OneDrive\Рабочий стол\python-labs\TEMA5")
Пункт 2
Ветвление по условию (if) различными способами
>>> porog = 6
>>> rashod1 = 8
>>> rashod2 = 5
>>> if rashod1 >= porog:
dohod = 12
elif rashod2 == porog:
dohod = 0
else:
dohod = -8
>>> dohod
12
>>> rashod2 = 4
>>> porog = 4
>>> if rashod1 >= 3 and rashod2 == 4: #Верно
dohod = rashod1
if rashod2 == porog or rashod1 < rashod2: #Тоже верно
dohod = porog
>>> dohod
4
>>> if porog == 3:
dohod = 1
elif porog == 4:
dohod = 2
elif porog == 5:
dohod = 3
else:
dohod = 0
>>> dohod
2
>>> dohod = 2 if porog >= 4 else 0
>>> dohod
2
>>> porog = 2
>>> if porog >= 5 : rashod1 = 6; rashod2 = 0
>>> rashod1
8
>>> rashod2
4
>>> porog = 7
>>> if porog >= 5 : rashod1 = 6; rashod2 = 0
>>> rashod1
6
>>> rashod2
0
Пункт 3
Цикл по перечислению (for)
Пункт 3.1
Простой цикл
>>> temperatura = 5
>>> for i in range(3,18,3):
i
temperatura += i
3
6
9
12
15
>>> 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]
Как видно, итог другой. Операция взятия среза sps[:] создает полную копию исходного списка. Теперь список, по которому пробегается k, и список, изменяющийся внутри цикла - это разные объекты. К пройдет sps[:] раньше, чем sps достигнет максимального условия.
Пункт 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:
print(ss)
Программа ничего не вывела и вот почему:
>>> ss
556
>>> sps5
[69, 55, 58, 87, 58, 39, 91, 3, 96]
После того, как прошло девять итераций, сумма элементов списка уже была больше 500, поэтому цикл закончился из-за if, а не из-за окончания диапазона range(10). Попробуем обнулить список и выполнить ту же программу еще раз:
>>> sps5 = []
>>> for i in range(10):
sps5.append(rn.randint(1,100))
ss = sum(sps5)
if ss > 500: break
else:
print(ss)
481
В этот раз программа вывела ответ самостоятельно, потому что сработал else, потому что за все десять итераций цикла так и не успел выполниться break по условию if.
Пункт 3.4
Пример с символьной строкой
>>> 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, ... ]
>>> import pylab
>>> pylab.plot(sps2, label='Синусоидальный сигнал', color = 'green')
[<matplotlib.lines.Line2D object at 0x0000018834CBB460>]
>>> pylab.show()
Пункт 4
Цикл "пока истинно условие" (while)
Пункт 4.1
Цикл со счетчиком
>>> rashod = 300
>>> while rashod:
print("Расход =",rashod)
rashod -= 50
Расход = 300
Расход = 250
Расход = 200
Расход = 150
Расход = 100
Расход = 50
Как именно произошло завершение цикла? Нужно вспомнить, что все числа, кроме нуля, при конвертации в логический тип данных имеют логическое значение True. И только ноль имеет значение False. Сравниваемая в управляющей инструкции переменная уменьшается в самом цикле, поэтому, когда строка со сравнением обнаружит 0, то воспримет это как 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
Значение в момент 0 = 0.0
Значение в момент 1 = 0.049958374957880025
Значение в момент 2 = 0.09966799462495568
Значение в момент 3 = 0.14888503362331795
...
Значение в момент 37 = 0.9517459571646616
Значение в момент 38 = 0.9562374581277391
>>> pylab.plot(sps2, label='Сигнал выхода', color='red')
[<matplotlib.lines.Line2D object at 0x00000188336D9FA0>]
>>> pylab.title("Сигнал на выходе инерционного звена")
Text(0.5, 1.0, 'Сигнал на выходе инерционного звена')
>>> pylab.show()
Пункт 4.3
Определение, является ли число простым (делится только на самого себя или 1).
>>> chislo = 267
>>> kandidat = chislo // 2
>>> while kandidat > 1:
if chislo % kandidat == 0:
print(chislo, ' имеет множитель ', kandidat)
break
kandidat -= 1
else:
print(chislo, ' является простым!')
267 имеет множитель 89
Дополниим программу так, чтобы она проверяла все числа от 250 до 300
>>> chislo = [x for x in range (250, 301)]
>>> for now in chislo:
kandidat = now // 2
while kandidat > 1:
if now % kandidat == 0:
print(now, ' имеет множитель ', kandidat)
break
kandidat -= 1
else:
print(now, " является простым!")
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.
Она используется, когда надо при определенном условии не завершить весь цикл, а завершить только текущую итерацию.
Пример (вывести только четные числа):
>>> for n in range (0, 16):
if n%2==1: continue
print(n, " четное")
else: print("все числа обработаны")
0 четное
2 четное
4 четное
6 четное
8 четное
10 четное
12 четное
14 четное
все числа обработаны

