форкнуто от main/python-labs
Родитель
ce6b3bf255
Сommit
5a52886a5a
|
После Ширина: | Высота: | Размер: 124 KiB |
|
После Ширина: | Высота: | Размер: 46 KiB |
@ -1,7 +1,363 @@
|
|||||||
# Отчет по теме 5
|
# Отчет по теме 5
|
||||||
|
|
||||||
|
|
||||||
Коломейцев Дмитрий, А-02-23
|
Коломейцев Дмитрий, А-02-23
|
||||||
|
|
||||||
## Тема 5. Блоки инструкций, управляющие инструкции
|
|
||||||
|
|
||||||
## 1.
|
## Блоки инструкций, управляющие инструкции
|
||||||
|
|
||||||
|
|
||||||
|
### 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()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Полученный график:
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
### 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()
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
Полученный график:
|
||||||
|
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
|
||||||
|
#### 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.
|
||||||
|
|||||||
Загрузка…
Ссылка в новой задаче