Методические указания по выполнению лабораторных работ на алгоритмическом языке  python 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Методические указания по выполнению лабораторных работ на алгоритмическом языке  python



Методические указания по выполнению лабораторных работ на алгоритмическом языке  Python

Рубежный контроль 2

 

Лабораторная работа №10. Списки. 1

Лабораторная работа №11. Функции и рекурсия. 8

Лабораторная работа №12. Двумерные массивы.. 14

Лабораторная работа №13. Циклы и массивы.. 20

Лабораторная работа №14. Множества. 28

Лабораторная работа №15. Работа со строками, файлами. 32

Лабораторная работа №16. Python, PythonXY. Работа с графикой. 36

 

 

Списки

Большинство программ работает не с отдельными переменными, а с набором переменных. Например, программа может обрабатывать информацию об учащихся класса, считывая список учащихся с клавиатуры или из файла, при этом изменение количества учащихся в классе не должно требовать модификации исходного кода программы.

Раньше мы сталкивались с задачей обработки элементов последовательности, например, вычисляя наибольший элемент последовательности. Но при этом мы не сохраняли всю последовательность в памяти компьютера. Однако, во многих задачах нужно именно сохранять всю последовательность, например, если бы нам требовалось вывести все элементы последовательности в возрастающем порядке (“отсортировать последовательность”).

Для хранения таких данных можно использовать структуру данных, называемую в Питоне список (в большинстве же языков программирования используется другой термин “массив”). Список представляет собой последовательность элементов, пронумерованных от 0, как символы в строке. Список можно задать перечислением элементов списка в квадратных скобках, например, список можно задать так:

В списке Primes – 6 элементов, а именно: Primes[0] == 2, Primes[1] == 3, Primes[2] == 5, Primes[3] == 7, Primes[4] == 11, Primes[5] == 13. Список Rainbow состоит из 7 элементов, каждый из которых является строкой.

Также как и символы в строке, элементы списка можно индексировать отрицательными числами с конца, например, Primes[-1] == 13, Primes[-6] == 2.

Длину списка, то есть количество элементов в нем, можно узнать при помощи функции len, например, len(Primes) == 6.

В отличие от строк, элементы списка можно изменять, присваивая им новые значения.

Рассмотрим несколько способов создания и считывания списков. Прежде всего, можно создать пустой список (не содержащий элементов, длины 0), а в конец списка можно добавлять элементы при помощи метода append. Например, пусть программа получает на вход количество элементов в списке n, а потом n элементов списка по одному в отдельной строке. Вот пример входных данных в таком формате:

В этом случае организовать считывание списка можно так:

В этом примере создается пустой список, далее считывается количество элементов в списке, затем по одному считываются элементы списка и добавляются в его конец. То же самое можно записать, сэкономив переменную n:

Для списков целиком определены следующие операции: конкатенация списков (сложение списков, т. е. приписывание к одному списку другого) и повторение списков (умножение списка на число). Например:

В результате список c будет равен [1, 2, 3, 4, 5], а список d будет равен [4, 5, 4, 5, 4, 5]. Это позволяет по-другому организовать процесс считывания списков: сначала считать размер списка и создать список из нужного числа элементов, затем организовать цикл по переменной i начиная с числа 0 и внутри цикла считывается i-й элемент списка:

Вывести элементы списка a можно одной инструкцией print(a), при этом будут выведены квадратные скобки вокруг элементов списка и запятые между элементами списка. Такой вывод неудобен, чаще требуется просто вывести все элементы списка в одну строку или по одному элементу в строке. Приведем два примера, также отличающиеся организацией цикла:

Здесь в цикле меняется индекс элемента i, затем выводится элемент списка с индексом i.

