Марк Лутц - Изучаем Python, Четвертое издание (1184811), страница 81
Текст из файла (страница 81)
Во всех упражнениях необходимо знание фундаментальных сведений, поэтому постарайтесь выполнитькак можно большую их часть.1. Основы. Поэкспериментируйте в интерактивной оболочке с наиболее частоиспользуемыми операциями, которые вы найдете в таблицах второй части. Для начала запустите интерактивный сеанс работы с интерпретаторомPython, введите все нижеследующие выражения и попробуйте объяснитьпроисходящее. Обратите внимание, что в некоторых строках точка с запятой используется как разделитель инструкций, что позволяет уместитьв одной строке несколько инструкций, например: в строке X=1;X выполняется присваивание значения переменной и последующий его вывод (подробнее о синтаксисе инструкций рассказывается в следующей части книги).Кроме того, запомните, что запятая между выражениями обычно означаетсоздание кортежа, даже в отсутствие круглых скобок: выражение X,Y,Z –это кортеж из трех элементов, который интерпретатор выведет, заключивв круглые скобки.2 ** 162 / 5, 2 / 5.0“spam” + “eggs”S = “ham”“eggs “ + SS * 5S[:0]“green %s and %s” % (“eggs”, S)‘green {0} and {1}’.format(‘eggs’, S)(‘x’,)[0](‘x’, ‘y’)[1]318Глава 9.
Кортежи, файлы и все остальноеL = [1,2,3] + [4,5,6]L, L[:], L[:0], L[-2], L[-2:]([1,2,3] + [4,5,6])[2:4][L[2], L[3]]L.reverse( ); LL.sort( ); LL.index(4){‘a’:1, ‘b’:2}[‘b’]D = {‘x’:1, ‘y’:2, ‘z’:3}D[‘w’] = 0D[‘x’] + D[‘w’]D[(1,2,3)] = 4list(D.keys()), list(D.values()), (1,2,3) in D[[]], [“”,[],( ),{},None]2. Индексирование и извлечение среза. В интерактивной оболочке создайтесписок с именем L, который содержит четыре строки или числа (например,L = [0,1,2,3]). Затем исследуйте следующие случаи – они могут никогда невстретиться вам на практике, но они заставят вас задуматься об основахреализации, что может оказаться полезным в практических ситуациях:•• Что произойдет, если попытаться получить доступ к элементу, индекскоторого выходит за пределы списка (например, L[4])?•• Что произойдет, если попытаться извлечь срез, выходящий за пределысписка (например, L[-1000:100])?•• Наконец, как отреагирует интерпретатор на попытку извлечь последовательность в обратном порядке, когда нижняя граница больше верхней(например, L[3:1])? Подсказка: попробуйте выполнить операцию присваивания такому срезу (L[3:1] = [‘?’]) и посмотреть, куда будет помещенозначение.
Как вы думаете, это то же самое явление, что и при попыткеизвлечь срез, выходящий за пределы списка?3. Индексирование, извлечение среза и инструкция del. Создайте другой список L с четырьмя элементами и присвойте одному из элементов пустой список (например, L[2] = []). Что произошло? Затем присвойте пустой списоксрезу (L[2:3] = []). Что случилось на этот раз? Не забывайте, что операцияприсваивания срезу сначала удаляет срез, а затем вставляет новое значениев заданную позицию.Инструкция del удаляет элемент с указанным смещением, ключом, атрибутом или именем.
Используйте ее для удаления элемента вашего списка (например, del L[0]). Что произойдет, если попробовать удалить целый срез (delL[1:])? Что произойдет, если срезу присвоить объект, который не являетсяпоследовательностью (L[1:2] = 1)?4. Кортежи. Введите следующие строки:>>> X = ‘spam’>>> Y = ‘eggs’>>> X, Y = Y, XКак вы думаете, что произойдет с переменными X и Y после выполнения этойпоследовательности действий?Закрепление пройденного3195. Ключи словарей. Рассмотрите следующий фрагмент:>>> D = {}>>> D[1] = ‘a’>>> D[2] = ‘b’Вы знаете, что словари не поддерживают доступ к элементам по смещениям; попробуйте объяснить происходящее здесь. Может быть, следующийпример прояснит ситуацию? (Подсказка: к какой категории типов относятся строки, целые числа и кортежи?)>>> D[(1, 2, 3)] = ‘c’>>> D{1: ‘a’, 2: ‘b’, (1, 2, 3): ‘c’}6.
Индексирование словарей. Создайте словарь с именем D и с тремя записямидля ключей ‘a’, ‘b’ и ‘c’. Что произойдет, если попытаться обратиться к элементу с несуществующим ключом (D{‘d’})? Что сделает интерпретатор, еслипопробовать присвоить значение несуществующему ключу (D[‘d’] = ‘spam’)?Как это согласуется с операциями доступа и присваивания элементам списков при использовании индексов, выходящих за их пределы? Не напоминает ли вам такое поведение правила, применяемые к переменным?7. Общие операции. Получите в интерактивной оболочке ответы на следующие вопросы:•• Что произойдет, если попытаться использовать оператор + с операндамиразличных типов (например, строка+список, список+кортеж)?•• Будет ли работать оператор +, когда один из операндов является словарем?•• Будет ли работать метод append со списками и со строками? Можно ли использовать метод keys со списками? (Подсказка: что предполагает методappend о заданном объекте?)•• Наконец, какой тип объекта будет получен, когда операция конкатенации применяется к двум спискам или двум строкам?8.
Индексирование строк. Определите строку S из четырех символов: S =“spam”. Затем введите следующее выражение: S[0][0][0][0][0]. Можете ли выобъяснить, что произошло на этот раз? (Подсказка: не забывайте, строки –это коллекции символов, а символы в языке Python представлены односимвольными строками.) Будет ли это выражение работать, если применить егок списку, такому как [‘s’, ‘p’, ‘a’, ‘m’]? Почему?9.
Неизменяемые типы. Определите еще раз строку S из четырех символов:S = “spam”. Напишите операцию присваивания, которая изменила бы строку на “slam”, используя только операции извлечения среза и конкатенации.Возможно ли выполнить то же самое действие с использованием операцийиндексирования и конкатенации? С помощью присваивания по индексуэлемента?10. Вложенные структуры. Создайте структуру данных для представлениявашей личной информации: имя (имя, фамилия, отчество), возраст, должность, адрес, электронный адрес и номер телефона.
При построении структуры вы можете использовать любые комбинации встроенных объектов320Глава 9. Кортежи, файлы и все остальное(списки, кортежи, словари, строки, числа). Затем попробуйте обратиться к отдельным элементам структуры по индексам. Являются ли какиенибудь объекты более предпочтительными для данной структуры?11. Файлы. Напишите сценарий, который создает и открывает для записи новый файл с именем myfile.txt и записывает в него строку “Hello file world!”.Затем напишите другой сценарий, который открывает файл myfile.txt,читает и выводит на экран его содержимое. Запустите поочередно эти сценарии из командной строки.
Появился ли новый файл в каталоге, откудабыли запущены сценарии? Что произойдет, если указать другой каталогв имени файла, которое передается функции open? Примечание: методы записи в файлы не добавляют символ новой строки к записываемым строкам.Добавьте символ \n явно в конец вашей строки, если хотите получить в файле полностью завершенную строку.Часть III.Инструкции и синтаксисГлава 10.Введение в инструкции языка PythonТеперь, когда вы познакомились с базовыми встроенными типами объектовязыка Python, мы начинаем исследование фундаментальных форм инструкций.
Как и в предыдущей части книги, мы начнем с общего представления синтаксиса инструкций и затем, в нескольких следующих главах, более подробнорассмотрим конкретные инструкции.Выражаясь простым языком, инструкции – это то, что вы пишете, чтобы сообщить интерпретатору, какие действия должна выполнять ваша программа.Если программа «выполняет какие-то действия», то инструкции – это способуказать, какие именно действия должна выполнять программа. Python – этопроцедурный язык программирования, основанный на использовании инструкций; комбинируя инструкции, вы задаете процедуру, которую выполняет интерпретатор в соответствии с целями программы.Структура программы на языке PythonДругой способ понять роль инструкций состоит в том, чтобы вновь вернуться к иерархии понятий, представленной в главе 4, в которой рассказывалосьо встроенных объектах и выражениях, управляющих ими.
Эта глава рассматривает следующую ступень иерархии:1. Программы делятся на модули.2. Модули содержат инструкции.3. Инструкции состоят из выражений.4. Выражения создают и обрабатывают объекты.Синтаксис языка Python по сути построен на инструкциях и выражениях. Выражения обрабатывают объекты и встраиваются в инструкции.
Инструкциипредставляют собой более крупные логические блоки программы – они напрямую используют выражения для обработки объектов, которые мы рассматривали в предыдущих главах. Кроме того, инструкции – это место, где создаютсяобъекты (например, в инструкциях присваивания), а в некоторых инструкциях создаются совершенно новые виды объектов (функции, классы и так далее).324Глава 10. Введение в инструкции языка PythonИнструкции всегда присутствуют в модулях, которые сами управляются инструкциями.Инструкции в языке PythonВ табл. 10.1 приводится набор инструкций языка Python. В этой части книгирассматриваются инструкции, которые в таблице расположены от начала и доинструкций break и continue. Ранее неофициально вам уже были представленынекоторые из инструкций, присутствующих в табл. 10.1.
В этой части книгибудут описаны подробности, опущенные ранее; вашему вниманию будут представлены остальные процедурные инструкции языка Python, а также будетрассмотрена общая синтаксическая модель. Инструкции, расположенныев табл. 10.1 ниже, имеют отношение к крупным блокам программы – функциям, классам, модулям и исключениям, и заключают в себе крупные понятияпрограммирования, поэтому каждой из них будет посвящен отдельный раздел.Более экзотические инструкции, такие как del (которая удаляет различныекомпоненты), раскрываются далее в книге или в стандартной документациипо языку Python.Таблица 10.1.