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

364 строки
10 KiB
Markdown

# Отчет по теме 5
Коломейцев Дмитрий, А-02-23
## Блоки инструкций, управляющие инструкции
### 1-2. Изучение управляющей конструкции if.
Оператор if используется для того, чтобы в программе выбирать разные пути выполнения кода в зависимости от условия. Условие - это логическое выражение, которое принимает значение True или False. После условия идет блок кода с отступом.
```py
porog = 10
rashod1 = 6
rashod2 = 4
if rashod1 >= porog: # Проверяем первое условие
dohod = 12 # Код выполнится, если условие верно
elif rashod2 == porog: # Проверяем второе условие
dohod = 0 # Код выполнится, если верно второе условие
else: # Если оба условия неверны
dohod = 8 # Этот код выполнится во всех остальных случаях
...
dohod
8
```
В условиях можно проверять несколько выражений сразу, используя операторы and и or:
```py
if rashod1 >= 3 and rashod2 == 4:
dohod = rashod1
if rashod2 == porog or rashod1 < rashod2:
dohod = porog
dohod
6
```
Можно проверить много разных условий подряд:
```py
if porog == 3:
dohod = 1
elif porog == 4:
dohod = 2
elif porog == 4:
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.
Цикл for используется, чтобы пройти по всем элементам списка, строки или других подобных объектов. Цикл перебирает каждый элемент по очереди.
#### 3.1. Простой цикл.
Чтобы создать простой цикл for, нужно задать диапазон чисел, которые будут перебираться:
```py
temperatura = 5
for i in range(3, 18, 3): # i будет принимать значения 3, потом 6, потом 15
temperatura += i # Каждый раз прибавляем значение i
temperatura
50
```
#### 3.2. Более сложный цикл.
В цикле for можно использовать условия и оператор break, чтобы остановить цикл:
```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]
```
Различие между этим примером и следующим в том, что в первом случае мы меняем сам список во время цикла, а во втором - работаем с копией. Поэтому в первом примере список вырос до 11 элементов (цикл остановился по break), а во втором - остался с 8 элементами (прошелся по 4 исходным элементам и добавил 4 новых).
```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]
```
#### 3.3. Конструкция for - else.
Конструкция for - else позволяет добавить блок else, который выполнится только если цикл завершился сам по себе, без использования break. Если использовали break, то else не выполнится. Примеры:
```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:
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)
466 # Цикл прошел полностью, поэтому сработал блок else
```
#### 3.4. Работа с символьной строкой внутри цикла.
В Python строки можно перебирать в цикле, как список элементов:
```py
stroka = "Это - автоматизированная система"
stroka1 = ""
for ss in stroka:
stroka1 += " " + ss # Добавляем пробел перед каждым символом
stroka1
' Э т о - а в т о м а т и з и р о в а н н а я с и с т е м а'
```
#### 3.5. Запись цикла в строке.
Цикл можно написать коротко в одну строку. Вот пример, где рисуем график синуса:
```py
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 0x000001C7AD29A5D0>]
pylab.title("Синусоидальный сигнал")
Text(0.5, 1.0, 'Синусоидальный сигнал')
pylab.xlabel("Время")
Text(0.5, 0, 'Время')
pylab.ylabel("Сигнал")
Text(0, 0.5, 'Сигнал')
pylab.show()
```
Полученный график:
![alt text](pictures/image1.png)
### 4. Изучение управляющей конструкции while.
Цикл while выполняется пока условие верно. Нужно быть осторожным, чтобы цикл не стал бесконечным, иначе программа зависнет. Поэтому в цикле должно быть что-то, что изменяет условие.
#### 4.1. Цикл со счетчиком.
Самый простой while - это цикл со счетчиком, который мы уменьшаем или увеличиваем в каждой итерации:
```py
rashod = 300
while rashod:
print("Расход =", rashod)
rashod -= 50
Расход = 300
Расход = 250
Расход = 200
Расход = 150
Расход = 100
Расход = 50
```
Цикл остановился потому что на 7-й итерации переменная rashod стала равна 0, что в Python значит False. Если бы она никогда не стала 0, цикл был бы бесконечным.
#### 4.2. Цикл с символьной строкой.
В while можно использовать строку как условие, чтобы пройти по всем ее символам:
```py
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
...
Значение в момент 29 = 0.8956928738431645
Значение в момент 30 = 0.9051482536448664
Значение в момент 31 = 0.9137854901178277
pylab.plot(list(range(39)), sps2)
[<matplotlib.lines.Line2D object at 0x0000000029B6B610>]
pylab.title("Сигнал на выходе")
Text(0.5, 1.0, 'Сигнал на выходе')
pylab.xlabel("Время")
Text(0.5, 0, 'Время')
pylab.ylabel("Сигнал")
Text(0, 0.5, 'Сигнал')
pylab.show()
```
Полученный график:
![alt text](pictures/image2.png)
#### 4.3. Выполнение сложного алгоритма с помощью цикла.
С помощью циклов можно решать разные задачи. Вот пример: проверяем, является ли число простым.
```py
chislo = 267
kandidat = chislo // 2
while kandidat > 1:
if chislo % kandidat == 0:
print(chislo, "имеет делитель", kandidat)
break
kandidat -=1
else:
print(chislo, "является простым")
267 имеет делитель 89
```
Этот алгоритм можно переделать, чтобы проверить целый диапазон чисел:
```py
prost = [] # Список, куда будем писать простые числа
for num in range(250, 301): # Проходим по числам от 250 до 300
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
...
299 имеет делитель 23
300 имеет делитель 150
prost # Выводим список найденных простых чисел
[251, 257, 263, 269, 271, 277, 281, 283, 293]
```
#### 4.4. Инструкция continue.
Инструкция continue пропускает остаток текущей итерации и переходит к следующей:
```py
for i in range(10):
if i in [2, 4, 6, 8]: # Если число 2, 3 или 5, пропускаем его
continue
print(i)
0
1
3
5
7
9
```
### 5. Завершение работы со средой.
Сохранил файлы отчета в своем рабочем каталоге и закончил сеанс работы с IDLE.