Artyom 1 неделю назад
Родитель 9aafce7ee6
Сommit 5936e26452

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

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

После

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

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

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

После

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

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

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

После

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

@ -0,0 +1,310 @@
# Отчет по теме 5
Степанов Артём, А-02-23
## Блоки инструкций, управляющие инструкции
### 1. Установка рабочего каталога. Создание рабочего протокола.
В оболочке IDLE установил актуальный рабочий каталог, а затем в нём создал рабочий протокол.
![Скриншот созданного рабочего протокола](pictures/figure0.png)
### 2. Изучение управляющей конструкции __if__.
Управляющая конструкция __if__ позволяет реализовать ветвление по определенному условию. Само условие задается в виде логического выражения, которое должно принимать значение True или False. После условия следует соответствующий ему блок инструкций с отступом по всем строкам блока.
```py
>>> porog = 10
>>> rashod1 = 6
>>> rashod2 = 4
>>> if rashod1 >= porog: # Условие 1
... dohod = 12 # Блок инструкций, выполняющийся в случае истинности условия 1
... elif rashod2 == porog: # Условие 2
... dohod = 0 # Блок инструкций, выполняющийся в случае истинности условия 2
... else: # Оператор else - иначе
... dohod = 8 # Блок инструкций, выполняющийся в случае ложности условий 1 и 2
...
>>> dohod
8
```
В условиях можно использовать несколько логических выражений, связанных логическими операторами:
```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. Простой цикл.
Для реализации простого цикла по перечислению достаточно задать определенный диапазон (возможно с определенным шагом) изменения объекта-переменной цикла:
```py
>>> temperatura = 5
>>> for i in range(3, 18, 3): # i = 3 -> i = 6 -> ... -> i = 15
... temperatura += i # 5 + 3 -> 8 + 6 -> ... -> 35 + 15
...
>>> temperatura
50
```
#### 3.2. Более сложный цикл.
Внутри цикла можно использовать различные условия, а также прерывать его выполнение с помощью оператора __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 элементами (удовлетворяет условию прерывания цикла), а во втором - с 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__ позволяет реализовать обычный цикл-перечисление с дополнительным условием, которое выполнится только в том случае, если работа цикла завершится самостоятельно (не в случае применения оператора 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)
...
439 # Цикл завершился самостоятельно, поэтому сработало дополнительное условие
>>>
```
#### 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()
```
Полученный график:
![Созданный график](pictures/figure1.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, что интерпретируется как значение 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
...
Значение в момент 37 = 0.9517459571646616
Значение в момент 38 = 0.9562374581277391
>>> pylab.plot(list(range(39)), sps2)
[<matplotlib.lines.Line2D object at 0x00000292D5637DD0>]
>>> pylab.title("Сигнал на выходе")
Text(0.5, 1.0, 'Сигнал на выходе')
>>> pylab.xlabel("Время")
Text(0.5, 0, 'Время')
>>> pylab.ylabel("Сигнал")
Text(0, 0.5, 'Сигнал')
>>> pylab.show()
```
Полученный график:
![График сигнала на выходе инерционного звена](pictures/figure2.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): # Цикл, задающий диапазон рассматривыаемых значений
... 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(7):
... if i in [2, 3, 5]: # Если число равно 2, 3 или 5, то сразу же начинается новая итерация
... continue
... print(i)
...
0
1
4
6
7
>>>
```
### 5. Завершение работы со средой.
Сохранил файлы отчета в своем рабочем каталоге и закончил сеанс работы с IDLE.

@ -0,0 +1,109 @@
# Общее контрольное задание по теме 5
Степанов Артём, А-02-23
## Задание
Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач:
* Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите.
* Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом).
* Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям.
## Решение
```py
>>> #1
>>>
>>> import string
>>> text = input("Введите строку на английском языке: ")
Введите строку на английском языке: Hello world!
>>> for i in text:
... if str.lower(i) in string.ascii_lowercase:
... 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
>>>
>>> string = """Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом)."""
>>> words = [word for word in ["".join(char if char.isalpha() else "" for char in word) for word in string.split(" ")] if word != ""]
>>> words
['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', 'с', 'отсутствующим', 'словом']
>>>
>>> if input("Введите слово: ").lower() in words:
... print("Слово есть в списке")
... else:
... print("Слова нет в списке")
...
Введите слово: СоОбЩеНиЕ
Слово есть в списке
>>> if input("Введите слово: ").lower() in words:
... print("Слово есть в списке")
... else:
... print("Слова нет в списке")
...
Введите слово: арбуз
Слова нет в списке
>>>
>>> #3
>>>
>>> import random
>>> students_summer = ["Беженарь", "Володин", "Коломейцев", "Степанов"]
>>> marks_summer = [5, 4.5, 4.4, 4.6]
>>> students_winter = random.sample(students_summer, len(students_summer))
>>> marks_winter = random.sample(marks_summer, len(marks_summer))
>>> students_winter
['Степанов', 'Коломейцев', 'Беженарь', 'Володин']
>>> marks_winter
[4.5, 5, 4.6, 4.4]
>>> 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 = """
... Студент: {}
... Оценка за летнюю сессию: {}
... Оценка за зимнюю сессию: {}
... """
... print(string.format(name, summer_mark, winter_mark))
... else:
... print("Студент {} не найден".format(name))
...
Студент: Володин
Оценка за летнюю сессию: 4.5
Оценка за зимнюю сессию: 4.4
>>>
>>> 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 = """
... Студент: {}
... Оценка за летнюю сессию: {}
... Оценка за зимнюю сессию: {}
... """
... print(string.format(name, summer_mark, winter_mark))
... else:
... print("Студент {} не найден".format(name))
...
Студент Киреев не найден
>>>
```
Загрузка…
Отмена
Сохранить