Лутц М. - Изучаем Python (1077325), страница 169
Текст из файла (страница 169)
Извлечение элемента по несуществующему ключу (0( ' 6 ' ] ) приводит к появлению ошибки. Присва иван ие по несуществующему ключу (О('6']='враз') создает новый элемент словаря. С другой стороны, выход индекса за границы списка тоже вызывает появление ошибки; ошибкой считается и присваивание по индексу, выходящему за границы списка.
Имена переменных напоминают ключи словаря — прежде чем обратиться к переменным, им необходимо присвоить значение. Имена переменных, если понадобится, можно обрабатывать как ключи словарей (они становятся видимы в пространстве имен модуля или в пределах словарей): »> 0 = ('а':1, 'Ь':2, 'с':3) »> О['а'] 1 »> 0['6'] ТгасеЬасК ([ппегаав( 1ав().' Е[1е <в(6)п>", 1[пе 1, >и? КеуЕггаг: 6 »> 0[6 ] 4 »> 0 ('Ь'. 2, '6': 4, 'а': 1, 'с'; 3) »> »> Е = [О, 1] Решения упражнений 793 >» [[2) ТгасеЬаск (сппегюовС !авт): Гт!е "<втбтп>", 1гпе 1, 1п > 1пбехЕггог.
11вс тпбех оцт от галде (1пбехЕггог: выход индекса за границы списка) »> [[2) = 3 ТгасеЬасК (сппегюовС !авт): Р11Е "<Втб(П>", 1СПЕ 1, Сл ? 1пбехЕггог. 1(вС аввсдпиепС 1пбех оцС от галде (1пбехЕггог: присваивание по индексу за границами списка) 7. Общие операции. Ответы на вопросы: ° Оператор с не работает с объектами разных типов (например, строка+ список, список + кортеж).
° Оператор и не работает со словарями, так как они не являются последовательностями. ° Метод аррепб может применяться только к спискам, но не к строкам, а метод Кеув может применяться только к словарям. Метод аррепб предполагает, что целевой объект является изменяемым, поскольку изменяется сам объект; строки относятся к неизменяемым типам.
° Операции извлечения среза и конкатенации всегда возвращают новый объект того же типа, что и объекты-операнды. »> "х" + 1 ТгасеоасК (>ппегиозт !азт): Гт!е "<зсб1п>", !спе 1, сп о турееггог: С!!еда! агдцюепс суре тог ьц[11-сп орегассоп (ТуреЕггог; невернцй тип аргумента встроенной операции) »> »> () + () тгасеьаск (1ппегиозс 1авс); Е[1е '<втб)п>", 1>пе 1, 1п ? ТуреЕггаг: Ьаб орегапб Суре(в) тог + (ТуреЕггог: неаернцй тип операнда(ов) для +) >» >» [).аррепб(9) »> "".аррепб('в') ТгасеЬаск (1ппегаовС 1авт): ЕС!е "<втбтп>", !Спе 1, )п ? АссгсоцсеЕггог; аССгтоцте-!евв ЬЬ)есс (АССмЬцтеЕггог: объект без атрибутов) >» »> ().Кеув() [) »> [!.Кеув() тгасеьаск (сппегюоы 1авс): Еые "<всб1п>", !1пе 1, 1п ? АССг>ЬцСЕЕгГОг.
Квуз (Ассг1ьосееггог: ключи) 794 Приложение В >» »> (И:) »> ""[;] 8. Индексирование строк. Так как строки представляют собой коллекции односимвольных строк, каждый раз, когда извлекается элемент строки, возвращается строка, из которой также допускается извлекать элементы по индексам. Выражение 3[0][0][ОНО][0] всего лишь извлекает первый символ снова и снова.
Этот прием неприменим к спискам (списки могут хранить объекты произвольных типов), если список не содержит строки: »> 8 = "арав" >» 3[ОИОИОИОИО) »> (. = ('а', 'Р') >» с(ОИОИО) 9. Неизменяемые типы. Правильными являются оба следующих решения. Присваивание по индексу недопустимо, потому что строки являются неизменяемыми объектами: >» 8 = "арав »> 8 = 8[0) + '1' + 3[2:) »> 8 'в1ав >» 8 = 3(0) + '1' + 3(2) + 8(3) >» 3 'в1ав' 10. Вложенные структуры. Ниже приводится пример такой структуры: »> ве = ('паве':('вага', 'е', ' 1ютг'), 'аОФ':'7', ')оа".'епрспеег') »> ве(')ор') 'еп9!пеег' »> во['паве' И2] 1017 а Файл вахег ру с>1е = ореп('вугс1е.схс', 'и') сс1е юг>се('непа сс1е ыог1о.''уп') в или орел().юг>се() С!1е.с1ове() в закрыввты файл не всегда обязвтвлыно а Файл: геаоег Ру гс)е = орел('вус(1е.схс ) рыпС С>1е.геас() В 'г' - реиии открытия ло уиолив ~ию В Или ргслс орел() гевв() 11.
Файлы. Ниже приводится пример одного из способов создания файла и чтения информации из него в языке Ру[)соп (13 — это команда [))>)(Х, в 1)(г!по[осев вместо нее следует использовать команду С! г): Решения упражнений % рутпоп вахег,ру % ругпоп геазег.ру Не11о 71)е ног)Ш % 1з -1 ву(ые.гхоз -гнхгнхгна 1 0 0 19 Арг 13 16:33 ву(11е.гхг Функция Жг. Ниже показано, что будет получено в случае списков. Для словарей будет получена та же информация, но имена методов будут другими. Обратите внимание, действие функции 0[г в Ру- $)>оп 2.2 было расширено — она дополнительно выводит имена, начинающиеся и заканчивающиеся символами подчеркивания, которые реализуют операторы выражений и могут быть унаследованы подклассами, как описывается в шестой части книги.
Атрибут ветнсзз был удален в версии Ру(акоп 2.2 из-за его противоречивой реализации — используйте вместо него функцию 0[г для извлечения списка атрибутов: 12. »> и. вез%осе ['аррепо', 'сосп(', '(псех', 'гпзегг', 'гевоче', 'гечегзе', 'зогг', .] »> с(г([)) ['аррепо', 'сосп1', '[поех', '1пзегг', 'гевоче, 'гечегзе'. 'зогг',...) Часть Ш. Инструкции и синтаксис Основы циклов. При выполнении етого упражнения вы получите примерно такой программный код: »> 8 'зрав' »> Гог с 1п 8.' рг(пс ого(с) 115 112 97 109 »> х = 0 »> рог с (п 8: х += ого(с) р ипгс х = х «ого(с) »> х 433 >»х [1 »> Гог с (п 8: х.аррепо(ого(с)) »> х [ 1 15, 1 12, 97, 109 ) »> вар(огс, 8) [ 1 15, 1 12, 97, 109 ) Упражнения находятся в главе 14, в разделе «Упражнения к третьей части«. Приложение В 79б 2.
Символы обратного слета. Пример выводит символ подачи звукового сигнала (Ха) 50 раз — здесь предполагается, что ваш компьютер в состоянии воспроизвести его, поэтому при запуске этого фрагмента не под управлением П)] Е вы можете получить серию звуковых сигналов (или один длинный сигнал, если ваш компьютер обладает достаточно высоким быстродействием). Эй! Я предупреждал вас! 8.
Сортировка словарей. Ниже приводится один из возможных вариантов решения этого упражнения (вернитесь к главе 8, если что-то показалось вам непонятным). Не забывайте, что вам необходимо разделить вызовы методов Кеуз и зсгс, как это сделано здесь, потому что метод зог( возвращает объект)(спе. Начиная с версии Ру(]топ 2.2 появилась возможность организовать итерации по ключам словаря без вызова метода иеуз(например, (сг Кеу гп 0:), но ключи не будут отсортированы этим программным кодом.
В самых свежих версиях РуФЬоп того же эффекта можно добиться с помощью встроенной функции зогСеб1 »> 0 = ('е':1. 'Ь';2, 'с';3, 'О':4, 'е':5, 'Г':6, '0':7) »> 0 ('Г': 6, 'с': 3, 'в': 1, '0': 7, 'е': 5, 'О': 4, 'О': 2) »> »> Меув = 0.пвув() »> Хеув. во го( ) »> Гог Меу 1п иеув.' рг1пг Хеу, ' >', 0[пеу] а => 1 Ь => 2 с => 3 С => 4 е => 5 г => 6 0 => 7 »> гог меу 1п вогсео(0): г 5 наиболее свехих версиях Ругпопв рг1пг 'иеу, ' >', 0[псу] 4.
Программирование альтернативной логики. Ниже приводятся несколько вариантов решения этого упражнения. Ваши решения могут несколько отличаться — цель этого упражнения состоит в том, чтобы дать вам возможность поэкспериментировать с созданием альтернативных ветвей исполнения программы, поэтому приветствуются любые правильные решения: ( = [1, 2, 4, 8, 16, 32, 64] Х=5 >=0 ис>!е > < 1еп(с): !Г 2 " Х == ([1]. Ог1п1 'вг >пбех', 1 Решения упражнений 797 Огеах 1=1«1 е1ве: рг1пг Х, 'по1 (попс' 6 = [ 1, 2, 4, 8, 16, 62. 64 ] Х = 5 Гог р 1п Ш г( (2 ° .
Х) == р: ргьп( (2 " х), 'нав (оопп а1', и [поех(р) огеап е1ве; рг»пг Х, 'по1 Гаопс' ( = [1, 2, 4, 8, 16, 32, 64] Х=5 17 (2 ° *Х) гп Ш рггп1 (2 ° ° Х), 'пав (попс а1', Ш (псех(2 ** Х) е1ве; рггп( Х, 'по1 (попе' Х = 5 =и Гог 1 гп гаере(7) и аррепс(2 ° * г) рг1пг г( (2 ° * Х) гп Ш рг(п1 (2 " Х), 'пав Гоопд а1', 6. 1поех(2 * Х) е1ве' рггп1 х, 'по1 (оооо' Х = 5 ( = аар(1ааоеа х; 2**х, гаере(7)) рг[п( ( 17 (2 " Х) !п Ш рг(п( (2 * ° Х), 'пав (оооо а1', и шоех(2 ** Х) е1ве. рг1п1 Х, 'по1 (попс' 4асть! Ч. Функции Упражнения находятся в главе 17, в разделе «Упражнения к четвертой части». 1. Основы.
В этом упражнении нет ничего сложного, но обратите внимание на то, что инструкция ргап1 (а следовательно, и ваша функция) с технической точки зрения является поли морфической операцией, которая правильно интерпретирует типы всех объектов: % ру1поп »> Оег горо(х)г рг1пг х 798 Приложение В »> попс("враз") враа »> Уопс(42) 42 »> Гопс([1, 2, 3]) [1, 2, 3] »> попс((' Гоаб': 'враз')) ('Гоаб': 'враз') 2. Аргументы. Ниже приводится пример решения. Не забывайте, что для вывода результата необходимо использовать инструкцию рг[л(, потому что выполнение программного кода в модуле — это совсем не то же самое, что выполнение программного кода, который вводится в интерактивной оболочке, — интерпретатор не выводит автоматически результаты выражений, вычисляемых в файлах модулей: бе( агЫег(х, у).
ге1огп х ч у Рг1П1 аббег(2. 3) рг>пг аббег('враз', 'еддв') рг>пг аббег(['а', 'ь'], ['с', 'б']) % рутпоп аоб.ру 5 врааеддв ['а'. 'Ь', 'с', 'б'] 3. Переменное число аргументов. В следующем файле аг(г]егру показаны два варианта реализации функции аббе г. Самое сложное здесь заключается в инициализации значения суммы пустым значением в зависимости от типа передаваемых аргументов. Первое решение выясняет, является ли первый аргумент целым числом, и извлекает пустой срез первого аргумента (предполагается, что он является последовательностью), если он не является целым числом.