В этом примере элементы списка выводятся в одну строку, разделенные пробелом, при этом в цикле меняется не индекс элемента списка, а само значение переменной (например, в цикле for elem in ['red', 'green', 'blue'] переменная elem будет последовательно принимать значения 'red', 'green', 'blue'.

Обратите особое внимание на последний пример! Очень важная часть идеологии Питона — это цикл for, который предоставляет удобный способ перебрать все элементы некоторой последовательности. В этом отличие Питона от Паскаля, где вам обязательно надо перебирать именно индексы элементов, а не сами элементы.

Последовательностями в Питоне являются строки, списки, значения функции range() (это не списки), и ещё кое-какие другие объекты.

Приведем пример, демонстрирующий использование цикла for в ситуации, когда из строки надо выбрать все цифры и сложить их в массив как числа.

Методы split и join

Элементы списка могут вводиться по одному в строке, в этом случае строку целиком можно считать функцией input(). После этого можно использовать метод строки split(), возвращающий список строк, которые получатся, если исходную строку разрезать на части по пробелам. Пример:

Если при запуске этой программы ввести строку 1 2 3, то список a будет равен ['1', '2', '3']. Обратите внимание, что список будет состоять из строк, а не из чисел. Если хочется получить список именно из чисел, то можно затем элементы списка по одному преобразовать в числа:

Используя специальную магию Питона – генераторы – то же самое можно сделать в одну строку:

Объяснение того, как работает этот код, будет дано в следующем разделе. Если нужно считать список действительных чисел, то нужно заменить тип int на тип float.

У метода split() есть необязательный параметр, который определяет, какая строка будет использоваться в качестве разделителя между элементами списка. Например, вызов метода split('.') вернет список, полученный разрезанием исходной строки по символам '.':

В Питоне можно вывести список строк при помощи однострочной команды. Для этого используется метод строки join. У этого метода один параметр: список строк. В результате возвращается строка, полученная соединением элементов переданного списка в одну строку, при этом между элементами списка вставляется разделитель, равный той строке, к которой применяется метод. Мы знаем, что вы не поняли предыдущее предложение с первого раза. Поэтому смотрите примеры:

Если же список состоит из чисел, то придется использовать еще тёмную магию генераторов. Вывести элементы списка чисел, разделяя их пробелами, можно так:

Впрочем, если вы не любитель тёмной магии, то вы можете достичь того же эффекта, используя цикл for.

Генераторы списков

Для создания списка, заполненного одинаковыми элементами, можно использовать оператор повторения списка, например:

Для создания списков, заполненных по более сложным формулам можно использовать генераторы: выражения, позволяющие заполнить список некоторой формулой. Общий вид генератора следующий:

где переменная — идентификатор некоторой переменной, последовательность — последовательность значений, который принимает данная переменная (это может быть список, строка или объект, полученный при помощи функции range), выражение — некоторое выражение, как правило, зависящее от использованной в генераторе переменной, которым будут заполнены элементы списка.

Вот несколько примеров использования генераторов.

Создать список, состоящий из n нулей можно и при помощи генератора:

Создать список, заполненный квадратами целых чисел можно так:

Если нужно заполнить список квадратами чисел от 1 до n, то можно изменить параметры функции range на range(1, n + 1):

Вот так можно получить список, заполненный случайными числами от 1 до 9 (используя функцию randrange из модуля random):

А в этом примере список будет состоять из строк, считанных со стандартного ввода: сначала нужно ввести число элементов списка (это значение будет использовано в качестве аргумента функции range), потом – заданное количество строк:

Срезы

Со списками, так же как и со строками, можно делать срезы. А именно:

A[i:j] срез из j-i элементов A[i], A[i+1],..., A[j-1].

A[i:j:-1] срез из i-j элементов A[i], A[i-1],..., A[j+1] (то есть меняется порядок элементов).

A[i:j:k] срез с шагом k: A[i], A[i+k], A[i+2*k],.... Если значение k<0, то элементы идут в противоположном порядке.

Каждое из чисел i или j может отсутствовать, что означает “начало строки” или “конец строки”

Списки, в отличии от строк, являются изменяемыми объектами: можно отдельному элементу списка присвоить новое значение. Но можно менять и целиком срезы. Например:

Получится список, у которого вместо двух элементов среза A[2:4] вставлен новый список уже из трех элементов. Теперь список стал равен [1, 2, 7, 8, 9, 5].

Получится список [40, 2, 30, 4, 20, 6, 10]. Здесь A[::-2] — это список из элементов A[-1], A[-3], A[-5], A[-7], которым присваиваются значения 10, 20, 30, 40 соответственно.

Если не непрерывному срезу (то есть срезу с шагом k, отличному от 1), присвоить новое значение, то количество элементов в старом и новом срезе обязательно должно совпадать, в противном случае произойдет ошибка ValueError.

Обратите внимание, A[i] — это элемент списка, а не срез!

Операции со списками

Со списками можно легко делать много разных операций.

x in A Проверить, содержится ли элемент в списке. Возвращает True или False
x not in A То же самое, что not(x in A)
min(A) Наименьший элемент списка
max(A) Наибольший элемент списка
A.index(x) Индекс первого вхождения элемента x в список, при его отсутствии генерирует исключение ValueError
A.count(x) Количество вхождений элемента x в список

 

Функции

Напомним, что в математике факториал числа n определяется как n! = 1 ⋅ 2 ⋅... ⋅ n. Например, 5! = 1 ⋅ 2 ⋅ 3 ⋅ 4 ⋅ 5 = 120. Ясно, что факториал можно легко посчитать, воспользовавшись циклом for. Представим, что нам нужно в нашей программе вычислять факториал разных чисел несколько раз (или в разных местах кода). Конечно, можно написать вычисление факториала один раз, а затем используя Copy-Paste вставить его везде, где это будет нужно.   

Однако, если мы ошибёмся один раз в начальном коде, то потом эта ошибка попадёт в код во все места, куда мы скопировали вычисление факториала. Да и вообще, код занимает больше места, чем мог бы. Чтобы избежать повторного написания одной и той же логики, в языках программирования существуют функции.

Функции — это такие участки кода, которые изолированы от остальный программы и выполняются только тогда, когда вызываются. Вы уже встречались с функциями sqrt(), len() и print(). Они все обладают общим свойством: они могут принимать параметры (ноль, один или несколько), и они могут возвращать значение (хотя могут и не возвращать). Например, функция sqrt() принимает один параметр и возвращает значение (корень числа). Функция print() принимает переменное число параметров и ничего не возвращает.

Покажем, как написать функцию factorial(), которая принимает один параметр — число, и возвращает значение – факториал этого числа.

Дадим несколько объяснений. Во-первых, код функции должен размещаться в начале программы, вернее, до того места, где мы захотим воспользоваться функцией factorial(). Первая строчка этого примера является описанием нашей функции. factorial — идентификатор, то есть имя нашей функции. После идентификатора в круглых скобках идет список параметров, которые получает наша функция. Список состоит из перечисленных через запятую идентификаторов параметров. В нашем случае список состоит из одной величины n. В конце строки ставится двоеточие.

Далее идет тело функции, оформленное в виде блока, то есть с отступом. Внутри функции вычисляется значение факториала числа n и оно сохраняется в переменной res. Функция завершается инструкцией return res, которая завершает работу функции и возвращает значение переменной res.

Инструкция return может встречаться в произвольном месте функции, ее исполнение завершает работу функции и возвращает указанное значение в место вызова. Если функция не возвращает значения, то инструкция return используется без возвращаемого значения. В функциях, которым не нужно возвращать значения, инструкция return может отсутствовать.

Приведём ещё один пример. Напишем функцию max(), которая принимает два числа и возвращает максимальное из них (на самом деле, такая функция уже встроена в Питон).

Теперь можно написать функцию max3(), которая принимает три числа и возвращает максимальное их них.

Встроенная функция max() в Питоне может принимать переменное число аргументов и возвращать максимум из них. Приведём пример того, как такая функция может быть написана.

Все переданные в эту функцию параметры соберутся в один кортеж с именем a, на что указывает звёздочка в строке объявления функции.

Рекурсия

Как мы видели выше, функция может вызывать другую функцию. Но функция также может вызывать и саму себя! Рассмотрим это на примере функции вычисления факториала. Хорошо известно, что 0!=1, 1!=1. А как вычислить величину n! для большого n? Если бы мы могли вычислить величину (n-1)!, то тогда мы легко вычислим n!, поскольку n!=n⋅(n-1)!. Но как вычислить (n-1)!? Если бы мы вычислили (n-2)!, то мы сможем вычисли и (n-1)!=(n-1)⋅(n-2)!. А как вычислить (n-2)!? Если бы... В конце концов, мы дойдем до величины 0!, которая равна 1. Таким образом, для вычисления факториала мы можем использовать значение факториала для меньшего числа. Это можно сделать и в программе на Питоне:

Подобный прием (вызов функцией самой себя) называется рекурсией, а сама функция называется рекурсивной.

Рекурсивные функции являются мощным механизмом в программировании. К сожалению, они не всегда эффективны. Также часто использование рекурсии приводит к ошибкам. Наиболее распространенная из таких ошибок – бесконечная рекурсия, когда цепочка вызовов функций никогда не завершается и продолжается, пока не кончится свободная память в компьютере. Пример бесконечной рекурсии приведен в эпиграфе к этому разделу. Две наиболее распространенные причины для бесконечной рекурсии:

1. Неправильное оформление выхода из рекурсии. Например, если мы в программе вычисления факториала забудем поставить проверку if n == 0, то factorial(0) вызовет factorial(-1), тот вызовет factorial(-2) и т. д.

2. Рекурсивный вызов с неправильными параметрами. Например, если функция factorial(n) будет вызывать factorial(n), то также получится бесконечная цепочка.

Поэтому при разработке рекурсивной функции необходимо прежде всего оформлять условия завершения рекурсии и думать, почему рекурсия когда-либо завершит работу.

 

Создание вложенных списков

Пусть даны два числа: количество строк n и количество столбцов m. Необходимо создать список размером n×m, заполненный нулями.

Очевидное решение оказывается неверным:

В этом легко убедиться, если присвоить элементу a[0][0] значение 5, а потом вывести значение другого элемента a[1][0] — оно тоже будет равно 5. Дело в том, что [0] * m возвращает ccылку на список из m нулей. Но последующее повторение этого элемента создает список из n элементов, которые являются ссылкой на один и тот же список (точно так же, как выполнение операции b = a для списков не создает новый список), поэтому все строки результирующего списка на самом деле являются одной и той же строкой.

В визуализаторе обратите внимание на номер id у списков. Если у двух списков id совпадает, то это на самом деле один и тот же список в памяти.

Таким образом, двумерный список нельзя создавать при помощи операции повторения одной строки. Что же делать?

Первый способ: сначала создадим список из n элементов (для начала просто из n нулей). Затем сделаем каждый элемент списка ссылкой на другой одномерный список из m элементов:

Другой (но похожий) способ: создать пустой список, потом n раз добавить в него новый элемент, являющийся списком-строкой:

Но еще проще воспользоваться генератором: создать список из n элементов, каждый из которых будет списком, состоящих из m нулей:

В этом случае каждый элемент создается независимо от остальных (заново конструируется список [0] * m для заполнения очередного элемента списка), а не копируются ссылки на один и тот же список.

Ввод двумерного массива

Пусть программа получает на вход двумерный массив в виде n строк, каждая из которых содержит m чисел, разделенных пробелами. Как их считать? Например, так:

Или, без использования сложных вложенных вызовов функций:

Можно сделать то же самое и при помощи генератора:

Пример обработки двумерного массива

Пусть дан квадратный массив из n строк и n столбцов. Необходимо элементам, находящимся на главной диагонали, проходящей из левого верхнего угла в правый нижний (то есть тем элементам a[i][j], для которых i==j) присвоить значение 1, элементам, находящимся выше главной диагонали – значение 0, элементам, находящимся ниже главной диагонали – значение 2. То есть необходимо получить такой массив (пример для n==4):

Рассмотрим несколько способов решения этой задачи. Элементы, которые лежат выше главной диагонали – это элементы a[i][j], для которых i<j, а для элементов ниже главной диагонали i>j. Таким образом, мы можем сравнивать значения i и j и по ним определять значение A[i][j]. Получаем следующий алгоритм:

Данный алгоритм плох, поскольку выполняет одну или две инструкции if для обработки каждого элемента. Если мы усложним алгоритм, то мы сможем обойтись вообще без условных инструкций.

Сначала заполним главную диагональ, для чего нам понадобится один цикл:

Затем заполним значением 0 все элементы выше главной диагонали, для чего нам понадобится в каждой из строк с номером i присвоить значение элементам a[i][j] для j=i+1,..., n-1. Здесь нам понадобятся вложенные циклы:

Аналогично присваиваем значение 2 элементам a[i][j] для j=0,..., i-1:

Можно также внешние циклы объединить в один и получить еще одно, более компактное решение:

А вот такое решение использует операцию повторения списков для построения очередной строки списка. i-я строка списка состоит из i чисел 2, затем идет одно число 1, затем идет n-i-1 число 0:

А можно заменить цикл на генератор:

Список контрольных вопросов

 

1 Как можно осуществить разбиение в Python двумерных массивов на одномерные?

 

2 Каким образом можно «склеить» массивы?

3 Какие операторы осуществляют нарезку массивов?

 

Множества

Множество в языке Питон — это структура данных, эквивалентная множествам в математике. Множество может состоять из различных элементов, порядок элементов в множестве неопределен. В множество можно добавлять и удалять элементы, можно перебирать элементы множества, можно выполнять операции над множествами (объединение, пересечение, разность). Можно проверять принадлежность элемента множеству.

В отличие от массивов, где элементы хранятся в виде последовательного списка, в множествах порядок хранения элементов неопределен (более того, элементы множества хранятся не подряд, как в списке, а при помощи хитрых алгоритмов). Это позволяет выполнять операции типа “проверить принадлежность элемента множеству” быстрее, чем просто перебирая все элементы множества.

Элементами множества может быть любой неизменяемый тип данных: числа, строки, кортежи. Изменяемые типы данных не могут быть элементами множества, в частности, нельзя сделать элементом множества список (но можно сделать кортеж) или другое множество. Требование неизменяемости элементов множества накладывается особенностями представления множества в памяти компьютера.

Задание множеств

Множество задается перечислением всех его элементов в фигурных скобках. Исключением явлеется пустое множество, которое можно создать при помощи функции set(). Если функции set передать в качестве параметра список, строку или кортеж, то она вернёт множество, составленное из элементов списка, строки, кортежа. Например:

выведет {'e', 'q', 'r', 't', 'w', 'y'}.

Каждый элемент может входить в множество только один раз, порядок задания элементов неважен. Например, программа:

выведет True, так как A и B — равные множества.

Каждый элемент может входить в множество только один раз. set('Hello') вернет множество из четырех элементов: {'H', 'e', 'l', 'o'}.

Операции с множествами

С множествами в питоне можно выполнять обычные для математики операции над множествами.

A | B A.union(B) Возвращает множество, являющееся объединением множеств A и B.
A |= B A.update(B) Добавляет в множество A все элементы из множества B.
A & B A.intersection(B) Возвращает множество, являющееся пересечением множеств A и B.
A &= B A.intersection_update(B) Оставляет в множестве A только те элементы, которые есть в множестве B.         
A - B A.difference(B) Возвращает разность множеств A и B (элементы, входящие в A, но не входящие в B).
A -= B A.difference_update(B) Удаляет из множества A все элементы, входящие в B.
A ^ B A.symmetric_difference(B) Возвращает симметрическую разность множеств A и B (элементы, входящие в A или в B, но не в оба из них одновременно).
A ^= B A.symmetric_difference_update(B) Записывает в A симметрическую разность множеств A и B.
A <= B A.issubset(B) Возвращает true, если A является подмножеством B.
A >= B A.issuperset(B) Возвращает true, если B является подмножеством A.
A < B Эквивалентно A <= B and A!= B
A > B Эквивалентно A >= B and A!= B

                                                                                         

 

 

Задание

 

В Python решить три задачи своего варианта.

Вариант 1.

 

1) Вводится строка, найти количество повторений буквы «u».

