Саммерфилд - Программирование на Python 3 (1077331), страница 13
Текст из файла (страница 13)
Упражнения 5190тдтта ана, ру 77?77 1 9999 7 11 9 9 7 1 9 9 7 1 9999 7 1 9 7 1 9 7 111 9 719428306 4 222 44 2 2 4 4 2 2 4 4 2 444444 2 4 2 4 22222 888 333 000 666 8 8 3 3 0 0 6 8 8 3 0 0 б 888 33 0 0 бббб 8 8 3 О О 6 б 8 8 3 3 0 0 б б 886 333 000 666 Эта задача может быть решена двумя способами. Самый простой способ заключается в том, чтобы просто заменить символы * в списках. Но этот путь не слишком гибкий, и хотелось бы, чтобы вы пошли другим путем. Попробуйте изменить программный код так, чтобы вместо добавления в строку за один проход целых строк (019- ттГ гои1), вырезанных из изображений цифр, в строку добавлялись бы символ за символом, и при встрече символа * он заменялся бы соответствующим цифровым символом.
о Цель упражнений, которые приводятся здесь и будут Примеры к книге, приводиться на протяжении всей книги, состоит в том, стр. 15 чтобы стимулировать вас на проведение экспериментов с языком Рубцов и помочь получить практический опыт с одновременным закреплением пройденного материала. В примерах и упражнениях рассматриваются проблемы числовой обработки и обработки текста, что может интересовать самую широкую аудиторию, а кроме того, размеры упражнений настолько невелики, что при их решении вам придется главным образом думать и учиться, а не просто вводить программный код. Решение для каждого упражнения можно найти в примерах книги. 1. Было бы довольно интересно написать версию программы Ьгдйягга.ру, которая для рисования цифр использовала бы не символ *, а соответствующие цифровые символы. Например: Упражнения б5 Сделать это можно, скопировав исходный программный код из Ь!ус(!д!сз.ру и изменив пять строк.
Это упражнение не столько сложное, сколько с подвохом. Решение приводится в файле Ь!дс(!у!(з алз.ру. 2. Среда разработки 1Р) Е может использоваться как мощный калькулятор, но иногда бывает удобно иметь калькулятор, специализированный для решения определенного круга задач. Напишите программу, которая в цикле ип!1е предлагала бы пользователю ввести число, постепенно накапливая список введенных чисел. Затем, когда пользователь завершит работу с программой (простым нажатием клавиши Епсег), она выводила бы числа, введенные пользователем, количество введенных чисел, их сумму, наименьшее и наибольшее число и среднее значение (сумма / количество). Ниже приводится пример сеанса работы с программой: анегаре1 апв.ру ЕП1Ег а пиаЬег сг Епсег сп гап!ва. 5 еп1ег а пааЬег сг Еп1ег сс Гапгаа. 4 еп1ег а псаЬег сг Епсег 1с Гапгва: 1 епсег а ппаьег пг еп1ег 1с г!и!вп: 8 епсег а псаьег пг еп1ег сс г!пшь: 5 епсег а ппаьег пг еп1ег сс !!пава: 2 еп1ег а пваьег пг еп1ег 1с !!пава: ппааегв: [5, 4, 1, 8, 5, 2) попас = 6 ваа = 25 !Ьнев1 = 1 мбпевс = 8 аеап = 4.
16666666667 Решение этого упражнения потребует примерно четыре строки для инициализации необходимых переменных (пустой список — это просто литерал [!) и не более 15 строк для цикла иЬ!1е, включая обработку ошибок. Для вывода результатов в конце потребуется всего пара строк, поэтому вся программа, включая пустые строки для лучшей читаемости, должна уместиться примерно в 25 строк. 3. В некоторых ситуациях нам может потребоваться сгенерировать тестовый текст, который пригодится, например, при разработке дизайна веб-сайта, когда действительное содержимое еще отсутствует, или при разработке программы составления отчетов.
Напишите программу, которая создавала бы жуткие поэмы (способные посрамить поэзию Вогона (Чоков)). Создайте списки слов, например, артиклей («1Ье», «а» и других), имен существительных («сас», «с[он», «тап», «1аошап»), глаголов(«ваня», «гап», «)шпрее») и наречий («1оис[1у», «с[п!е!1у», «аге11», «Ьас[1у»). Затем выполните пять циклов и на каждой итерации с помощью функции гапсьа, сяо!се() выберите артикль, существительное, глагол и наречие. С помощью функции гапбса. гапс)!п1() выберите одну из двух структур предложений: артикль, существительное, 66 Глава 1. Быстрое введение в процедурное программирование глагол и наречие, или артикль, существительное и глагол,— и выведите предложение.
Ниже приводится пример запуска такой программы: анто1роетгу1 апп.ру Пег пап Пеагз ро1тте1у шз Ьоу вапр апотпег непал порее Пег ртг1 вапр з1он1у тпе сат пеаге 1ооп1у Для решения этого упражнения вам потребуется импортировать модуль гзпсоа. Списки могут занимать порядка 4-10 строк, в зависимости от того, как много слов вы подберете для каждого из них, и сам цикл будет занимать не более 10 строк, поэтому вся программа, включая пустые строки для лучшей читаемости, должна уместиться примерно в 20 строк.
Решение приводится в файле аигги(роетгу1 оперу. 4. Чтобы сделать поэтическую программу более универсальной, добавьте в нее программный код, дающий пользователю возможность определить количество выводимых строк (от 1 до 10 включительно), передавая число в виде аргумента командной строки. Если программа вызывается без аргумента, она должна по умолчанию выводить пять строк, как и раньше. Для решения этого упражнения вам потребуется изменить главный цикл (зто может быть цикл нп(1е).
Не забывайте, что операторы сравнения в языке Ру(Ьоп могут объединяться в цепочки, поэтому здесь вам не потребуется использовать логический оператор апО при проверке вхождения аргумента командной строки в заданный диапазон. Функциональность программы может быть расширена за счет приблизительно десяти строк программного кода. Решение приводится в файле аигги1роеб гу2 алз.ру.
5. В программе из упражнения 2 было бы неплохо реализовать нахождение не только среднего значения, но и медианы, но для этого придется отсортировать список. Сортировка списков в языке Ру$Ьоп легко осуществляется с помощью метода 1(зт. вогт(), но мы еще не рассматривали этот метод, поэтому вам не следует использовать его. Дополните программу вычисления среднего значения программным кодом, который сортировал бы список чисел. Эффективность не имеет значения, поэтому используйте самый простой способ сортировки, какой только придет вам на ум.
Отсортировав список, можно будет найти и медиану, которая будет являться значением элемента в середине, если список содержит нечетное число элементов, и средним значением от двух средних элементов, если список содержит четное число элементов. Найдите медиану и выведите ее вместе с остальной информацией. Упражнения Решение этого упражнения может оказаться не совсем простым делом, особенно для неопытных программистов. Даже если у вас имеется опыт работы с языком Ру1йоп, вы все равно можете столкнуться с трудностями, так как вы ограничены только тем кругом возможностей, которые мы рассмотрели в этой главе. Реализация сортировки займет примерно дюжину строк, и вычисление медианы (нельзя использовать оператор деления по модулю, так как он еще не рассматривался) еще четыре строки.
Решение приводится в файле аоегауе2 алэ.ру. Типы данных В этой главе мы приступаем к более подробному изучению языка Ру1Ьоп. Для начала мы обсудим правила создания имен, которые мы даем ссылкам на объекты, и познакомимся со списком ключевых слов языка РуФЬоп. Затем мы рассмотрим наиболее важные типы данных, исключая коллекции, которые будут рассматриваться в главе 3. Типы данных считаются встроенными за исключением тех, что определены в стандартной библиотеке. Единственное отличие встроенных типов данных от библиотечных состоит в том, что, прежде чем воспользоваться последними, нам необходимо импортировать соответствующие модули и мы должны квалифицировать имена типов именами модулей, в которых они определяются.
Более подробно об импортировании мы поговорим в главе 5. Идентификаторы и ключевые слова о Создавая элемент данных, мы можем либо присвоить его Ссылки на ссьекв»к переменной, либо вставить в коллекцию. (Как уже отмеспк 29 чалось в предыдущей главе, когда в языке Ру1Ьоп выполняется операция присваивания, в действительности происходит связывание ссылки на объект с объектом в памяти, который хранит данные.) Имена, которые даются ссылкам на объекты, называются идентификаторами, или просто именами. Допустимый идентификатор в языке РуСЬоп — это последовательность символов произвольной длины, содержащей »начальный символ» и ноль или более »символов продолжения».
Такой идентификатор должен следовать определенным правилам и соглашениям. 69 Идентификаторы и ключевые слова Первое правило касается начального символа и символов продолжения. Начальным символом может быть любой символ, который в кодировке Юникод рассматривается как принадлежащий диапазону ал- фавитных символов АЯСП(«а», «Ъ», ..., «х», «А», «В», ..., «Е»), символ подчеркивания («»), а также символы большинства национальных (не английских) алфавитов. Каждый символ продолжения может быть любым символом из тех, что пригодны в качестве начального символа, а также любым непробельным символом, включая символы, которые в кодировке Юникод считаются цифрами, такие как («0», «1», ..., «9»), и символ Каталана «».
Идентификаторы чувствительны к регистру, поэтому ТАХЯАТЕ, Тахгате, Тзхпате, тахЯате и тзхгзте — это пять разных идентификаторов. Точный перечень символов, допустимых для использования в качестве начального символа и символов продолжения, описывается в документации по языку РуФЪоп (справочник «Ьапдпаяе ге1егепсе», раздел «Ьех!са! апа)уз1з», подраздел «1бепсг1!егз апс! )сеутзогс(э»') или в РЕР 3131' (раздел «ЯпррогФ!пя )х)оп-АЯСП 1беп1!1!егз»). Второе правило гласит, что идентификатор не должен совпадать с каким-либо из ключевых слов языка РуФЪоп, поэтому мы не можем использовать имена, которые приводятся в табл.