Методичка. Методические указания по ПО АС_очники. Методические указания к проведению занятий по дисциплине " Программное обеспечение автоматизированных систем" Москва 2018
Скачать 0.59 Mb.
|
Тема 5. Блоки инструкций, управляющие инструкцииЦель работы: Изучение способов формирования и использования блоков инструкций и обеспечения разветвления линий потока в алгоритмах. Управляющие инструкции, как и в других языках программирования, используются в Python для разветвления линий потока. Их применение имеет как сходство, так и заметные отличия по сравнению с другими языками программирования. В программах на Python они применяются по следующей общей схеме: <Управляющая инструкция>: <отступы><Блок инструкций> Здесь управляющая инструкция начинается зарезервированными словами, такими как if, while, for… и дополняется логическим выражением, со значением True или False. Блок инструкций – это совокупность инструкций на языке Python, возможно, включающая вложенные управляющие инструкции. Относительно управляющей инструкции блок инструкций сдвигается влево с использованием одинаковых отступов, задаваемых либо некоторым числом пробелов, либо одной или несколькими табуляциями. Величина отступа задаётся в настройках среды (Indentation Width). По умолчанию – это 4 пробела или 1 табуляция. Запустите интерактивную оболочку IDLE. Откройте окно текстового редактора. В первой строке напишите комментарий с текстом: « Тема 5 <ФИО>». Сохраните содержимое окна редактора в своем рабочем каталоге с именем файла протокола. В ходе выполнения дальнейшей работы все корректно выполненные инструкции и их результаты записывайте в этот текстовый файл. Изучите ветвление по условию – управляющая инструкция if. Общее правило написания: if <условие>: <отступы><Блок инструкций, выполняемый, если условие истинно> [elif <условие2>: <отступы><Блок инструкций2, выполняемый, если условие2 истинно> ] [else: < отступы><Блок инструкций3, выполняемый, если условие ложно> ] Условие задается в виде логического выражения, которое может принимать значение True или False. Блок инструкций может располагаться на нескольких строках. Отступы во всех строках блока должны быть одинаковыми по отношению к первому символу управляющей инструкции. Если имеется вложенная управляющая инструкция, то она вводится с таким же отступом, а все строки ее блоков – отступают по отношению к ее первому символу. Признак конца блока – отсутствие отступов в очередной строке или ввод пустой строки. Если в Блоке инструкций только одна инструкция, её можно записывать без отступов сразу за знаком «:». Задайте некоторые числовые значения объектам porog, rashod1, rashod2. Выполните следующую операцию, определите значение dohod: if rashod1>=porog: dohod=12 elif rashod2==porog: dohod=0 else: dohod=-8 Выполните ещё одну операцию, определите значение dohod: if rashod1>=3 and rashod2==4: dohod=rashod1 if rashod2==porog or rashod1 dohod=porog И ещё одна операция с множественным ветвлением линий потока: if porog==3: dohod=1 elif porog==4: dohod=2 elif porog==5: dohod=3 else: dohod=0 Условные инструкции могут записываться также в одну строку в операторе присваивания по следующей схеме: <Объект>=if <условие>: <значение 1> else <значение 2> или ещё: if <условие>: <инструкция1>[;<инструкция2>….] Изучите примеры dohod=2 if porog>=4 else 0 if porog>=5 : rashod1=6; rashod2=0 Цикл по перечислению – управляющая инструкция for. Общее правило написания: for <Объект-переменная цикла> in <объект>: <отступы><Блок инструкций 1 – тело цикла> [else: < отступы ><Блок инструкций 2 – если в цикле не сработал break> ] Здесь <объект> - любой определенный до начала цикла объект из классов строка, список, кортеж, множество, словарь. <Объект-переменная цикла> - объект, в качестве значений которого поочередно будут задаваться элементы объекта, которые могут быть объектами любого типа. <Блок инструкций 1 – тело цикла> - совокупность инструкций, которая может содержать или не содержать инструкцию break, вызывающую досрочное завершение цикла при некоторых условиях. Блок инструкций 1 обычно выполняется многократно по мере того, как объект-переменная цикла принимает значения из сложного объекта. Если в цикле имеется необязательная часть: else и Блок инструкций 2, то он будет выполняться перед завершением цикла только в том случае, если при выполнении цикла не было его прерывания по инструкции break. Если Блоке инструкций 1 или в Блоке инструкций 2 только одна инструкция, то её можно записывать без отступов сразу за двоеточием. Выполните следующие примеры, определите получаемые в них результаты. 3.1. Простой цикл. temperatura=5 for i in range(3,18,3): temperatura+=i Более сложный цикл sps=[2,15,14,8] for k in sps: if len(sps)<=10:sps.append(sps[0]) else:break Отобразите получившийся список sps. Выполните чуть-чуть отличающуюся совокупность операций sps=[2,15,14,8] for k in sps[:]: if len(sps)<=10:sps.append(sps[0]) else:break Вновь отобразите полученный список и объясните его отличие от предыдущего. Пример: создание списка с 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) Внимание: здесь else относится не к if, а к for! Попробуйте несколько раз выполнить эти операции. Объясните, почему вывод значения ss бывает не всегда. Пример с символьной строкой stroka='Это – автоматизированная система' stroka1="" for ss in stroka: stroka1+=" "+ss Запись цикла в строке. Пример: создание списка с синусоидальным сигналом. import math sps2=[math.sin(i*math.pi/5+2) for i in range(100)] Подобно тому, как это делали в предыдущей теме, отобразите сигнал в виде графика. Цикл пока истинно условие – управляющая инструкция while. Общее правило написания: while <Условие>: <отступы><Блок инструкций 1 – тело цикла> [else: <отступы><Блок инструкций 2 – если в цикле не сработал break>] Здесь <Условие> - некоторое логическое выражение. Если на очередном витке цикла оно принимает значение True (или 0), то выполняется Блок инструкций 1. При этом, если в этом блоке присутствует инструкция break и она будет выполнена, то цикл завершается, иначе – переходит к новому витку цикла. В блоке инструкций 1 могут быть изменены значения объектов, входящих в Условие и его значение тоже может измениться, Если же его значением останется True, то вновь выполняется Блок инструкций 1 и т.д. Если в цикле присутствует Блок инструкций 2, то он будет выполнен, если завершение цикла произошло не по инструкции break, а по значению False (или значению =0) Условия. Выполните нижеследующие примеры и определите их результаты. 4.1. Цикл со счетчиком. rashod=300 while rashod: print("Расход=",rashod) rashod-=50 Объясните, как здесь произошло завершение цикла. Пример с символьной строкой import math stroka='Переходной процесс в инерционном звене' i=0 sps2=[] while i r=1-2/(1+math.exp(0.1*i)) sps2.append(r) print('Значение в момент',i,"=",r) i+=1 Представьте в виде графика сигнал на выходе инерционного звена из списка sps2. Определение, является ли число простым (делится только на самого себя или 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, ' является простым!') Дополните программу так, чтобы выявить все простые числа в диапазоне от 250 до 300. Помимо инструкции break в обоих видах циклов могут использоваться инструкции continue, которые не вызывают завершения цикла, но завершают его текущий виток и обеспечивают переход к следующему витку. Сохраните созданный текстовый файл протокола в своем рабочем каталоге. Закончите сеанс работы с IDLE. Общее контрольное задание Реализовать, записать в текстовый файл программы и результаты их выполнения при решении следующих задач: Для заданной символьной строки с англоязычным текстом (его можно заимствовать из помощи) определите порядковый номер каждой буквы в английском алфавите. Создайте список со словами из задания данного пункта. Для этого списка – определите, есть ли в нем некоторое заданное значение, и выведите соответствующее сообщение: либо о нахождении элемента, либо о его отсутствии в списке (проверить как с имеющимся, так и с отсутствующим словом). Создайте список студентов вашей группы (3-4 фамилии) и список их средних баллов в летней сессии – в порядке перечисления студентов в первом списке. Создайте еще 2 аналогичных списка для тех же студентов, но в другом порядке, по зимней сессии. Напишите инструкции, позволяющие по указанной (запрошенной и введенной) фамилии студента вывести его средние баллы по двум сессиям. Индивидуальные контрольные задания по теме Запишите свой e-mail – адрес в виде символьной строки. Напишите инструкции, разделяющие эту строку на две: строка1, содержащая все буквы из состава адреса, и строка 2, содержащая все остальные символы. Напишите инструкции, обеспечивающие формирование на основе заданного списка нового списка, содержащего только целочисленные элементы из первого списка. Напишите инструкцию создания переменной с текущим моментом времени в секундах от начала эпохи. Определите, сколько раз можно рассчитать синус числа 12.3 в течение 10 секунд, начиная от текущего времени. Создайте список с 20 случайными, нормально распределенными (математическое ожидание равно 3400, стандартное отклонение равно 121) числами. Рассчитайте по нему среднее значение и число элементов, значение которых превышает это среднее. По заданному списку со случайными числовыми элементами (любое распределение) рассчитайте число элементов списка, значение которых превышает значение, равное полусумме наименьшего и наибольшего элементов списка. Напишите инструкции, обеспечивающие создание множества с некоторым заданным числом случайных целочисленных значений в диапазоне от 5 до 788. Рассчитайте по нему среднее значение и полусумму наибольшего и наименьшего значений. Создайте символьную строку с номером вашего мобильного телефона, записанного по шаблону (ХХХ)ХХХ-ХХ-ХХ. Напишите инструкции, которые создадут другую символьную строку по шаблону ХХХ-ХХХ-ХХХХ. Обеспечить вывод сообщения на экран: если первые 3 цифры 916 или 902, то «Оператор МТС», иначе: «Неизвестный оператор». Создайте кортеж с 20 случайными числами, равномерно распределенными в диапазоне от 20 до 98. Рассчитайте среднее значение по тем числам из множества, которые находятся в диапазоне значений от 40 до 70. Напишите инструкции создания списка с 20 случайными нормально распределенными (математическое ожидание равно -50, дисперсия равна 64) числами. Из этого списка перепишите в другой список только те элементы, которые не превышают среднего значения. Создайте список со 100 случайными целыми числами в интервале значений от -40 до +100. Рассчитайте сумму значений по тем числам, которые нацело делятся на 3. Создайте символьную строку с текстом: «великий и могучий юноша-вождь с мечом и щитом захватил и объединил эфесское царство». Напишите инструкции, позволяющие определить, каких букв русского алфавита нет в этой строке. Создайте список с 20 комплексными числами, у которых вещественная и мнимая части – случайные, равномерно распределенные числа в диапазоне от 0 до 1. Рассчитайте среднее значение их фазы. Создайте символьную строку с произвольным набором латинских символов и цифр. Напишите инструкции, обеспечивающие создание списка, в котором значениями являются комбинации цифр из символьной строки, находящиеся между идущими подряд латинскими символами. Запросите у пользователя ввод списка с двумя числовыми элементами. Обеспечьте проверку корректности ввода (что введено, действительно, два элемента) и проверку совпадения знаков у введенных чисел. Если проверка дала негативный результат, выдать сообщение и обеспечить повторение ввода. Если все хорошо, отобразить введенный список с заголовком. Запросите у пользователя и введите его фамилию в виде символьной строки. Если фамилия пользователя короче 15 символов, дополните ее справа соответствующим числом пробелов. Если она длиннее 15 символов, укоротите ее до первых 15 символов. Отобразите результат на экране с заголовком «Пользователь: ». Создайте кортеж с 2 элементами, которыми должны быть списки, каждый с 20 элементами - случайными, нормально распределенными числами с математическими ожиданиями, соответственно, -10 и 35 и одинаковыми стандартными отклонениями, равными 10. Рассчитайте по известной из статистики формуле оценку коэффициента корреляции между списками - элементами кортежа. Отобразите его в виде строки вида: «Корр.1-2 =ХХХ». Создайте список с 20 комплексными числами, у которых вещественная и мнимая части – случайные, нормально распределенные числа с математическим ожиданием 15 и стандартным отклонением 8. Рассчитайте среднее значение фаз по элементам множества и отобразите результат с округлением до 2-х знаков после точки в виде строки вида: «Среднее фаз = ХХХ.ХХ». Напишите инструкцию создания объекта-символьной строки, содержащей текст с не менее 20 кириллическими символами (придумайте его сами). Напишите инструкции разборки созданного объекта с созданием списка, элементами которого являются целые числа – порядковые номера соответствующих символов из созданной строки в русском алфавите. Если некоторого символа из строки нет в алфавите, на его месте в список включить число 77. Создайте строку с некоторым текстом на русском языке. Напишите инструкции разбора текста и формирования списка с элементами: номер символа в русском алфавите, если этот символ – согласная буква, тот же номер, взятый со знаком минус, если символ – гласная буква, и число 777, если это – любой другой символ. Создайте кортеж с целыми числами в диапазоне от -24 до 768 через 11. Напишите инструкцию создания списка с 40 случайно выбранными элементами из кортежа. Подсчитайте, сколько раз в этом списке последующий элемент оказался больше предыдущего. Отобразите результат в виде строки вида: «Повышение в списке: ХХХ раз». Создайте список с символьными строками - названиями не менее 5 овощей. Определите число символов в самом длинном названии (найдите его формальным образом). Все остальные названия выровняйте до такой же длины дополнением их справа соответствующим числом пробелов. Создайте кортеж с двумя элементами, каждый из которых является списком с 30 элементами. В первом списке элементы – это случайные, нормально распределенные числа с математическим ожиданием -15 и стандартным отклонением 9. Во втором списке элементы – это равномерно распределенные случайные числа из диапазона значений от -30 до 75. Рассчитайте корреляцию между этими списками, округлите до 3-х знаков после точки и отобразите ее в виде строки вида: «корреляция = Х.ХХХ». Создайте множество с 20 элементами – случайными, нормально распределенными числами с математическим ожиданием -5 и стандартным отклонением 8. Превратите множество в список, рассчитайте по нему среднее значение. Подсчитайте сколько элементов списка превышают это среднее значение и отобразите результат в виде символьной строки вида: «превышение в ХХ случаях». Создайте словарь с 30 элементами, состоящими из ключей – целых чисел от 0 до 29, и значений – случайных, равномерно распределенных чисел в интервале значений от -10 до +7. Рассчитайте сумму неотрицательных значений из словаря и отобразите её в виде строки: «Сумма неотрицательных значений словаря= XXX». Создайте список с 50 элементами – целыми случайными числами из диапазона значений от -1 до +1. Определите по этому списку, сколько раз последующее число было меньше предыдущего, сколько – больше и сколько – равным. Отобразите результат в виде строки: «Больше=ХХ, меньше=ХХ, равно=ХХ». |