2) Дана строка, преобразовать последовательность, заменив в ней все

минусы плюсами.

 

3) Дан текст в файле. В начале каждой строки дописать ее номер и количество символов в строке.

 

Вариант 2.

 

1) Дан файл, компоненты которого являются целыми числами. Найти сумму компонент файла.

 

2) Определить процентное и количественное содержание заглавных букв в строке файла.

 

3) Дан файл, компоненты которого являются целыми числами. Записать во второй файл все четные числа из первоначального файла в обратном порядке.

 

Вариант 3.

 

1) Дан файл, компоненты которого - действительные числа. Найти наибольшее значение из компонент.

 

2) Найти длину самого короткого слова в строке.

 

3) В файле в начале каждой строки дозаписать количество слов в соответствующей строке.

 

Вариант 4.

1) В файле найти наименьшее число.

 

2) Дана последовательность символов в файле. Преобразовать файл, заменив все вопросительные знаки нулями.

 

3) Дан файл, компоненты которого являются целыми числами. Записать во второй файл числа, являющиеся точными квадратами четных чисел.

Вариант 5.

 

1) Дан файл, компоненты которого являются целыми числами. Записать во второй файл все четные числа, делящиеся на 5.

 

2) Преобразовать строку, заменив в ней все символы, следующие за минусами числами «-7».

 

