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

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

Простой цикл

``py

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

3 6 9 12 15

temperatura 50


## Пункт 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=[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  четное
все числа обработаны