форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
360 строки
14 KiB
Markdown
360 строки
14 KiB
Markdown
# Отчет по теме 5
|
|
|
|
***Цель работы: Изучение способов формирования и использования блоков инструкций и обеспечения разветвления линий потока в алгоритмах.***
|
|
|
|
Терехов Фёдор Валерьевич, А-01-23
|
|
|
|
|
|
>Управляющие инструкции, как и в других языках программирования, используются в Python для разветвления линий потока. Их применение имеет как сходство, так и заметные отличия по сравнению с другими языками программирования. В программах на Python они применяются по следующей общей схеме:
|
|
<Управляющая инструкция>:
|
|
<отступы><Блок инструкций>
|
|
Здесь управляющая инструкция начинается зарезервированными словами, такими как if, while, for… и дополняется логическим выражением, со значением True или False.
|
|
Блок инструкций – это совокупность инструкций на языке Python, возможно, включающая вложенные управляющие инструкции. Относительно управляющей инструкции блок инструкций сдвигается влево с использованием одинаковых отступов, задаваемых либо некоторым числом пробелов, либо одной или несколькими табуляциями. Величина отступа задаётся в настройках среды (Indentation Width). По умолчанию – это 4 пробела или 1 табуляция.
|
|
|
|
|
|
## 1. Изучите ветвление по условию – управляющая инструкция if.
|
|
|
|
|
|
**Общее правило написания:**
|
|
if <условие>:
|
|
<отступы><Блок инструкций, выполняемый, если условие истинно>.
|
|
[elif <условие2>:
|
|
<отступы><Блок инструкций2, выполняемый, если условие2 истинно>
|
|
]
|
|
[else:
|
|
< отступы><Блок инструкций3, выполняемый, если условие ложно>
|
|
]
|
|
|
|
>Условие задается в виде логического выражения, которое может принимать значение True или False. Блок инструкций может располагаться на нескольких строках. Отступы во всех строках блока должны быть одинаковыми по отношению к первому символу управляющей инструкции. Если имеется вложенная управляющая инструкция, то она вводится с таким же отступом, а все строки ее блоков – отступают по отношению к ее первому символу. Признак конца блока – отсутствие отступов в очередной строке или ввод пустой строки.
|
|
Если в Блоке инструкций только одна инструкция, её можно записывать без отступов сразу за знаком «:».
|
|
|
|
Пример 1.1:
|
|
```python
|
|
porog=100
|
|
rashod1=50
|
|
rashod2=100
|
|
|
|
if rashod1>=porog:
|
|
dohod=12
|
|
elif rashod2==porog:
|
|
dohod=0
|
|
else:
|
|
dohod=-8
|
|
print(dohod)
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
0
|
|
```
|
|
|
|
Пример 1.2:
|
|
```python
|
|
rashod1=2
|
|
rashod2=4
|
|
porog=5
|
|
dohod=0
|
|
|
|
if rashod1>=3 and rashod2==4:
|
|
dohod=rashod1
|
|
if rashod2==porog or rashod1<rashod2:
|
|
dohod=porog
|
|
|
|
print(dohod)
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
5
|
|
```
|
|
|
|
Пример 1.3:
|
|
```python
|
|
porog=4
|
|
|
|
if porog==3:
|
|
dohod=1
|
|
elif porog==4:
|
|
dohod=2
|
|
elif porog==5:
|
|
dohod=3
|
|
else:
|
|
dohod=0
|
|
|
|
print(dohod)
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
2
|
|
```
|
|
|
|
>Условные инструкции могут записываться также в одну строку в операторе присваивания по следующей схеме:
|
|
<Объект>=<значение 1> if <условие> else <значение 2>
|
|
или ещё:
|
|
if <условие>: <инструкция1>[;<инструкция2>….]
|
|
|
|
Пример 1.4:
|
|
```python
|
|
porog=4
|
|
dohod=2 if porog>=4 else 0
|
|
print(dohod)
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
2
|
|
```
|
|
|
|
Пример 1.5:
|
|
```python
|
|
porog=5
|
|
rashod1=2
|
|
rashod2=4
|
|
if porog>=5 : rashod1=6; rashod2=0
|
|
print(rashod1,rashod2)
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
6 0
|
|
```
|
|
|
|
## 2. Цикл по перечислению – управляющая инструкция for.
|
|
|
|
***Общее правило написания:***
|
|
for <Объект-переменная цикла> in <объект>:
|
|
<отступы><Блок инструкций 1 – тело цикла>
|
|
[else:
|
|
< отступы ><Блок инструкций 2 – если в цикле не сработал break>]
|
|
|
|
>Здесь <объект> - любой определенный до начала цикла объект из классов строка, список, кортеж, множество, словарь. <Объект-переменная цикла> - объект, в качестве значений которого поочередно будут задаваться элементы объекта, которые могут быть объектами любого типа. <Блок инструкций 1 – тело цикла> - совокупность инструкций, которая может содержать или не содержать инструкцию break, вызывающую досрочное завершение цикла при некоторых условиях. Блок инструкций 1 обычно выполняется многократно по мере того, как объект-переменная цикла принимает значения из сложного объекта. Если в цикле имеется необязательная часть: else и Блок инструкций 2, то он будет выполняться перед завершением цикла только в том случае, если при выполнении цикла не было его прерывания по инструкции break.
|
|
Если Блоке инструкций 1 или в Блоке инструкций 2 только одна инструкция, то её можно записывать без отступов сразу за двоеточием.
|
|
|
|
### 2.1. Простой цикл.
|
|
|
|
```python
|
|
temperatura=5
|
|
for i in range(3,18,3):
|
|
temperatura+=i
|
|
print(temperatura)
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
50
|
|
```
|
|
|
|
### 2.2. Более сложный цикл.
|
|
|
|
```python
|
|
sps=[2,15,14,8]
|
|
for k in sps:
|
|
if len(sps)<=10:sps.append(sps[0])
|
|
else: break
|
|
print("После первого цикла:",sps)
|
|
sps=[2,15,14,8]
|
|
for k in sps[:]:
|
|
if len(sps)<=10:sps.append(sps[0])
|
|
else: break
|
|
print("После второго цикла:",sps)
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
После первого цикла: [2, 15, 14, 8, 2, 2, 2, 2, 2, 2, 2]
|
|
После второго цикла: [2, 15, 14, 8, 2, 2, 2, 2]
|
|
```
|
|
|
|
>Во втором варианте итерация происходит по неизменяемой копии списка, поэтому цикл выполняется полное количество раз (4 раза), тогда как в первом варианте итерация происходит по изменяемому списку, и цикл завершается досрочно (через break, иначе цикл был бы бесконечным).
|
|
|
|
### 2.3. Пример: создание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500, эта сумма должна быть отображена на экране.
|
|
|
|
```python
|
|
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)
|
|
```
|
|
|
|
Ответ программы (1 попытка):
|
|
```shell
|
|
|
|
```
|
|
|
|
Ответ программы (2 попытка):
|
|
```shell
|
|
484
|
|
```
|
|
|
|
Ответ программы (3 попытка):
|
|
```shell
|
|
450
|
|
```
|
|
|
|
Ответ программы (4 попытка):
|
|
```shell
|
|
|
|
```
|
|
|
|
Ответ программы (5 попытка):
|
|
```shell
|
|
359
|
|
```
|
|
|
|
>Объяснение поведения программы:
|
|
Почему вывод значения ss бывает не всегда:
|
|
else относится к циклу for, а не к if
|
|
Блок else выполняется только если цикл завершился нормально (без оператора break). Если срабатывает break, блок else пропускается.
|
|
|
|
### 2.4. Пример с символьной строкой.
|
|
|
|
```python
|
|
stroka='Это – автоматизированная система'
|
|
stroka1=""
|
|
for ss in stroka:
|
|
stroka1+=" "+ss
|
|
print(stroka1)
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а
|
|
```
|
|
|
|
### 2.5. Запись цикла в строке. Пример: создание списка с синусоидальным сигналом.
|
|
|
|
```python
|
|
import math
|
|
import pylab
|
|
|
|
sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)]
|
|
|
|
pylab.plot(sps2)
|
|
pylab.title('Синусоидальный сигнал')
|
|
pylab.xlabel('Отсчеты')
|
|
pylab.ylabel('Амплитуда')
|
|
pylab.grid(True)
|
|
pylab.show()
|
|
```
|
|
|
|
Ответ программы:
|
|