3) Дана строка, символы s1, …, sn. Известно, что среди символов есть, по крайней мере, одна точка. Найти первый номер точки в данной последовательности.

Вариант 6.

 

1) Найти все номера символов в последовательности в строке, состоящих из точек.

 

2) Даны в строке символы s1, …, sn. Определить количество двойных пробелов.

 

3) Дан файл, компоненты которого являются действительными числами. Найти разность первой и последней компонент файла.

 

Вариант 7.

 

1) Заменить в файле самое длинное слово плюсами.

 

2) Дан файл, компоненты которого являются целыми числами. Найти количество четных и нечетных чисел среди компонент.

 

3) Дан файл f, компоненты которого являются целыми числами. Получить файл g, образованный из файла f исключением повторных вхождений одной и той же последовательности букв.

 

Вариант 8.

1) Даны символы s1, …, sn. Выяснить, имеются ли в последовательности все буквы, входящие в слово «пора».

 

2) Дан файл, компоненты которого являются целыми числами. Найти количество утроенных нечетных чисел среди компонент.

 

3) Дан символьный файл. Переписать его содержимое в другой файл, предварительно удалив из него все символы -и /.

 

Вариант 9.

1) Заменить все круглые скобки квадратными в файле.

 

2) Дана строка, выяснить имеется ли такое, что сначала идет запятая, а затем - точка.

 

