Главная » Просмотр файлов » Лутц М. - Изучаем Python

Лутц М. - Изучаем Python (1077325), страница 170

Файл №1077325 Лутц М. - Изучаем Python (Лутц М. - Изучаем Python) 170 страницаЛутц М. - Изучаем Python (1077325) страница 1702018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 170)

Во втором решении в качестве начального значения используется первый аргумент, а затем выполняется сканирование аргументов, начиная со второго, почти как в одном из вариантов функции а1п, показанной в главе 16. Второе решение является более предпочтительным. Но в обоих вариантах предполагается, что все аргументы принадлежат к одному и тому же типу, а, кроме того, предполагается, что функция не будет работать со словарями (как мы видели во второй части книги, оператор ч не работает с операндами разных типов и со словарями). Вы можете добавить проверку типа аргументов и предусмотреть специальный программный код для обработки словарей, за что вам причитаются дополнительные баллы: бе( аббег1(.агдв); Рг>п( аббег1', г( гуре(агре[0]) == 1уре(0); г целое чнслоу 799 Решения упражнений № Лрибввить аргуиенти 2..№ Гог Гипс тп (аббег1, аббег2): рг1пт Гипс(2, 3, 4) рг1пт Гипс('враз', 'еццв', 'тоавт') рг!пт Гипс(['а', 'Ь'], ['с', 'б'], ['е', 'Г']) % ру1поп вббегв.ру вббвг1 9 аббег) врааеццвтоав! аббег! ['в', 'Ь', 'с', 'б', 'е', 'Г'] аббег2 9 вббег2 врааецдзтоазт аббег2 ['а', 'Ь', 'с', 'б', 'е', 'Г'] 4.

Передача аргулгентое по ключу. Ниже приводится мое решение первой части этого упражнения (файл тог(гру). Для обхода аргументов, передаваемых по ключу, в заголовке функции следует использовать форму списка аргументов ° *а где и цикл в теле функции (например, тот х тп агдв. Кеув(); и использовать агдв[х]) или использовать агдв. иа1иев(), чтобы реализовать сложение по позициям аргументов в списке *а г98: бе( побег(цосе=1. Ьаб=2, од!7=3): гетигп дооб + Ьаб + и91у аббег() аббег(5) аббег(5, 6) аббег(5, 6, 7) аббег(ид1у=7, даос=6, Ьвб=5) 5. (и 6.) Ниже приводится мое решение упражнений 5 и 6 (файл с((с!в.ру).

Однако это решение пригодно только в качестве упражнения, потому что в РуФоп 1.5 у словарей появились методы О. сору() виа = 0 е1ве: виа = вгдв[ОИ:0] тот вгц ш агцв: виа = виа + агц ге!игл зиа бег аббег2(*агцз): рг1Ш 'аббег2', виа = агцв[0] Гог пехт 1п аг9в[1;]; виа += пех! ге!игп виа рг1ш рг тот рг1п! рг1п! рг1Ш % ау!поп аоб.ру 6 10 14 18 18 № Инициализировать нулеи № иначе — лослеловательносты № Использовать пустой срез первого аргуиентг № Инициализировать знгчениеи первого аргуиента 800 Приложение В и 01, орбаге[02), которые реализуют операции копирования и сложение (слияние) словарей.

(За дополнительной информацией обращайтесь к справочному руководству по библиотеке РуФ]уоп или к книге «РуФ]гоп Рос]сеС ВеГегепсе», выпущенной издательством О'Ве111у,) Операция извлечения среза Х[: ) не применима к словарям, потому что они не являются последовательностями (подробности в главе 8). Кроме того, не забывайте, что в случае присваивания (е = б) просто создается вторая ссылка на один и тот же объект словаря — изменения в словаре б будут приводить к изменениям в словаре е: бе( сору0[сг(о1б): пеи = () (ог Кеу 1и о1б.ыеув(); яви[иву] = о1б[аеу] гегогп пеы беу абер[с((б1, б2): пои = () (ог Кеу [п б1.иеув(); пеи[кеу] = б1[кеу] Гог Кеу 1п б2.иеув(); пеи[цеу] = б2[иеу] гетогп пеы Ь ругаоп »> Ггое б1ссв 1ерогс >»б=(1:1,2:2) »> е = сору01сг(б) »> б[21 = '?' »> б (1: 1, 2: '?) »> е (1. '1, 2; 2) »>х (1: 1) »> у = (2: 2) »> г = абб01сг(» У) »> г (1: 1, 2: 2) б.

Дополнительные примеры на сопоставление аргументов. Ниже приводится пример диалога с интерактивной оболочкой, который вы должны получить в ходе выполнения этого упражнения, с некоторыми комментариями, поясняющими порядок сопоставления аргументов: бе( 11(а, ь); рг>п( а, ь г Обычные аргуиенты бе( 12(а, *ь); рг>пг а, ь г сопоставление выполняется по позиции бе( ГЗ(а, ° Ь). рг)пг а, Ь г Сопоставление выполняется по ключаи бе( ы(а, *ь, **с): рг[пг а, ь, с г сивюанный павии Решения упражнений 801 се( (5(а, ь=2.

с=з): рг1пт а, ь, с № Аргуиенти со значенияии по уиолчанию Ое( ?5(а, Ь=2, с): рг1п1 а, Ь, с № Аргуиенты по умолчанию и позиционные Ъ ру(яоп >» ?1(1, 2) 1 2 № Сопоставление по позиции (аахен поРядок) »> Гць=г, а=1) 1 2 № Сопоставление по ииени (порядок не аахен) >» ?2(1, 2, 3) 1(2, 3) № Дополнительные аргуиенты обьединяются № в кортея »> ГЗ(1, х=2, уиЗ) 1 ('х': 2, 'у''.

3) № Дополнительные ключи обьединяются № в словарь »> (4(1, 2, 3, х=2, у=З) № дополнительные аргуиенты обоих типов 1 (2, 3) ('х': 2, 'у'; 3) »> (5(1) 123 № Два последних аргуиента получают № значения по уиолчанию № Используется только одно значение № по уиолчанию № Дополнительный позиционный аргуиент № собирается в кортех 7. Снова просп(же числа. Ниже приводится пример нахождения простых чисел, оформленный в виде функции в модуле (файл рг(тев.ру), которую можно вызывать несколько раз. Я добавил проверку, чтобы отсечь отрицательные числа, О и 1. Кроме того, я заменил оператор / на //, чтобы зто решение правильно работало в Ру())оп 3.0, где будут внесены изменения в действие оператора /, о чем рассказывалось в главе б, и чтобы добавить поддержку чисел с плавающей точкой. В настоящее время в решении можно использовать как оператор //, так и оператор /, но в будущем оператор / будет завершаться ошибкой (раскомментируйте инструкцию г гоа и замените оператор // на / , чтобы увидеть разницу между версиями Рубйоп 2.2 и 3.0): №(гоа ?о(оге 1арогт с1ч1зтоп Ое( рг1ае(у): 1( у <= 1: рг1п( у, 'пот рг1ае' е!Зе; х= у//2 ыя11е х > 1: 1( у % х == О.' рг!пт у, 'Ьаз ьгеак х-=1 № У некоторых покет быть у > 1 № В будущеи / будет терпеть неудачу № нет остатка? Гас1ог', х № Обойти ветку е)зе »> ?5(1, 4) 143 »> ?5(1) 1 2 () »> Гб(1, 3, 4) 13(4,) № Один аргуиент: соответствует ииени "а" вот Приложение В е1ве: рг1пс у, '1в рг1ае' рг1ае(13); рг(ае(13.0) рг1ае(15); рг1ае(15.0) рг1ае(3); рг(ае(2) рг1ае(1); рг(ае(-3) Далее приводится пример работы модуля.

Оператор // позволяет модулю работать с вещественными числами тоже, хотя этого быть не должно. % русаоп рг1аез.ру 13 (в рг(ае 13.0 1в рг(ае 15 Пвз Гвссог 5 15.0 Пзв гас1ог 5.0 3 1в рг1ае 2 (в рг1ае 1 по1 рг1ае -3 по1 рг1|е Эта функция все еще не слишком пригодна к многократному использованию — вместо вывода результата она могла бы возвращать значения, но для экспериментов вполне достаточно и такой реализации. Кроме того, она не строго соответствует математическому определению простых чисел, которыми могут быть только целые числа, и не обладает достаточной эффективностью.

Эти улучшения я оставляю для самостоятельной реализации читателям, склонным к математике. Подсказка: цикл аког через галде(у, 1, -1) будет выполняться немного быстрее, чем цикл и011е (на самом деле, в РуФЬоп 2.2 скорость увеличивается почти в два раза), но самым узким местом здесь является сам алгоритм. Для измерения производительности альтернативных реализаций воспользуйтесь встроенным модулем 1(ае и отрывком кода, подобным следующей универсальной функции 11аег (за дополнительной информацией обращайтесь к справочному руководству по библиотеке): Оеу сгаег(гЕрв, (поо, *ЗГдз): гарогг ыае всвг1 = ыае.с1осп() Гог 1 (п хгапде(гере): ерр1у(гипс, вгдз) гегигп сгае.с1осп() - всзг1 8. Генераторы слиское.

Ниже приводится вариант программного кода, который должен получиться у вас, — у меня есть свои предпочтения, но я о них умолчу: »> чз1оев = (2, 4, 9, 16, 25) »> 1арогс азсп »> гез = () 803 Решения упражнений »> гог х 1п ча1овв: гез.аррепо(васп.вогс(х)) »> гвв [1. 4142135623730951, 2.0, 3.0, 4. О, 5. 0] »> аар(аасп.зсгт, ча1овз) [1 4142135623730951 2 О, 3 0 4 0 5 0] »> [аасп.зсг1(х) уог х 1п ча1оез] [1.4142135623730951, 2.0, 3.0, 4.0, 5 0] Часть Ч. Модули Упражнения находятся в главе 21, в разделе «Упражнения к пятой части».

1. Основы импортирования. Решение этого упражнения выглядит гораздо проще, чем можно было бы подумать. Когда вы закончите, у вас должен получиться файл (тутог(.ру) и сеанс взаимодействия с интерактивной оболочкой, как показано ниже. Не забывайте, что интерпретатор Ру1]топ шожет читать содержимое файла целиком в список строк, а получить длину каждой строки в списке можно с помощью встроенной функции 1еп: Ое( сопл(шпее(паве): 711е = орел(паве) гетчгп 1еп(711е.геас11пев()) Ое( сооп1СПагв(паве): гетогп 1еп(орел(паве).геаб()) оег 1евс(паве): а Или передать обьект файла гесогп соопг[1пев(паве), соопсспагз(паве) Ф илк вернут~ словарь Ь руваоп »> 1врогв вузов »> аувоб.зевс('вузов Ру') (10, 291) Обратите внимание, что эти функции читают файл в память целиком и потому не в состоянии работать с патологически большими файлами, которые не смогут уместиться в памяти компьютера.

Чтобы обеспечить более высокую устойчивость, можно организовать построчное чтение содержимого файла с помощью итератора и накапливать длины строк в ходе итераций: оег сопят[гоев(паве) Гот = О гог 1>пе тп ареп(паве); со1 »= 1 гЕ(отп тст Оет сооп(СЬагв(паве); Гот = О 804 Припожение В гсг 1!ив ьп преп(паве): тот += 1еп(1>пе) ге!игл 1с! В операционной системе ()Х1Х полученный результат можно проверить с помощью команды ис. В 6г(пг)овгз можно щелкнуть на файле правой кнопкой мыши и посмотреть его свойства. Обратите внимание, что результат, возвращаемый сценарием, может несколько отличаться от того, что сообщает 1)(Г1пг)овгз, — с целью обеспечения переносимости интерпретатор Ру1)юп преобразует пары символов 1г'чп, отмечающих конец каждой строки, в один символ 1п, в результате чего теряется по одному байту на каждую строку.

Чтобы результат сценария в точности соответствовал тому, что сообщает %1пдочив, файл необходимо открыть в режиме двоичного доступа (' гз ') или прибавлять к общему результату число строк. Чтобы реализовать часть упражнения »для честолюбивых» (передавать функциям объект файла, чтобы открывать его приходилось всего один раэ), вам, скорее всего, придется использовать метод веек объекта файла.

Мы не рассматривали этот метод в книге, но он работает точно так же, как функция (веен в языке С (которая, собственно, и вызывается внутренней реализацией метода): метод веек переустанавливает текущую позицию в файле в указанное смещение. После вызова метода веек последующие операции ввода/вывода будут выполняться относительно новой позиции. Чтобы переместиться в начало файла, не закрывая и не открывая его повторно, можно вызвать метод (т1е.

Характеристики

Тип файла
DJVU-файл
Размер
11,21 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6354
Авторов
на СтудИзбе
312
Средний доход
с одного платного файла
Обучение Подробнее