diff --git a/TEMA5/pictures/figure0.png b/TEMA5/pictures/figure0.png new file mode 100644 index 0000000..418af91 Binary files /dev/null and b/TEMA5/pictures/figure0.png differ diff --git a/TEMA5/pictures/figure1.png b/TEMA5/pictures/figure1.png new file mode 100644 index 0000000..c7e757d Binary files /dev/null and b/TEMA5/pictures/figure1.png differ diff --git a/TEMA5/pictures/figure2.png b/TEMA5/pictures/figure2.png new file mode 100644 index 0000000..07256e3 Binary files /dev/null and b/TEMA5/pictures/figure2.png differ diff --git a/TEMA5/report.md b/TEMA5/report.md new file mode 100644 index 0000000..33ccc12 --- /dev/null +++ b/TEMA5/report.md @@ -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) + [] +>>> 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) + [] +>>> 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. diff --git a/TEMA5/task.md b/TEMA5/task.md new file mode 100644 index 0000000..b52a147 --- /dev/null +++ b/TEMA5/task.md @@ -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)) +... + Студент Киреев не найден +>>> +``` \ No newline at end of file