3) Дан файл, компоненты которого являются действительными числами. Найти среднее арифметическое наибольшего и наименьшего из значений компонент.

Вариант 10.

1) Дана строка, получить все номера элементов, где встречается символ

«?».

 

2) Дан файл, компоненты которого являются целыми числами. Найти количество квадратов нечетных чисел среди компонент.

 

3) Даны натуральное число n, символы строки s1, …, sn, среди которых есть несколько /. Определить, сколько раз в последовательности встречается /

 

и получить вторую последовательность, образованную из элементов, стоящих после второго /.

 

Вариант 11.

 

1) Дан символьный файл f. Переписать его содержимое в файл g, заменив знаки * / - + на цифру 1.

 

2) Дан файл. Удалить все русские буквы.

3) Даны символы в строке s1, …, sn. Определить количество пробелов.

Вариант 12.

1) Заменить в самом длинном слове строки букву «k» на «j», «v» на «z».

2) Дана строка, выяснить есть ли среди символов запятая и сколько раз она встречается.

 

3) Дан символьный файл. Переписать его содержимое в другой файл, предварительно удалив из него все символы *и +.

 

Вариант 13.

 

1) Дан файл, компоненты которого являются целыми числами. Записать во второй файл все нечетные числа из первоначального файла.

 

2) Даны натуральное число n, символы s1, …, sn. Определить число вхождений в последовательность группы букв fd.

 

