10 KiB
Отчет по теме 5
Коломейцев Дмитрий, А-02-23
Блоки инструкций, управляющие инструкции
1-2. Изучение управляющей конструкции if.
Оператор if используется для того, чтобы в программе выбирать разные пути выполнения кода в зависимости от условия. Условие - это логическое выражение, которое принимает значение True или False. После условия идет блок кода с отступом.
porog = 10
rashod1 = 6
rashod2 = 4
if rashod1 >= porog: # Проверяем первое условие
dohod = 12 # Код выполнится, если условие верно
elif rashod2 == porog: # Проверяем второе условие
dohod = 0 # Код выполнится, если верно второе условие
else: # Если оба условия неверны
dohod = 8 # Этот код выполнится во всех остальных случаях
...
dohod
8
В условиях можно проверять несколько выражений сразу, используя операторы and и or:
if rashod1 >= 3 and rashod2 == 4:
dohod = rashod1
if rashod2 == porog or rashod1 < rashod2:
dohod = porog
dohod
6
Можно проверить много разных условий подряд:
if porog == 3:
dohod = 1
elif porog == 4:
dohod = 2
elif porog == 4:
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.
Цикл for используется, чтобы пройти по всем элементам списка, строки или других подобных объектов. Цикл перебирает каждый элемент по очереди.
3.1. Простой цикл.
Чтобы создать простой цикл for, нужно задать диапазон чисел, которые будут перебираться:
temperatura = 5
for i in range(3, 18, 3): # i будет принимать значения 3, потом 6, потом 15
temperatura += i # Каждый раз прибавляем значение i
temperatura
50
3.2. Более сложный цикл.
В цикле for можно использовать условия и оператор break, чтобы остановить цикл:
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 новых).
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 не выполнится. Примеры:
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 строки можно перебирать в цикле, как список элементов:
stroka = "Это - автоматизированная система"
stroka1 = ""
for ss in stroka:
stroka1 += " " + ss # Добавляем пробел перед каждым символом
stroka1
' Э т о - а в т о м а т и з и р о в а н н а я с и с т е м а'
3.5. Запись цикла в строке.
Цикл можно написать коротко в одну строку. Вот пример, где рисуем график синуса:
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 - это цикл со счетчиком, который мы уменьшаем или увеличиваем в каждой итерации:
rashod = 300
while rashod:
print("Расход =", rashod)
rashod -= 50
Расход = 300
Расход = 250
Расход = 200
Расход = 150
Расход = 100
Расход = 50
Цикл остановился потому что на 7-й итерации переменная rashod стала равна 0, что в Python значит False. Если бы она никогда не стала 0, цикл был бы бесконечным.
4.2. Цикл с символьной строкой.
В while можно использовать строку как условие, чтобы пройти по всем ее символам:
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. Выполнение сложного алгоритма с помощью цикла.
С помощью циклов можно решать разные задачи. Вот пример: проверяем, является ли число простым.
chislo = 267
kandidat = chislo // 2
while kandidat > 1:
if chislo % kandidat == 0:
print(chislo, "имеет делитель", kandidat)
break
kandidat -=1
else:
print(chislo, "является простым")
267 имеет делитель 89
Этот алгоритм можно переделать, чтобы проверить целый диапазон чисел:
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 пропускает остаток текущей итерации и переходит к следующей:
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.

