Лаба1. Лабораторная работа 1 введение в язые программирования python цель и задачи работы
Скачать 0.6 Mb.
|
Функция range() Теперь пришло время познакомиться с встроенной в Python функцией range(). "Range" переводится как "диапазон". Она может принимать один, два или три аргумента. Их назначение такое же как у функции randrange() из модуля random. Если задан только один, то генерируются числа от 0 до указанного числа, не включая его. Если заданы два, то числа генерируются от первого до второго, не включая его. Если заданы три, то третье число – это шаг. Однако, в отличие от randrange(), функция range() генерирует не одно случайное число в указанном диапазоне. Она вообще не генерирует случайные числа. Она генерирует последовательность чисел в указанном диапазоне. Так, range(5, 11) сгенерирует последовательность 5, 6, 7, 8, 9, 10. Однако это будет не структура данных типа "список". Функция range() производит объекты своего класса – диапазоны: a = range(-10, 10) a range(-10, 10) type(a) Несмотря на то, что мы не видим последовательности чисел, она есть, и мы можем обращаться к ее элементам: a[0] -10 a[5] -5 a[15] 5 a[-1] 9 Хотя изменять их нельзя, так как, в отличие от списков, объекты range() относятся к группе неизменяемых: a[10] = 100 Traceback (most recent call last): File " TypeError: 'range' object does not support item assignment Цикл for и range() 27 Итак, зачем нам понадобилась функций range() в теме про цикл for? Дело в том, что вместе они образуют неплохой тандем. For как цикл перебора элементов, в отличие от while, позволяет не следить за тем, достигнут ли конец структуры. Не надо вводить счетчик для этого, изменять его и проверять условие в заголовке. С другой стороны, range() дает последовательность целых чисел, которые можно использовать как индексы для элементов того же списка. range(len(spisok)) range(0, 4) Здесь с помощью функции len() измеряется длина списка. В данном случае она равна четырем. После этого число 4 передается в функцию range(), и она генерирует последовательность чисел от 0 до 3 включительно. Это как раз индексы элементов нашего списка. Теперь "соединим" for и range(): for i in range(len(spisok)): spisok[i] += 2 spisok [16, 46, 26, 36] В заголовке цикла for берутся элементы вовсе не списка, а объекта range. Список, элементы которого планируется перезаписывать, тут по сути не фигурирует. Если заранее знать длину списка, то заголовок может выглядеть так: for i in range(4). То, как используется i в теле цикла, вопрос второй. Примечание. Вместо идентификатора i может быть любой другой. 4. Функции в Python Функция в программировании представляет собой обособленный участок кода, который можно вызывать, обратившись к нему по имени, которым он был назван. При вызове происходит выполнение команд тела функции. Функции можно сравнить с небольшими программками, которые сами по себе, т. е. автономно, не исполняются, а встраиваются в обычную программу. Нередко их так и называют – подпрограммы. Других ключевых отличий функций от программ нет. Функции также при необходимости могут получать и возвращать данные. Только обычно они их получают не с ввода (клавиатуры, файла и др.), а из вызывающей программы. Сюда же они возвращают результат своей работы. Существует множество встроенных в язык программирования функций. С некоторыми такими в Python мы уже сталкивались. Это print(), input(), int(), float(), str(), type(). Код их тела нам не виден, он где-то "спрятан 28 внутри языка". Нам же предоставляется только интерфейс – имя функции. С другой стороны, программист всегда может определять свои функции. Их называют пользовательскими. В данном случае под "пользователем" понимают программиста, а не того, кто пользует программу. Разберемся, зачем нам эти функции, и как их создавать. Предположим, надо три раза подряд запрашивать на ввод пару чисел и складывать их. С этой целью можно использовать цикл: i = 0 while i < 3: a = int(input()) b = int(input()) print(a+b) i += 1 Однако, что если перед каждым запросом чисел, надо выводить надпись, зачем они нужны, и каждый раз эта надпись разная. Мы не можем прервать цикл, а затем вернуться к тому же циклу обратно. Придется отказаться от него, и тогда получится длинный код, содержащий в разных местах одинаковые участки: print("Сколько бананов и ананасов для обезьян?") a = int(input()) b = int(input()) print("Всего", a+b, "шт.") print("Сколько жуков и червей для ежей?") a = int(input()) b = int(input()) print("Всего", a+b, "шт.") print("Сколько рыб и моллюсков для выдр?") a = int(input()) b = int(input()) print("Всего", a+b, "шт.") Пример исполнения программы: Сколько бананов и ананасов для обезьян? 15 5 Всего 20 шт. Сколько жуков и червей для ежей? 50 12 Всего 62 шт. Сколько рыб и моллюсков для выдр? 16 8 Всего 24 шт. 29 Внедрение функций позволяет решить проблему дублирования кода в разных местах программы. Благодаря им можно исполнять один и тот же участок кода не сразу, а только тогда, когда он понадобится. Определение функции. Оператор def В языке программирования Python функции определяются с помощью оператора def. Рассмотрим код: def countFood(): a = int(input()) b = int(input()) print("Всего", a+b, "шт.") Это пример определения функции. Как и другие сложные инструкции вроде условного оператора и циклов функция состоит из заголовка и тела. Заголовок оканчивается двоеточием и переходом на новую строку. Тело имеет отступ. Ключевое слово def сообщает интерпретатору, что перед ним определение функции. За def следует имя функции. Оно может быть любым, также как и всякий идентификатор, например, переменная. В программировании весьма желательно давать всему осмысленные имена. Так в данном случае функция названа "посчитатьЕду" в переводе на русский. После имени функции ставятся скобки. В приведенном примере они пустые. Это значит, что функция не принимает никакие данные из вызывающей ее программы. Однако она могла бы их принимать, и тогда в скобках были бы указаны так называемые параметры. После двоеточия следует тело, содержащее инструкции, которые выполняются при вызове функции. Следует различать определение функции и ее вызов. В программном коде они не рядом и не вместе. Можно определить функцию, но ни разу ее не вызвать. Нельзя вызвать функцию, которая не была определена. Определив функцию, но ни разу не вызвав ее, вы никогда не выполните ее тела. Вызов функции Рассмотрим полную версию программы с функцией: def countFood(): a = int(input()) b = int(input()) print("Всего", a+b, "шт.") print("Сколько бананов и ананасов для обезьян?") countFood() 30 print("Сколько жуков и червей для ежей?") countFood() print("Сколько рыб и моллюсков для выдр?") countFood() После вывода на экран каждого информационного сообщения осуществляется вызов функции, который выглядит просто как упоминание ее имени со скобками. Поскольку в функцию мы ничего не передаем скобки опять же пустые. В приведенном коде функция вызывается три раза. Когда функция вызывается, поток выполнения программы переходит к ее определению и начинает исполнять ее тело. После того, как тело функции исполнено, поток выполнения возвращается в основной код в то место, где функция вызывалась. Далее исполняется следующее за вызовом выражение. В языке Python определение функции должно предшествовать ее вызовам. Это связано с тем, что интерпретатор читает код строка за строкой и о том, что находится ниже по течению, ему еще неизвестно. Поэтому если вызов функции предшествует ее определению, то возникает ошибка (выбрасывается исключение NameError): print("Сколько бананов и ананасов для обезьян?") countFood() print("Сколько жуков и червей для ежей?") countFood() print("Сколько рыб и моллюсков для выдр?") countFood() def countFood(): a = int(input()) b = int(input()) print("Всего", a+b, "шт.") Результат: Сколько бананов и ананасов для обезьян? Traceback (most recent call last): File "test.py", line 2, in countFood() NameError: name 'countFood' is not defined Для многих компилируемых языков это не обязательное условие. Там можно определять и вызывать функцию в произвольных местах программы. Однако для удобочитаемости кода программисты даже в этом случае предпочитают соблюдать определенные правила. 31 Задания к лабораторной работе 1. Заполните список случайными числами. Используйте в коде цикл for, функции range() и randint(). 2. Если объект range (диапазон) передать встроенной в Python функции list(), то она преобразует его к списку. Создайте таким образом список с элементами от 0 до 100 и шагом 17. 3. Напишите программу, которая заполняет список пятью словами, введенными с клавиатуры, измеряет длину каждого слова и добавляет полученное значение в другой список. Например, список слов – ['yes', 'no', 'maybe', 'ok', 'what'], список длин – [3, 2, 5, 2, 4]. Оба списка должны выводиться на экран. 4. Напишите программу, которая запрашивает у пользователя число. Если оно больше нуля, то в ответ на экран выводится число 1. Если введенное число не является положительным, то на экран должно выводиться -1. 5. Напишите программу, которая запрашивает на ввод число. Если оно положительное, то на экран выводится цифра 1. Если число отрицательное, выводится -1. Если введенное число – это 0, то на экран выводится 0. Используйте в коде условный оператор множественного ветвления. 6. Используя цикл while, выведите на экран для числа 2 его степени от 0 до 20. Возведение в степень в Python обозначается как **. Фрагмент вывода: 32 64 128 256 512 1024 Контрольные вопросы 1. Почему операция вида a— допустима? 2. Чем отличаются результаты операций «/» и «//» для целых чисел? А для вещественных чисел? 3. Какая структура является результатом работы функции divmod()? 4. Какие ограничения на длину строки установлены в Python? 5. Пусть имеются две строки s1 и s2. Есть ли разница в результатах выполнения команды «print s1+s2» и команды «print s1,s2»? 6. Пусть имеется два кортежа t1 и t2. Есть ли разница в результатах выполнения команды «print t1+t2» и команды «print t1,t2»? 7. Назовите минимум три отличия списка от кортежа. 32 8. Пусть имеется строка s='madagaskar'. Какая строка будет результатом операции среза s[1:7:2]? 9. Опишите последовательность действий, с помощью которых можно получить из файла, в котором записаны четыре вещественных числа, эти числа в виде значений переменных. 10. Опишите способ получения геометрической прогрессии со знаменателем q и вычисления её суммы. 11. Опишите два способа изменить порядок элементов кортежа из четырёх элементов на противоположный. Требования к содержанию отчета Отчет к лабораторной работе должен иметь титульный лист с указанием названия учебного заведения, названия кафедры, дисциплины, номера и названия лабораторной работы; ФИО студентов, выполнивших работу; ФИО преподавателя; места сдачи и года. В отчете должны быть следующие разделы: Цель работы и текст задания (постановка задачи); Практическая часть с описанием хода выполнения работы, листингом кода (с поясняющими комментариями), скриншотами результатов работы программ с пояснениями, а также блок-схемами алгоритмов; Выводы о проделанной работе. Отчет должен быть аккуратно оформлен и подшит. Шрифт текста – Times New Roman, размер – 14, междустрочный интервал – 1.0. Рисунки и таблицы должны быть пронумерованы и названы. |