3) Даны 2 файла. Записать в третий файл сначала содержимое первого файла, затем - второго с конца на начало.

 

Вариант 14.

1) Дана строка. Удалить все знаки препинания и числа.

 

2) Заменить в файле каждую группу букв stu на student.

 

3) Дан файл, компоненты которого являются целыми числами. Записать во второй файл все четные числа, а в третий все нечетные из первого файла. Порядок следования чисел сохранить.

 

Вариант 15.

1) Дана строка, выяснить, есть ли в ней подряд 4 идущих знака «–».

 

2) Даны 2 символьных файла. С помощью третьего файла переписать первый файл во второй, а второй в первый.

 

3) Заменить все между квадратными скобками нулями.

Вариант 16.

 

1) Дан символьный файл f. Получить файл g, образованный из файла f заменой прописных букв на строчные.

 

2) В файле просчитать сумму всех чисел.

 

3) Определить количество букв и знаков препинания в строке последовательности.

 

Вариант 17.

 

1) Дан файл, компоненты которого являются целыми числами. Записать во второй файл числа, являющиеся точными кубами нечетных чисел в обратном порядке следования.

 

2) Найти четвертое слово в файле и заменить его вторую букву на «k».

 

3) Определить число вхождений в строке группы букв «slv».

Вариант 18.

 

