diff --git a/TEMA5/report.md b/TEMA5/report.md new file mode 100644 index 0000000..8b3a07f --- /dev/null +++ b/TEMA5/report.md @@ -0,0 +1,376 @@ +# Отчет по теме 5 +Подольский Никита, А-01-23 +### 1. Запуск интерактивной оболочки IDLE. + +### 2. Ветвление по условию – управляющая инструкция if. + +- Операции определения значения dohod: +``` +>>>porog = 5 +>>>rashod1 = 8 +>>>rashod2 = 6 +>>>if rashod1 >= porog: + dohod = 12 + +if rashod1 >= porog: + dohod = 12 +elif rashod2 == porog: + dohod = 0 +else: + dohod = 8 + +>>>print(dohod) +# Выполним операцию для двух случаев +>>>rashod2 = 4 +>>>if rashod1 >= 3 and rashod2 == 4: + dohod = rashod1 + if rashod2 == porog or rashod1 < rashod2: + dohod = porog +>>>print(dohod) +8 # Выполнилось одно условие +>>>porog = 4 +>>>if rashod1 >= 3 and rashod2 == 4: + dohod = rashod1 + if rashod2 == porog or rashod1 < rashod2: + dohod = porog +>>>print(dohod) +4 # Выполнились оба условия +``` +- Операция с множественным ветвлением линий потока: +``` +>>>if porog == 3: # Не подходит + dohod = 1 +elif porog == 4: # Подходит + dohod = 2 +elif porog == 5: # Игнорируется + dohod = 3 +else: # Игнорируется + dohod = 0 +>>>print(dohod) +2 +``` + +- Инструкции, записывающиеся в одну строку в операторе присваивания. +<Объект>=<значение 1> if <условие> else <значение 2> + +``` +>>>dohod = 2 if porog >- 4 else 0 +>>>print(dohod) +2 +>>>if porog >= 5: rashod1 = 6; rashod2 = 0 # porog = 4 +>>>print(rashod1) +8 +>>>print(rashod2) +4 +>>>porog = 6 +>>>if porog >= 5: rashod1 = 6; rashod2 = 0 +>>>print(rashod1) +6 +>>>print(rashod2) +0 +``` + +### 3. Цикл по перечислению – управляющая инструкция for. +Общее правило написания: +for <Объект-переменная цикла> in <объект>: +<отступы><Блок инструкций 1 – тело цикла> +[else: +<отступы ><Блок инструкций 2 – если в цикле не сработал break>] + + +#### 3.1. Простой цикл. +Выполняем цикл, который проходится по значениям от 3 до 18(не включительно) с шагом 3 и суммирует их в переменную temperatura. + +``` +>>>temperatura = 5 +>>>for i in range(3, 18, 3): + temperatura += i + +>>>temperatura +50 +``` +#### 3.2. Более сложный цикл. + +``` +>>>sps = [2, 15, 14, 18] +>>>for k in sps: + if len(sps) <= 10: sps.append(sps[0]) + else: break +>>>sps +[2, 15, 14, 18, 2, 2, 2, 2, 2, 2, 2] +``` + +Как видно, в конец цикла добавляется двойка до тех пор, пока длина не превысит 10. Важно +понимать, что sps - это и объект, по которому проходит k, и объект, изменяющийся +внутри цикла. То есть k будет двигаться по циклу бесконечно, и выполнение останавливается +именно из-за условия if - else. +(При этом else в данном случае относится к if, а не к for (это можно понять не только по +смыслу, но и по табуляции) + +``` +>>>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] +``` +Отличия от предыдущего случая: +- Итерация происходит по фиксированной копии, а не по изменяемому списку. +- Создание копии: При входе в цикл создаётся копия текущего списка sps +- Изменение оригинала: Внутри цикла изменяется оригинальный список sps +- Количество итераций фиксировано: Определяется длиной изначальной копии + +#### 3.3. : Cоздание списка с 10 целыми случайными числами из диапазона от 1 до 100. При этом, если сумма чисел не превышает 500, эта сумма должна быть отображена на экране. + +``` +>>>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) +# Программа ничего не вывела +>>>ss +512 +>>>sps5 +[47, 92, 92, 54, 52, 78, 67, 30] +``` +После того, как прошло девять итераций, сумма элементов списка уже была больше 500, поэтому +цикл закончился из-за if, а не из-за окончания диапазона range(10). + +Попробуем обнулить список и выполнить ту же программу еще раз: +``` +>>>sps5 = [] +>>>for i in range(10): + sps5.append(rn.randint(1, 100)) + ss = sum(sps5) + if ss > 500: break +else: + print(ss) +419 +``` +В этот раз программа вывела ответ, следовательно сработал else и break не сработал. + +#### 3.4. Пример с символьной строкой +``` +>>>stroka='Это – автоматизированная система' +>>>stroka1 = " " +>>>for ss in stroka: + stroka1 += " " + ss +>>>print(stroka1) + Э т о – а в т о м а т и з и р о в а н н а я с и с т е м а +``` +Переменная stroka содержит исходную строку: "Это – автоматизированная система". +Переменная stroka1 инициализируется как пустая строка. +В цикле for происходит перебор каждого символа ss из строки stroka. +На каждой итерации к stroka1 добавляется пробел и текущий символ ss. +После обработки всех символов в stroka1 формируется новая строка, где каждый символ исходной строки разделён пробелом. + + +#### 3.5. Конструкция list comprehension. +Пример: создание списка с синусоидальным сигналом.(Внутри квадратных скобок записано выражение-генератор) +``` +>>>import math +>>>sps2 = [math.sin(i * math.pi / 5 + 2) for i in range(100)] +>>>sps2 +[0.9092974268256817, 0.49103209793281005, -0.11479080280322804, -0.6767675184643197, -0.9802420445539634, -0.9092974268256817, -0.49103209793281016, 0.11479080280322791, 0.6767675184643196, 0.9802420445539634, 0.9092974268256818, 0.4910320979328103, -0.1147908028032278, -0.6767675184643196, -0.9802420445539632, -0.9092974268256818, -0.4910320979328104, 0.11479080280322768, 0.6767675184643195, 0.9802420445539632, 0.9092974268256819, 0.4910320979328105, -0.11479080280322579, -0.6767675184643194, -0.9802420445539632, -0.9092974268256819, -0.4910320979328106, 0.11479080280322743, 0.6767675184643193, 0.9802420445539632, 0.909297426825682, 0.49103209793281066, -0.1147908028032273, -0.6767675184643192, -0.9802420445539632, -0.909297426825682, -0.4910320979328108, 0.11479080280322719, 0.6767675184643192, 0.9802420445539631, 0.9092974268256822, 0.491032097932814, -0.11479080280322707, -0.676767518464319, -0.9802420445539625, -0.9092974268256822, -0.491032097932811, 0.11479080280323047, 0.6767675184643189, 0.9802420445539625, 0.9092974268256822, 0.4910320979328142, -0.11479080280322682, -0.6767675184643215, -0.9802420445539631, -0.9092974268256808, -0.4910320979328112, 0.11479080280322317, 0.6767675184643187, 0.9802420445539624, 0.9092974268256823, 0.4910320979328082, -0.11479080280322658, -0.6767675184643213, -0.980242044553963, -0.9092974268256838, -0.49103209793281144, 0.11479080280322293, 0.6767675184643186, 0.9802420445539637, 0.9092974268256824, 0.49103209793280844, -0.11479080280322633, -0.6767675184643158, -0.980242044553963, -0.9092974268256839, -0.49103209793281166, 0.11479080280322974, 0.6767675184643184, 0.9802420445539637, 0.9092974268256825, 0.4910320979328149, -0.11479080280321903, -0.6767675184643209, -0.9802420445539629, -0.909297426825681, -0.4910320979328119, 0.11479080280322244, 0.6767675184643129, 0.9802420445539636, 0.9092974268256826, 0.49103209793281505, -0.11479080280322584, -0.6767675184643155, -0.9802420445539644, -0.9092974268256812, -0.49103209793281205, 0.1147908028032222, 0.6767675184643127, 0.980242044553965] +>>>import pylab +>>>pylab.plot(sps2, label = 'Синусоидальный сигнал', color = 'red') +[] +>>>pylab.show() +``` +![[figure0.png]] + +### 4. Цикл «пока истинно условие» – управляющая инструкция while. +Общее правило написания: +while <Условие>: +<отступы><Блок инструкций 1 – тело цикла> +else: +<отступы><Блок инструкций 2 – если в цикле не сработал break>] + +#### 4.1. Цикл со счетчиком. +``` +>>>rashod = 300 +>>>while rashod: + print("Расход=", rashod) + rashod -= 50 +Расход= 300 +Расход= 250 +Расход= 200 +Расход= 150 +Расход= 100 +Расход= 50 +``` +Цикл завершился из-за того, что расход стал равен 0, а 0 в свою очередь воспринимается как False. + + +#### 4.2. Пример с символьной строкой. +``` +>>>import math +>>>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(sps2, label = 'Сигнал на выходе инерционного звена', color = 'red') +[] +>>>pylab.show() +``` +![[Figure_1.png]] + +#### 4.3. Определение, является ли число простым (делится только на самого себя или 1). +``` +>>>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 +``` +Программа работает так: переменная kandidat отвечает за потенциальный делитель заданного +числа. Изначально мы задаем половину от заданного числа, потому что у числа не может быть +делителя большего, чем половина от него. Далее мы последовательно уменьшаем потенциальный +множитель, каждый раз проверяя, получилось ли поделить без остатка. Если получилось, то +число непростое, и цикл можно прекращать досрочно. Если цикл отработал до конца, не +прервавшись, то число простое. + +Дополним программу так, чтобы выявить все простые числа в диапазоне от 250 до 300. +``` +>>>for i in range(250, 301): + chislo = i + kandidat = chislo // 2 + while kandidat > 1: + if chislo % kandidat == 0: + print(chislo, 'имеет множитель', kandidat) + break + kandidat -= 1 + else: + print(chislo, 'является простым!') +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 +``` +Здесь просто добавляется for для перебора значений. + +#### 4.4. Инструкция continue +Инструкция continue, которая не вызывает завершения цикла, но завершает его текущий виток и обеспечивает переход к следующему витку. +``` +>>>x = [rn.randint(-25, 40) for i in range (20)] +>>>x +[35, 21, -14, 21, -15, 1, -9, -7, -15, 2, 32, 11, 38, 32, -13, -21, 31, -10, -20, 15] +>>>for y in x: + if y < 0: continue + print(y, ">0") +else: print("stop") +35 >0 +21 >0 +21 >0 +1 >0 +2 >0 +32 >0 +11 >0 +38 >0 +32 >0 +31 >0 +15 >0 +stop +``` + +### 5. Завершение сеанса в среде IDLE \ No newline at end of file diff --git a/TEMA5/task.md b/TEMA5/task.md new file mode 100644 index 0000000..5607553 --- /dev/null +++ b/TEMA5/task.md @@ -0,0 +1,125 @@ +# Общее контрольное задание по теме 5 +Подольский Никита, А-01-23 +## Задание +- Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите. +- Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом). +- Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям. + +## Решение +``` python +>>> alphabet = 'abcdefghijklmnopqrstuvwxyz' +>>> text = "We visited the Louvre Museum in Paris last summer" +>>> for now in range(len(text)): + low = text.lower() + letter = low[now] + if not letter in alphabet: + continue + else: + print("Буква ", letter, " имеет ", alphabet.index(letter) + 1, + "порядковый номер в алфавите") + +Буква w имеет 23 порядковый номер в алфавите +Буква e имеет 5 порядковый номер в алфавите +Буква v имеет 22 порядковый номер в алфавите +Буква i имеет 9 порядковый номер в алфавите +Буква s имеет 19 порядковый номер в алфавите +Буква i имеет 9 порядковый номер в алфавите +Буква t имеет 20 порядковый номер в алфавите +Буква e имеет 5 порядковый номер в алфавите +Буква d имеет 4 порядковый номер в алфавите +Буква t имеет 20 порядковый номер в алфавите +Буква h имеет 8 порядковый номер в алфавите +Буква e имеет 5 порядковый номер в алфавите +Буква l имеет 12 порядковый номер в алфавите +Буква o имеет 15 п рядковый номер в алфавите +Буква u имеет 21 порядковый номер в алфавите +Буква v имеет 22 порядковый номер в алфавите +Буква r имеет 18 порядковый номер в алфавите +Буква e имеет 5 порядковый номер в алфавите +Буква m имеет 13 порядковый номер в алфавите +Буква u имеет 21 порядковый номер в алфавите +Буква s имеет 19 порядковый номер в алфавите +Буква e имеет 5 порядковый номер в алфавите +Буква u имеет 21 порядковый номер в алфавите +Буква m имеет 13 порядковый номер в алфавите +Буква i имеет 9 порядковый номер в алфавите +Буква n имеет 14 порядковый номер в алфавите +Буква p имеет 16 порядковый номер в алфавите +Буква a имеет 1 порядковый номер в алфавите +Буква r имеет 18 порядковый номер в алфавите +Буква i имеет 9 порядковый номер в алфавите +Буква s имеет 19 порядковый номер в алфавите +Буква l имеет 12 порядковый номер в алфавите +Буква a имеет 1 порядковый номер в алфавите +Буква s имеет 19 порядковый номер в алфавите +Буква t имеет 20 порядковый номер в алфавите +Буква s имеет 19 порядковый номер в алфавите +Буква u имеет 21 порядковый номер в алфавите +Буква m имеет 13 порядковый номер в алфавите +Буква m имеет 13 порядковый номер в алфавите +Буква e имеет 5 порядковый номер в алфавите +Буква r имеет 18 порядковый номер в алфавите + + +>>> text = """Создайте список со словами из задания данного пункта Для этого +списка определите есть ли в нем некоторое заданное значение и выведите соответствующее +сообщение либо о нахождении элемента либо о его отсутствии в списке проверить как с +имеющимся так и с отсутствующим словом""" +>>> lst = text.split(" ") +>>> lst +['Создайте', 'список', 'со', 'словами', 'из', 'задания', 'данного', 'пункта', 'Для', 'этого', + 'списка', 'определите', 'есть', 'ли', 'в', 'нем', 'некоторое', 'заданное', 'значение', 'и', + 'выведите', 'соответствующее', 'сообщение', 'либо', 'о', 'нахождении', 'элемента', 'либо', + 'о', 'его', 'отсутствии', 'в', 'списке', 'проверить', 'как', 'с', 'имеющимся', 'так', 'и', + 'с', 'отсутствующим', 'словом'] + +>>> target = "список" +>>> for now in lst: + if now == target: + print ("Такое слово есть") + break +else: + print("Такого слова нет") + +Такое слово есть :) + +>>> target = "кот" +>>> for now in lst: + if now == target: + print ("Такое слово есть") + break +else: + print("Такого слова нет") + +Такого слова нет + + +>>> studs = ['Bushmanov', 'Podolskiy', 'Melnikov'] +>>> summer_marks = [4.25, 4.15, 5.00] +>>> studs2 = ['Melnikov', 'Podolskiy','Bushmanov'] +>>> winter_marks = [4.85, 4.35, 4.23] +>>> student = input("Введите фамилию: ") +>>> while student != "q": + if (student in studs) and (student in studs2): + sum_ans = summer_marks[studs.index(student)] + win_ans = winter_marks[studs2.index(student)] + print("Балл летом: ", sum_ans, "\nЗимой: ", win_ans, "\nСредний :", + (sum_ans + win_ans)/2) + else: + print("Такого студента нет :(") + student = input("Введите фамилию (q для выхода):") + +Введите фамилию: Bushmanov +Балл летом: 4.25 +Зимой: 4.23 +Средний : 4.24 +Введите фамилию (q для выхода): Podolskiy +Балл летом: 4.15 +Зимой: 4.35 +Средний : 4.25 +Введите фамилию (q для выхода): Melnikov +Балл летом: 5.00 +Зимой: 4.85 +Средний : 4.925 +Введите фамилию (q для выхода): q +``` \ No newline at end of file