|
|
|
|
## 3. Цикл «пока истинно условие» – управляющая инструкция while.
|
|
|
|
***Общее правило написания:***
|
|
while <Условие>:
|
|
<отступы><Блок инструкций 1 – тело цикла>
|
|
[else:
|
|
<отступы><Блок инструкций 2 – если в цикле не сработал break>]
|
|
|
|
>Здесь <Условие> - некоторое логическое выражение. Если на очередном витке цикла оно принимает значение True (или ≠0), то выполняется Блок инструкций 1. При этом, если в этом блоке присутствует инструкция break и она будет выполнена, то цикл завершается, иначе – переходит к новому витку цикла. В блоке инструкций 1 могут быть изменены значения объектов, входящих в Условие и его значение тоже может измениться, Если же его значением останется True, то вновь выполняется Блок инструкций 1 и т.д. Если в цикле присутствует Блок инструкций 2, то он будет выполнен, если завершение цикла произошло не по инструкции break, а по значению False (или значению =0) Условия.
|
|
|
|
### 3.1. Цикл со счётчиком.
|
|
|
|
```python
|
|
rashod=300
|
|
while rashod:
|
|
print("Расход=",rashod)
|
|
rashod-=50
|
|
```
|
|
|
|
Ответ программы:
|
|
```shell
|
|
Расход= 300
|
|
Расход= 250
|
|
Расход= 200
|
|
Расход= 150
|
|
Расход= 100
|
|
Расход= 50
|
|
```
|
|
|
|
Цикл завершился, потому что в Python число 0 интерпретируется как логическое значение False.
|
|
|
|
### 3.2. Пример с символьной строкой.
|
|
|
|
```python
|
|
import math
|
|
import 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
|
|
|
|
pylab.plot(sps2)
|
|
pylab.title('Сигнал на выходе инерционного звена')
|
|
pylab.xlabel('Моменты времени')
|
|
pylab.ylabel('Значение')
|
|
pylab.grid(True)
|
|
pylab.show()
|
|
```
|
|
|
|
Ответ программы:
|
|