1) Дан файл. Переписать его, оставив только символы между двумя знаками «-». Символы «-» не должны быть исключены.

 

2) Дан файл, компоненты которого являются целыми числами. Найти удвоенные нечетные числа среди компонент.

 

3) Найти в строке самое короткое слово.

Вариант 19.

 

1) Дана строка, выяснить, имеются ли среди последовательных пар соседствующие «мы» и «вы».

 

2) Заменить в файле несколько подряд идущих пробелов одним.

3) Отсортировать числа в файле по убыванию.

 

Вариант 20.

1) Вводится строка, записывается в файл. Нужно преобразовать,

добавив «k» после каждой буквы «v».

2) В введенной строке отсортировать слова по убыванию их длины.

 

3) Дан текст в файле из 4 строк. Если в строке нет символа «*», то оставить эту строку без изменения, иначе каждую из строчных латинских букв заменить на цифру.

Вариант 21.

 

1) Из введенной пользователем строки удалить все числа, оставшееся записать в файл.

 

2) Даны символы в строке. Выяснить, имеются ли в все буквы, входящие в слово «мир».

3) Даны натуральное число n, символы s1, …, sn. Преобразовать последовательность, удалив каждый символ «–» и повторив каждый символ, отличный от «-».

 

Список контрольных вопросов

 

1 Какие операции и операторы используются при работе с файлами?

2 Необходимо ли использовать процедуру закрытия файла?

3 Какие библиотеки используются для работы с файлами?

 Лабораторная работа №16. Python, PythonXY. Работа с графикой

 

 

Цель работы: отработка навыков работы с графикой в приложениях.

 

Задание

 

В Python и PythonXY решить три задачи по вариантам.

Вариант 1.

1) Построить график функции y=2+(9-x2)/(6-x).

 

2) Нарисовать круговую диаграмму по данным продаж iPhone за год.

 

3) Нарисовать смайлик.

Вариант 2.

1) Построить график функции y=(sinx)/(x+2).

2) Нарисовать y=x3-7.

3) Нарисовать флаг России.

Вариант 3.

 

1) Построить график функции y=5/x.

2) Построить две концентрические окружности с центром в точке (4,8).

3) Нарисовать дом.

Вариант 4.

