BezhenarAN 1 день назад
Родитель b8a2291ec4
Сommit ad43ebd841

Двоичные данные
TEMA5/Figure1.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 41 KiB

Двоичные данные
TEMA5/Figure2.png

Двоичный файл не отображается.

После

Ширина:  |  Высота:  |  Размер: 19 KiB

@ -0,0 +1,342 @@
# Отчет по Теме 5
Беженарь Алёна, А-02-23
# Блоки инструкций, управляющие инструкции.
## 1. Настройка текущего каталога.
```py
import os
os.chdir("C:\\Users\\Дружок\\Desktop\\ПОАС\\python-labs\\TEMA4")
```
## 2. Ветвление по условию if()
Условие задается в виде логического выражения, которое может принимать значение True или False.
Блок инструкций может располагаться на нескольких строках. Признак конца блока – отсутствие отступов в очередной строке или ввод пустой строки.
Пример 1
```py
>>> porog, rashod1, rashod2 = 5, 10, 50
>>> if rashod1>=porog:
... dohod=12
... elif rashod2==porog:
... dohod=0
... else:
... dohod=-8
>>> dohod
12
```
Пример 2 (условия внутри условия)
```py
>>> if rashod1>=3 and rashod2==4:
... dohod=rashod1
... if rashod2==porog or rashod1<rashod2:
... dohod=porog
>>> dohod
12
```
Пример 3 (ветвление линий потока)
```py
>>> if porog==3:
... dohod=1
... elif porog==4:
... dohod=2
... elif porog==5:
... dohod=3
... else:
... dohod=0
>>> dohod
3
```
Условные инструкции могут записываться также в одну строку в операторе присваивания по сле-дующей схеме:
<Объект>=<значение 1> if <условие> else <значение 2> или ещё if <условие>: <инструкция1>[;<инструкция2>….]
Пример 4 (записи условий в одну строку)
```py
>>> dohod=2 if porog>=4 else 0
>>> dohod
2
>>> if porog>=5 : rashod1=6; rashod2=0
rashod1;rashod2
6
0
```
## 3. Цикл по перечислению for().
for <Объект-переменная цикла> in <объект>:
<отступы><Блок инструкций 1 – тело цикла>
[else:
< отступы ><Блок инструкций 2 – если в цикле не сработал break>], где
<объект> - любой определенный до начала цикла объект из классов строка, список, кортеж, множество, словарь.
<Объект-переменная цикла> - объект, в качестве значений которого поочередно будут задаваться элементы объекта, которые могут быть объектами любого типа.
<Блок инструкций 1 – тело цикла> - совокупность инструкций, которая может содержать или не содержать инструкцию break, вызывающую досрочное завершение цикла при некоторых условиях.
Если в цикле имеется необязательная часть: else и Блок инструкций 2, то он будет выполняться перед завершением цикла только в том случае, если при выполнении цикла не было его прерывания по инструкции break.
Пример 3.1
```py
>>> temperatura=5
>>> for i in range(3,18,3):
... temperatura+=i
>>> 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]
```
Выполним чуть-чуть отличающуюся совокупность операций:
```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]
```
Для 1 случая:
Цикл работает непосредственно с исходным списком sps.
При каждом добавлении элемента (sps.append(sps[0])) длина списка увеличивается
Цикл будет выполняться бесконечно пока список не превысит 10 элементов, потому что список постоянно растет.
Для 2 случая:
Создается копия списка sps[:] перед началом цикла и сам цикл выполняется для фиксированного количества элементов (исходная длина списка)
Изменения исходного списка sps не влияют на выполнение цикла
Пример 3.3
Конструкция for - else позволяет реализовать обычный цикл-перечисление с дополнительным условием, которое выполнится только в том случае, если работа цикла завершится самостоятельно (не в случае применения оператора break). Пример такого цикла представлен ниже:
```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)
...
481 # Цикл завершился самостоятельно, поэтому сработало дополнительное условие
```
Пример 3.4 Работа с символьной строкой внутри цикла.
```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 0x000002741F3CF850>]
>>> pylab.title("Синусоидальный сигнал")
Text(0.5, 1.0, 'Синусоидальный сигнал')
>>> pylab.xlabel("Время")
Text(0.5, 0, 'Время')
>>> pylab.ylabel("Сигнал")
Text(0, 0.5, 'Сигнал')
>>> pylab.show()
```
Полученный график:
![Созданный график](Figure1.png)
## 4. Изучение управляющей конструкции while.
Цикл, выполняющийся пока определенное условие истинно, реализуется с помощью конструкции while. В данном цикле нужно учесть возможность его прерывания, иначе, при постоянно истинном условии выполнения, цикл станет бесконечным, что приведет к большим проблемам в работе программы.
Пример 4.1. Цикл со счетчиком.
```py
>>> rashod = 300
>>> while rashod:
... print("Расход =", rashod)
... rashod -= 50
...
Расход = 300
Расход = 250
Расход = 200
Расход = 150
Расход = 100
Расход = 50
```
Цикл в данном примере остановил свою работу, так как на 7 итерации значение переменной rashod достигло 0, что интерпретируется как значение False. Если бы данная переменная никогда не прнинимала значение 0, то получился бы бесконечный цикл.
Пример 4.2.
Как и в цикле for, в цикле 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
Значение в момент 4 = 0.197375320224904
Значение в момент 5 = 0.2449186624037092
Значение в момент 6 = 0.2913126124515909
Значение в момент 7 = 0.3363755443363322
Значение в момент 8 = 0.3799489622552249
Значение в момент 9 = 0.421899005250008
Значение в момент 10 = 0.4621171572600098
Значение в момент 11 = 0.5005202111902354
Значение в момент 12 = 0.5370495669980353
Значение в момент 13 = 0.5716699660851172
Значение в момент 14 = 0.6043677771171636
Значение в момент 15 = 0.6351489523872873
Значение в момент 16 = 0.6640367702678489
Значение в момент 17 = 0.6910694698329307
Значение в момент 18 = 0.7162978701990245
Значение в момент 19 = 0.7397830512740043
Значение в момент 20 = 0.7615941559557649
Значение в момент 21 = 0.7818063576087741
Значение в момент 22 = 0.8004990217606297
Значение в момент 23 = 0.8177540779702878
Значение в момент 24 = 0.8336546070121553
Значение в момент 25 = 0.8482836399575129
Значение в момент 26 = 0.8617231593133063
Значение в момент 27 = 0.874053287886007
Значение в момент 28 = 0.8853516482022625
Значение в момент 29 = 0.8956928738431645
Значение в момент 30 = 0.9051482536448664
Значение в момент 31 = 0.9137854901178277
Значение в момент 32 = 0.9216685544064713
Значение в момент 33 = 0.9288576214547277
Значение в момент 34 = 0.935409070603099
Значение в момент 35 = 0.9413755384972874
Значение в момент 36 = 0.9468060128462683
Значение в момент 37 = 0.9517459571646616
Значение в момент 38 = 0.9562374581277391
>>> pylab.plot(list(range(39)), sps2)
[<matplotlib.lines.Line2D object at 0x00000274207FDC90>]
>>> pylab.title("Сигнал на выходе")
Text(0.5, 1.0, 'Сигнал на выходе')
>>> pylab.xlabel("Время")
Text(0.5, 0, 'Время')
>>> pylab.ylabel("Сигнал")
Text(0, 0.5, 'Сигнал')
>>> pylab.show()
```
Полученный график:
![Созданный график 2](Figure2.png)
Пример 4.3. Выполнение сложного алгоритма с помощью цикла.
С помощью циклов можно реализовывать различные алгоритмы. Так, например, в примере ниже показан алгоритм проверки заданного числа на то, является ли оно простым.
```py
>>> chislo = 267 #Проверяемое число
>>> kandidat = chislo // 2 # Для значений chislo > 1
>>> while kandidat > 1:
... if chislo % kandidat == 0: # Остаток от деления
... print(chislo, "имеет делитель", kandidat)
... break # else выполняться не будет
... kandidat -=1
... else: # При завершении цикла без break
... print(chislo, "является простым")
...
267 имеет делитель 89
```
Данный алгоритм можно переработать для проверки некоторого диапазона чисел(например возьмем диапазон от 250 до 300):
```py
>>> prost = [] # Список для записи в него простых чисел
>>> for num in range(250, 301): # Цикл, задающий диапазон рассматривыаемых значений
... 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
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
>>> prost # Отображение списка простых чисел после работы алгоритма
[251, 257, 263, 269, 271, 277, 281, 283, 293]
```
Пример 4.3. Инструкция continue.
Инструкция continue позволяет завершить выполнение текущей итерации цикла и перейти к следующей:
```py
>>> for i in range(7):
... if i in [2, 3, 5]: # Если число равно 2, 3 или 5, то сразу же начинается новая итерация
... continue
... print(i)
...
0
1
4
6
7
```
## 5. Завершение работы со средой.
Сохранила файлы отчета в своем рабочем каталоге и закончила сеанс работы с IDLE.

@ -0,0 +1,88 @@
# Общее контрольное задание по теме 5
Беженарь Алёна, А-02-23
## Задание
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:
* Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
* Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
* Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
## Решение
1.
```py
>>> import string
>>> text = input("Введите строку на английском языке: ")
Введите строку на английском языке: Hello world!
>>> for i in text:
... if str.lower(i) in string.ascii_lowercase: #string.ascii_lowercase - это строка, содержащая все строчные буквы английского алфавита: 'abcdefghijklmnopqrstuvwxyz'
... order = string.ascii_lowercase.index(str.lower(i)) + 1 #получение порядкого номера в английском алфавите.
... print("Порядковый номер символа \"{}\" равен {}".format(i, order))
... else:
... print("Символа \"{}\" нет в английском алфавите".format(i))
Порядковый номер символа "H" равен 8
Порядковый номер символа "e" равен 5
Порядковый номер символа "l" равен 12
Порядковый номер символа "l" равен 12
Порядковый номер символа "o" равен 15
Символа " " нет в английском алфавите
Порядковый номер символа "w" равен 23
Порядковый номер символа "o" равен 15
Порядковый номер символа "r" равен 18
Порядковый номер символа "l" равен 12
Порядковый номер символа "d" равен 4
Символа "!" нет в английском алфавите
```
2.
```py
>>> string = """Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом)."""
>>> words = [word.strip('.,:;!?()–""') for word in string.split() if word.strip('.,:;!?()-–—""')] # Метод strip() позволяет убрать лишние символы с обеих сторон строки. По умолчанию он чистит пробелы, но если передать ему аргумент, то можно удалить и другие символы. (if word.strip('.,:;!?()-–—""') проверка на пустую строку)
>>> words
['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
>>> if input("Введите слово: ") in words:
... print("Слово есть в списке")
... else:
... print("Слова нет в списке")
...
Введите слово: определите
Слово есть в списке
>>> if input("Введите слово: ") in words:
... print("Слово есть в списке")
... else:
... print("Слова нет в списке")
...
Введите слово: помогите
Слова нет в списке
```
3.
```py
>>> students_summer = ["Беженарь", "Володин", "Ефимова", "Степанов"]
>>> marks_summer = [5, 4.5, 4.8, 4.6]
>>> students_winter = ["Степанов", "Ефимова","Володин", "Беженарь"]
>>> marks_winter = [4.9, 3.5, 4.3, 4.7]
>>> name = input("Введите фамилию студента: ")
Введите фамилию студента: Ефимова
>>> if name in students_summer and name in students_winter:
... summer_mark = marks_summer[students_summer.index(name)]
... winter_mark = marks_winter[students_winter.index(name)]
... string = """Студент: {}\nОценка за летнюю сессию: {}\nОценка за зимнюю сессию: {}"""
... print(string.format(name, summer_mark, winter_mark))
... else:
... print("Студент {} не найден".format(name))
Студент: Ефимова
Оценка за летнюю сессию: 4.8
Оценка за зимнюю сессию: 3.5
>>> name = input("Введите фамилию студента: ")
Введите фамилию студента: Антонов
>>> if name in students_summer and name in students_winter:
... summer_mark = marks_summer[students_summer.index(name)]
... winter_mark = marks_winter[students_winter.index(name)]
... string = """Студент: {}\nОценка за летнюю сессию: {}\nОценка за зимнюю сессию: {}"""
... print(string.format(name, summer_mark, winter_mark))
... else:
... print("Студент {} не найден".format(name))
Студент Антонов не найден
```
Загрузка…
Отмена
Сохранить