|
|
|
|
|
|
### 3.3. Определение, является ли число простым (делится только на самого себя или 1).
|
|
|
|
```python
|
|
# Проверка одного числа
|
|
chislo = 267
|
|
kandidat = chislo // 2
|
|
while kandidat > 1:
|
|
if chislo % kandidat == 0:
|
|
print(chislo, ' имеет множитель ', kandidat)
|
|
break
|
|
kandidat -= 1
|
|
else:
|
|
print(chislo, ' является простым!')
|
|
|
|
print("\nПростые числа в диапазоне от 250 до 300:")
|
|
|
|
# Проверка всех чисел в диапазоне от 250 до 300
|
|
for chislo in range(250, 301):
|
|
kandidat = chislo // 2
|
|
while kandidat > 1:
|
|
if chislo % kandidat == 0:
|
|
break
|
|
kandidat -= 1
|
|
else:
|
|
print(chislo, end=' ')
|
|
```
|
|
|
|
Ответ программы:
|
|
|
|
```shell
|
|
267 имеет множитель 89
|
|
|
|
Простые числа в диапазоне от 250 до 300:
|
|
251 257 263 269 271 277 281 283 293
|
|
```
|
|
|
|
### 3.4. Continue.
|
|
|
|
>Помимо инструкции break в обоих видах циклов могут использоваться инструкции continue, которые не вызывают завершения цикла, но завершают его текущий виток и обеспечивают переход к следующему витку.
|
|
|
|
Пример: Вывод четных чисел от 1 до 10 с использованием continue.
|
|
|
|
```python
|
|
for i in range(1, 11):
|
|
if i % 2 != 0:
|
|
continue
|
|
print(i, end=' ')
|
|
```
|
|
|
|
Ответ программы:
|
|
|
|
```shell
|
|
2 4 6 8 10
|
|
```
|