1) Построить график функции y=x/(2x2+3x-1).

 

2) Нарисовать шахматную доску 4∙4.

3) Нарисовать бабочку.

 

Вариант 5.

1) Построить график функции y=2/(x-5).

2) Построить правильный 5-угольник и закрасить его.

3) Нарисовать ананас.

Вариант 6.

1) Построить график функции y=(4x-2)/(8x3-3x).

2) Построить квадрат и закрасить его красным цветом. На каждой стороне квадрата найти середину, соединить все середины сторон квадрата. Полученное закрасить зеленым цветом.

 

3) Нарисовать яблоко.

Вариант 7.

1) Построить график функции y=(5-x) ∙ (6+2x)/(x-1)2.

2) Построить круг, закрасить. Вписать в него правильный треугольник. Закрасить.

 

3) Нарисовать забор.

Вариант 8.

1) Построить график функции y=x/(4x2+2x-1).

 

2) Построить круг, разделить его на 6 секторов, закрасить разными

цветами.

 

3) Нарисовать рыбу.

Вариант 9.

 

1) Построить график функции y=(2-x)/(3+x). Построить круг. Закрасить его синим цветом. Вписать в него квадрат желтого цвета.

 

2) Нарисовать паровоз.

Вариант 10.

1) Построить график функции y=(2x+1)/х.

 

2) Построить на экране множество точек, координаты которых удовлетворяют следующему неравенству x2+y2≤81.

 

3) Нарисовать корабль.

Вариант 11.

1) Построить график функции y=(x+4)/(x-1).

2) Нарисовать любой предмет ванны и его зеркальное отражение.

3) Нарисовать пианино.

Вариант 12.

1) Построить график функции y=2x2+3x.

2) Построить квадрат со стороной а, у которого левая нижняя координата (-3,-2).

3) Нарисовать собаку.

Вариант 13.

1) Построить график функции y=cos(1-x)/2.

2) Построить треугольник со сторонами а, а+1, а+2.

 

3) Нарисовать птицу.

Вариант 14.

1) Построить график функции y=3x2-12.

2) Нарисовать два разных дерева.

3) Нарисовать кошку.

Вариант 15.

 

1) Построить график функции y=5/x + 4.

 

2) Построить на экране множество точек, координаты которых удовлетворяют следующему неравенству x2+y2≤2(x+y).

3) Нарисовать летучую мышь.

Вариант 16.

1) Построить график функции y=-x2+25

2) Нарисовать предмет кухни и его зеркальное отражение.

 

3) Нарисовать машину.

Вариант 17.

1) Построить график функции y=8x2-x+2.

2) Построить круг, закрасить. Вписать в него 2 правильных треугольника. Закрасить разными цветами.

3) Нарисовать автобус.

 

Вариант 18.

1) Построить график функции y=(8-2cosx)/(3-x).

 

2) Построить круг, закрасить. Вписать в круг правильный семиугольник, закрасить. Соединить середины сторон семиугольника, полученную фигуру закрасить.

 

3) Нарисовать ежа.

 

Вариант 19.

1) Построить график функции y=x2-x3.

2) Построить два разных треугольника, соединить их точки симметрии.

3) Нарисовать здание АУЭС.

Вариант 20.

1) Построить график функции y=x3/3 - 1.

2) Построить предмет столовой и его отражение.

3) Нарисовать велосипед.

Вариант 21.

1) Построить график функции y=2x2/7 +2х-4.

 

2) Построить круговую диаграмму по данным статей расхода бюджета

 

вашей семьи.

 

3) Нарисовать компьютер.

 

 

Список контрольных вопросов

 

1 Tkinter – что это такое?

2 Какие библиотеки нужны для работы с использованием графики?

3 В каких средах Python можно работать с графическими файлами?

 

 

Методические указания по выполнению лабораторных работ на алгоритмическом языке  Python

Рубежный контроль 2

 



Поделиться:


Последнее изменение этой страницы: 2021-05-27; просмотров: 905; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.147.42.168 (0.383 с.)