diff --git a/TEMA5/Graf_2.5.png b/TEMA5/Graf_2.5.png new file mode 100644 index 0000000..dba0be4 Binary files /dev/null and b/TEMA5/Graf_2.5.png differ diff --git a/TEMA5/Graf_3.2.png b/TEMA5/Graf_3.2.png new file mode 100644 index 0000000..a56b239 Binary files /dev/null and b/TEMA5/Graf_3.2.png differ diff --git a/TEMA5/report.md b/TEMA5/report.md new file mode 100644 index 0000000..006349c --- /dev/null +++ b/TEMA5/report.md @@ -0,0 +1,350 @@ +# Отчет по теме 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Условные инструкции могут записываться также в одну строку в операторе присваивания по следующей схеме: +<Объект>=<значение 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() +``` + +Ответ программы: +![График](Graf_2.5.png) + +## 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 +stroka='Расчет процесса в объекте регулирования' +i=0 +sps2=[] +while i 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 +``` diff --git a/TEMA5/task.md b/TEMA5/task.md new file mode 100644 index 0000000..f8683d2 --- /dev/null +++ b/TEMA5/task.md @@ -0,0 +1,129 @@ +# Общее контрольное задание. + +Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач: +* Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите. +* Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом). +* Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям. + +***Пункт 1:*** + +```python +text = "Python is an interpreted high-level programming language" +print("Исходный текст:", text) + +for char in text: + if char.isalpha(): + if char.isupper(): + num = ord(char) - ord('A') + 1 + else: + num = ord(char) - ord('a') + 1 + print(f"Буква '{char}' - номер {num}") +``` + +Ответ программы: +```shell +Буква 'P' - номер 16 +Буква 'y' - номер 25 +Буква 't' - номер 20 +Буква 'h' - номер 8 +Буква 'o' - номер 15 +Буква 'n' - номер 14 +Буква 'i' - номер 9 +Буква 's' - номер 19 +Буква 'a' - номер 1 +Буква 'n' - номер 14 +Буква 'i' - номер 9 +Буква 'n' - номер 14 +Буква 't' - номер 20 +Буква 'e' - номер 5 +Буква 'r' - номер 18 +Буква 'p' - номер 16 +Буква 'r' - номер 18 +Буква 'e' - номер 5 +Буква 't' - номер 20 +Буква 'e' - номер 5 +Буква 'd' - номер 4 +Буква 'h' - номер 8 +Буква 'i' - номер 9 +Буква 'g' - номер 7 +Буква 'h' - номер 8 +Буква 'l' - номер 12 +Буква 'e' - номер 5 +Буква 'v' - номер 22 +Буква 'e' - номер 5 +Буква 'l' - номер 12 +Буква 'p' - номер 16 +Буква 'r' - номер 18 +Буква 'o' - номер 15 +Буква 'g' - номер 7 +Буква 'r' - номер 18 +Буква 'a' - номер 1 +Буква 'm' - номер 13 +Буква 'm' - номер 13 +Буква 'i' - номер 9 +Буква 'n' - номер 14 +Буква 'g' - номер 7 +Буква 'l' - номер 12 +Буква 'a' - номер 1 +Буква 'n' - номер 14 +Буква 'g' - номер 7 +Буква 'u' - номер 21 +Буква 'a' - номер 1 +Буква 'g' - номер 7 +Буква 'e' - номер 5 +``` + +***Пункт 2:*** +```python +words = ["Python", "is", "an", "interpreted", "high-level", "programming", "language"] + +search_word = "programming" +if search_word in words: + print(f"Слово '{search_word}' найдено в списке") +else: + print(f"Слова '{search_word}' нет в списке") + +search_word = "computer" +if search_word in words: + print(f"Слово '{search_word}' найдено в списке") +else: + print(f"Слова '{search_word}' нет в списке") +``` + +Ответ программы: +```shell +Слово 'programming' найдено в списке +Слова 'computer' нет в списке +``` + +***Пункт 3:*** +```python +students = ["Терехов", "Жалнин", "Бушманов", "Соловьёва"] +summer_grades = [4.5, 3.8, 4.2, 4.9] +winter_students = ["Бушманов", "Соловьёва", "Терехов", "Жалнин"] +winter_grades = [4.1, 4.7, 4.3, 3.9] + +surname = input("Введите фамилию студента: ") + +if surname in students: + summer_index = students.index(surname) + summer_grade = summer_grades[summer_index] + + winter_index = winter_students.index(surname) + winter_grade = winter_grades[winter_index] + + print(f"Студент {surname}:") + print(f" Летняя сессия: {summer_grade}") + print(f" Зимняя сессия: {winter_grade}") +else: + print(f"Студент {surname} не найден в списке") +``` + +Ответ программы: +```shell +labs/python-labs/TEMA5/taskO3.py" +Введите фамилию студента: Терехов +Студент Терехов: + Летняя сессия: 4.5 + Зимняя сессия: 4.3 +``` diff --git a/TEMA5/task1.1.py b/TEMA5/task1.1.py new file mode 100644 index 0000000..16fc1b3 --- /dev/null +++ b/TEMA5/task1.1.py @@ -0,0 +1,11 @@ +porog=100 +rashod1=50 +rashod2=100 + +if rashod1>=porog: + dohod=12 +elif rashod2==porog: + dohod=0 +else: + dohod=-8 +print(dohod) \ No newline at end of file diff --git a/TEMA5/task1.2.py b/TEMA5/task1.2.py new file mode 100644 index 0000000..42ce3da --- /dev/null +++ b/TEMA5/task1.2.py @@ -0,0 +1,11 @@ +rashod1=2 +rashod2=4 +porog=5 +dohod=0 + +if rashod1>=3 and rashod2==4: + dohod=rashod1 +if rashod2==porog or rashod1=4 else 0 +print(dohod) \ No newline at end of file diff --git a/TEMA5/task1.5.py b/TEMA5/task1.5.py new file mode 100644 index 0000000..1fc415d --- /dev/null +++ b/TEMA5/task1.5.py @@ -0,0 +1,5 @@ +porog=5 +rashod1=2 +rashod2=4 +if porog>=5 : rashod1=6; rashod2=0 +print(rashod1,rashod2) \ No newline at end of file diff --git a/TEMA5/task2.1.py b/TEMA5/task2.1.py new file mode 100644 index 0000000..e4e9faf --- /dev/null +++ b/TEMA5/task2.1.py @@ -0,0 +1,4 @@ +temperatura=5 +for i in range(3,18,3): + temperatura+=i +print(temperatura) \ No newline at end of file diff --git a/TEMA5/task2.2.py b/TEMA5/task2.2.py new file mode 100644 index 0000000..848138f --- /dev/null +++ b/TEMA5/task2.2.py @@ -0,0 +1,10 @@ +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) \ No newline at end of file diff --git a/TEMA5/task2.3.py b/TEMA5/task2.3.py new file mode 100644 index 0000000..37ec7e4 --- /dev/null +++ b/TEMA5/task2.3.py @@ -0,0 +1,8 @@ +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) diff --git a/TEMA5/task2.4.py b/TEMA5/task2.4.py new file mode 100644 index 0000000..fc6f498 --- /dev/null +++ b/TEMA5/task2.4.py @@ -0,0 +1,5 @@ +stroka='Это – автоматизированная система' +stroka1="" +for ss in stroka: + stroka1+=" "+ss +print(stroka1) \ No newline at end of file diff --git a/TEMA5/task2.5.py b/TEMA5/task2.5.py new file mode 100644 index 0000000..c288385 --- /dev/null +++ b/TEMA5/task2.5.py @@ -0,0 +1,11 @@ +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() \ No newline at end of file diff --git a/TEMA5/task3.1.py b/TEMA5/task3.1.py new file mode 100644 index 0000000..de1f352 --- /dev/null +++ b/TEMA5/task3.1.py @@ -0,0 +1,4 @@ +rashod=300 +while rashod: + print("Расход=",rashod) + rashod-=50 \ No newline at end of file diff --git a/TEMA5/task3.2.py b/TEMA5/task3.2.py new file mode 100644 index 0000000..c83c9c5 --- /dev/null +++ b/TEMA5/task3.2.py @@ -0,0 +1,18 @@ +import math +import pylab + +stroka='Расчет процесса в объекте регулирования' +i=0 +sps2=[] +while i 1: + if chislo % kandidat == 0: + break + kandidat -= 1 + else: + print(chislo, end=' ') \ No newline at end of file diff --git a/TEMA5/task3.4.py b/TEMA5/task3.4.py new file mode 100644 index 0000000..36de0f8 --- /dev/null +++ b/TEMA5/task3.4.py @@ -0,0 +1,4 @@ +for i in range(1, 11): + if i % 2 != 0: + continue + print(i, end=' ') \ No newline at end of file diff --git a/TEMA5/taskO1.py b/TEMA5/taskO1.py new file mode 100644 index 0000000..ed08fdd --- /dev/null +++ b/TEMA5/taskO1.py @@ -0,0 +1,10 @@ +text = "Python is an interpreted high-level programming language" +print("Исходный текст:", text) + +for char in text: + if char.isalpha(): + if char.isupper(): + num = ord(char) - ord('A') + 1 + else: + num = ord(char) - ord('a') + 1 + print(f"Буква '{char}' - номер {num}") \ No newline at end of file diff --git a/TEMA5/taskO2.py b/TEMA5/taskO2.py new file mode 100644 index 0000000..27bf723 --- /dev/null +++ b/TEMA5/taskO2.py @@ -0,0 +1,13 @@ +words = ["Python", "is", "an", "interpreted", "high-level", "programming", "language"] + +search_word = "programming" +if search_word in words: + print(f"Слово '{search_word}' найдено в списке") +else: + print(f"Слова '{search_word}' нет в списке") + +search_word = "computer" +if search_word in words: + print(f"Слово '{search_word}' найдено в списке") +else: + print(f"Слова '{search_word}' нет в списке") \ No newline at end of file diff --git a/TEMA5/taskO3.py b/TEMA5/taskO3.py new file mode 100644 index 0000000..8a63752 --- /dev/null +++ b/TEMA5/taskO3.py @@ -0,0 +1,19 @@ +students = ["Терехов", "Жалнин", "Бушманов", "Соловьёва"] +summer_grades = [4.5, 3.8, 4.2, 4.9] +winter_students = ["Бушманов", "Соловьёва", "Терехов", "Жалнин"] +winter_grades = [4.1, 4.7, 4.3, 3.9] + +surname = input("Введите фамилию студента: ") + +if surname in students: + summer_index = students.index(surname) + summer_grade = summer_grades[summer_index] + + winter_index = winter_students.index(surname) + winter_grade = winter_grades[winter_index] + + print(f"Студент {surname}:") + print(f" Летняя сессия: {summer_grade}") + print(f" Зимняя сессия: {winter_grade}") +else: + print(f"Студент {surname} не найден в списке") \ No newline at end of file