Сборник. Сборник упражнений
Скачать 1.68 Mb.
|
14 Упражнения зультата и как манипулировать значениями для получения ожидаемого результата. Любой алгоритм должен быть преобразован в компьютерную программу, чтобы компьютер смог приступить к его выполнению. Именно процесс перевода алгоритма в программу и называется программирова- нием, а человек, осуществляющий это преобразование, – программистом. Компьютерные программы пишут на языках программирования, имею- щих определенные правила синтаксиса, которые необходимо строго со- блюдать. Если этого не делать, компьютер будет выдавать ошибки, вместо того чтобы следовать инструкциям. За долгое время было создано вели- кое множество языков программирования, каждый из которых обладает свои ми достоинствами и недостатками. Одними из наиболее популярных и востребованных сегодня являются языки Java, C++, JavaScript, PHP, C# и Python. Несмотря на различия, все эти языки позволяют программисту контролировать поведение компьютера. В данной книге мы говорим о языке программирования Python, по- скольку он является одним из наиболее простых для освоения с нуля. Кроме того, этот язык может использоваться для решения самых разно- образных задач. В первой главе мы поговорим об операциях, отвечающих за ввод/вывод информации и произведение вычислений. В следующих главах затронем конструкции языка, применимые в других областях про- граммирования. 1.1. Х ранение и управление значениями Переменной (variable) называется именованная область памяти, хранящая значение. В Python имя переменной должно начинаться с буквы или сим- вола подчеркивания, после чего могут следовать любые сочетания букв, цифр и символов подчеркивания. При этом имена переменных являются регистрозависимыми, то есть имена count, Count и COUNT будут адресовать разные переменные. Создание переменной происходит в момент вы- полнения операции присваивания значения. При этом имя переменной, которой мы присваиваем значение, должно располагаться слева от зна- ка присваивания (=), а само значение – справа. Например, в следующем выражении будет создана переменная x, которой будет присвоено значе- ние 5: x = 5 Отметим, что справа от знака присваивания может находиться не толь- ко простое значение, но и выражение любой степени сложности – с ис- пользованием скобок, математических операторов, чисел и переменных, созданных на более ранних этапах. Самыми распространенными мате- Введение в программирование 15 матическими операторами, представленными в языке Python, являются сложение (+), вычитание (−), умножение (*), деление (/) и возведение в сте- пень (**). Также к простым операторам относятся деление без остатка (//) и вычисление остатка от деления (%). Первый возвращает целую часть от полученного в результате деления частного, а второй – остаток. В следующем примере переменной y присваивается результат возведе- ния переменной x в квадрат, к которому прибавлена единица: y = 1 + x ** 2 В Python соблюдается строгий порядок выполнения математических операций. Поскольку переменной x ранее уже было присвоено значение 5 , а оператор возведения в степень имеет более высокий приоритет по сравнению с оператором сложения, переменная y получит значение 26. Одна и та же переменная может находиться как слева, так и справа от оператора присваивания, как показано ниже: y = y – 6 Хотя изначально может показаться, что это выражение не имеет смыс- ла, фактически в Python оно вычисляется так же точно, как и любое другое. Сначала будет вычислено значение выражения, стоящего справа от знака равенства, а затем оно будет присвоено переменной, указанной слева. В нашем конкретном случае на первом шаге значение переменной y, рав- ное 26, будет уменьшено на 6, в результате чего будет получено значение 20 . Оно и будет записано в ту же переменную y, заменив собой прежнее значение 26. После этого обращение к переменной y будет возвращать значение 20 – до тех пор, пока ей не будет присвоено новое значение. 1.2. в ызов функций Есть масса привычных последовательностей действий, которые повторно используются программами. Это может быть чтение ввода с клавиатуры, сортировка списков или извлечение корня из числа. Python предлагает ряд функций для выполнения этих и многих других типовых операций. Программы, которые мы будем создавать, будут регулярно вызывать эти функции, так что нам не придется раз за разом решать похожие друг на друга задачи самостоятельно. Вызвать функцию можно по имени с обязательными скобками после него. Многие функции требуют передачи значений в скобках, таких как список элементов для сортировки или число, из которого необходимо извлечь квадратный корень. Эти переданные значения называются аргу- ментами функции и помещаются в круглые скобки, следующие после ее 16 Упражнения имени при вызове. Если функция принимает несколько аргументов, они должны разделяться запятыми. Многие функции вычисляют результат, который может быть сохранен в переменной посредством операции присваивания. В этом случае имя переменной указывается слева от оператора присваивания, а функция располагается справа. Например, в следующем выражении вызывается функция округления числа, результат которой присваивается переменной r : r = round(q) Значение переменной q, которая должна быть инициализирована рань- ше, передается функции round в качестве аргумента. При выполнении функция находит ближайшее к значению переменной q целое число и воз- вращает его. После этого возвращенное число присваивается перемен- ной r. 1.2.1. Чтение ввода Программы, написанные на Python, могут читать ввод с клавиатуры при помощи функции input. Вызов этой функции предписывает программе остановить выполнение и ждать завершения пользовательского ввода с клавиатуры. После нажатия пользователем клавиши Enter символы, введенные им ранее, возвращаются функцией input, и выполнение про- граммы продолжается. Обычно возвращенное функцией input значение записывается в переменную при помощи оператора присваивания, чтобы впоследствии его можно было использовать. Например, следующее выра- жение считывает ввод пользователя с клавиатуры и записывает результат в переменную a. a = input() Функция input всегда возвращает значение строкового типа (string), что в компьютерной терминологии означает последовательность символов. Если вы запрашивали у пользователя его имя, название книги или улицы, будет логично сохранить введенное значение в переменной как строку. Если же речь идет о возрасте, температуре или сумме счета в ресторане, текстовое значение, введенное пользователем, лучше будет конверти- ровать в число. Программист, следуя логике, должен определить, будет это число целым или с плавающей запятой (то есть с десятичными зна- ками после запятой). Преобразование значения в целочисленный тип осуществляется путем вызова функции int, тогда как перевод в числовой тип с плавающей запятой можно выполнить при помощи функции float. Функции приведения типа принято использовать непосредственно в том же выражении, где запрашивается ввод с клавиатуры. Например, в сле- Введение в программирование 17 дую щем примере у пользователя запрашивается его имя, количество при- обретаемых товаров и цена за штуку. Каждое введенное значение сохра- няется в соответствующей переменной, при этом непосредственно перед сохранением оно преобразуется в нужный тип: имя остается строковым, количество товаров становится целочисленным, а цена – числовым типом с плавающей запятой. name = input("Введите имя: ") quantity = int(input("Сколько товаров вы желаете приобрести? ")) price = float(input("Какова цена за единицу товара? ")) Заметьте, что при каждом вызове функции input мы передавали ей аргумент в виде вопроса. Этот аргумент является необязательным и при наличии будет показываться на экране непосредственно перед вводом с клавиатуры. Тип этого аргумента должен быть строковым. Такие зна- чения заключаются в кавычки, чтобы анализатор Python понимал, что необходимо воспринимать их как строковые, а не пытаться искать под- ходящие имена функций или переменных. Математические операции допустимо производить как с целочислен- ными значениями, так и с числами с плавающей запятой. Например, в сле- дующем выражении мы пытаемся вычислить общую сумму приобретае- мых товаров, записывая результат в новую переменную: total = quantity * price Это выражение успешно выполнится только в том случае, если состав- ляющие его переменные quantity и price были заранее преобразованы в числовой тип при помощи функций int и float. Попытка выполнить операцию умножения без предварительного преобразования переменных в числовой тип повлечет за собой ошибку программы. 1.2.2. Вывод результата Вывести значение на экран можно при помощи функции print. Она может быть вызвана c одним аргументом, представляющим значение, которое необходимо вывести на экран. Например, в следующем фрагменте кода на экран будут последовательно выведены единица, слово Hello с воскли- цательным знаком и текущее содержимое переменной x. При этом пере- менная x может характеризоваться строковым типом данных, числовым или любым другим, о которых мы пока не упоминали. Каждое значение будет выведено на отдельной строке. print(1) print("Hello!") print(x) 18 Упражнения Допустимо передавать в функцию print сразу несколько аргументов для их последовательного вывода на экран. Все аргументы функции при этом должны быть разделены запятыми, как показано ниже. print("Когда x равен", x, ", y будет равен", y) Все переданные аргументы будут выведены на одной строке. При этом аргументы, заключенные в кавычки, будут автоматически воспринимать- ся как строковые и выводиться как есть. Остальные аргументы в этом списке – это переменные. При выводе на экран переменной мы будем видеть ее текущее значение. Также стоит отметить, что все аргументы на экране будут отделяться друг от друга пробелами. Помимо строковых констант и переменных, переданные в функцию print аргументы могут представлять собой сложные выражения, включаю- щие в себя скобки, математические операторы и вызовы других функций. Рассмотрите следующий пример: print("Если умножить", x, "на", y, "получится", x * y) Выражение x * y будет автоматически вычислено, и на экране появится полученный результат умножения. 1.2.3. Импорт дополнительных функций Некоторые функции, такие как input и print, используются в программах на Python достаточно часто, другие – реже. В результате было решено наиболее популярные функции сделать доступными всем по умолчанию, а остальные разбить на модули, которые разработчики смогут подключать к своим программам по мере необходимости. К примеру, специфические математические функции собраны в отдельном модуле с именем math. Импортировать их в свою программу можно, написав соответствующую инструкцию, показанную ниже: import math В модуле math содержится огромное количество математических функ- ций, включая sqrt, ceil, sin и другие. Чтобы воспользоваться функцией из загруженного модуля, необходимо перед ней указать имя этого модуля с разделяющей их точкой. Например, в следующем выражении выпол- няется извлечение квадратного корня из переменной y (которая должна быть объявлена заранее) путем вызова функции sqrt из модуля math, и ре- зультат сохраняется в новой переменной z: z = math.sqrt(y) Введение в программирование 19 Также распространенными модулями в языке Python являются random, time , sys и многие другие. Больше информации о модулях и содержащихся в них функциях можно найти на просторах интернета. 1.3. к омментарии Комментарии позволяют разработчикам оставлять заметки в программе о том, как, что и зачем они делали в данном месте кода. Эта информация бывает крайне полезной, если приходится возвращаться к своей про- грамме через долгое время или разбираться в коде, написанном другим разработчиком. При выполнении программы компьютер игнорирует все комментарии в коде, они присутствуют там исключительно для человека. В Python строки с комментариями должны начинаться с символа ре- шетки (#). Комментарий распространяется от первого вхождения этого символа и до конца строки. Комментарий может занимать как всю строку целиком, так и ее часть – в этом случае символ # ставится после строки кода, и комментарий будет распространяться до конца строки. Рабочие файлы Python обычно начинаются с блока комментариев, кратко описывающих назначение программы. Это поможет любому сто- роннему разработчику быстро понять, для чего предназначен данный файл, без необходимости разбираться в коде. По комментариям также легко можно определить, какие блоки в программе чем занимаются при достижении общего результата. При решении задач из этой книги я на- стоятельно рекомендовал бы вам активно использовать комментарии в своем коде. 1.4. ф орматирование значений Иногда бывает, что в результате выполнения математической операции получается число с большим количеством знаков после запятой. И хотя в некоторых программах критически важно выводить результирующие числа с полной точностью, зачастую бывает необходимо округлить их до определенного количества знаков после запятой. Бывает также, что сово- купность целых чисел нужно вывести на экран в виде столбцов. Конструк- ции форматирования в Python позволяют решить эти и многие другие задачи. Для этого разработчику достаточно указать Python необходимый специ фикатор формата (format specifier) при выводе его на экран. Специфи- катор формата представляет собой последовательность символов, опре- деляющую нюансы форматирования значения. В числе прочих в нем 20 Упражнения указывается символ, говорящий о том, какой тип данных при формати- ровании значения должен использоваться. Например, символ f использу- ется для форматирования в виде числа с плавающей запятой, символы d и i говорят о том, что мы имеем дело с целыми числами, а s символизирует строки. Этим главным управляющим символам могут предшествовать знаки, обеспечивающие тонкую настройку формата отображения. В дан- ном разделе мы рассмотрим только вариант тонкой настройки формати- рования чисел с плавающей запятой таким образом, чтобы отображалось определенное количество знаков после запятой, а значения в целом за- нимали указанное количество символов при выводе, что позволит фор- матировать их в виде аккуратных столбцов. С помощью спецификатора форматирования можно выполнить и другие преобразования выводимых значений, но их описание выходит за рамки этой книги. Итак, ограничить количество видимых знаков после запятой в числах с плавающей запятой можно, поставив точку и это значение непосред- ственно перед символом f в спецификаторе. Например, спецификатор .2f говорит о том, что при выводе значения на экран в нем должны остаться два знака после запятой, а спецификатор .7f предписывает наличие семи десятичных знаков. При ограничении количества знаков после запятой выполняется операция округления, тогда как лишние позиции дополня- ются нулями. Количество десятичных знаков не может быть указано при форматировании строковых или целочисленных значений. В то же время значения всех трех перечисленных типов данных могут быть отформатированы таким образом, чтобы они занимали минималь- ное количество знакомест. Для этого достаточно указать минимальную ширину значения в символах, что удобно при выполнении формати- рования данных в виде столбцов. Число, определяющее минимальную ширину значения при выводе, необходимо вставить в спецификаторе слева от символа d, i, f или s – перед точкой с ограничителем количества десятичных знаков, если таковые имеются. Например, спецификатор 8d говорит о том, что значение должно быть отформатировано как целое число и при выводе должно занимать минимум восемь знакомест, тогда как 6.2f предполагает в значении с плавающей запятой наличие двух зна- ков после запятой, а минимальное занимаемое место значением должно составлять шесть символов, включая дробную часть. При необходимости ведущие позиции при форматировании значений дополняются пробе- лами. После формирования правильного спецификатора к нему слева оста- ется добавить символ процента (%), что придаст ему законченный и кор- ректный вид. Обычно спецификаторы форматирования используются внутри строк, причем они могут занимать как всю строку, так и ее часть. Вот несколько примеров использования спецификаторов в строках: "%8d", "Сумма долга: %.2f" и "Привет, %s! Добро пожаловать к нам". Введение в программирование 21 Примечание. Язык программирования Python предлагает сразу несколько способов выполнения форматирования значений, включая использование форматирующего оператора (%), функцию и метод format, шаблонные строки и f-строки. На протяжении этой книги мы будем применять с данной целью форматирующий оператор, но вы вольны использовать любую из существующих техник. После создания спецификатора его можно использовать для форма- тирования значений. Строка, содержащая спецификатор, должна распо- лагаться слева от форматирующего оператора (%), а значение, которое требуется отформатировать, – справа. При выполнении оператора зна- чение, указанное справа от него, вставляется в строку слева (на место спецификатора с использованием указанных правил форматирования), в результате чего формируется итоговая строка. При этом все оставшиеся части строки, за исключением спецификатора, остаются неизменными. Допустимо осуществлять форматирование сразу нескольких значений в одной строке, разместив более одного спецификатора в тексте слева от форматирующего оператора. В этом случае значения для форматирова- ния справа от форматирующего оператора необходимо перечислить через запятую и заключить их в круглые скобки. Форматирование строк зачастую выполняется в рамках функции print. В следующем примере сначала на экран выводится значение переменной x с двумя знаками после запятой, а затем – целая фраза, форматирующая значения сразу из двух переменных. print("%.2f" % x) print("%s съел %d пирожков!" % (name, numCookies)) Некоторые другие варианты форматирования приведены в табл. 1.1. Переменные x, y и z предварительно были инициализированы значения- ми 12, –2,75 и «Andrew». Таблица 1.1. Форматирование значений в Python Фрагмент кода: Результат: Описание: "%d" % x "12" Значение из переменной x отображается в формате целого числа Фрагмент кода: Результат: Описание: "%f" % y "–2.75" Значение из переменной y отображается в формате числа с плавающей запятой Фрагмент кода: Результат: Описание: "%d и %f" % (x, y) "12 и –2.75" Значение из переменной x отображается в формате целого числа, а значение из переменной y отображается в формате числа с плаваю- щей запятой. Остальные символы в строке остаются без изменений 22 Упражнения Таблица 1.1 (окончание) Фрагмент кода: Результат: Описание: "%.4f" % x "12.0000" Значение из переменной x отображается в формате числа с плавающей запятой с четырьмя десятичными знаками Фрагмент кода: Результат: Описание: "%.1f" % y "–2.8" Значение из переменной y отображается в формате числа с плавающей запятой с одним десятичным знаком. При выводе значение будет округлено, поскольку изначально в переменной находится значение с большим количеством десятичных знаков Фрагмент кода: Результат: Описание: "%10s" % z " Andrew" Значение из переменной z отображается в формате строки, занимающей минимум десять знакомест. Поскольку в слове Andrew шесть букв, к результату добавится четыре ведущих пробела Фрагмент кода: Результат: Описание: "%4s" % z "Andrew" Значение из переменной z отображается в формате строки, занимающей минимум четыре знакоместа. Поскольку в слове Andrew шесть букв, результат окажется равен исходному значению переменной z Фрагмент кода: Результат: Описание: "%8i%8i" % (x, y) " 12 –2" Значения из переменных x и y отображаются в формате целого числа, занимающего минимум восемь знакомест. При этом были добавлены ведущие пробелы. При преобразовании значения переменной y в целочисленный тип его дробная часть была отброшена (а не округлена) 1.5. р аБота со строками Так же, как с числами, в Python можно манипулировать со строками при помощи специальных операторов и передавать их в функции в качестве аргументов. Самые распространенные операции, которые приходится вы- полнять со строковыми значениями, – это их конкатенация, определение длины строки и извлечение определенных символов и подстрок. Этим действиям и будет посвящен данный раздел. Информацию о других опе- рациях со строками в Python можно без труда найти в интернете. Строки в Python можно конкатенировать при помощи оператора сложе- ния (+). В результате строка, стоящая справа от оператора конкатенации, будет добавлена в конец строки, стоящей слева, с образованием нового строкового значения. Например, в представленном ниже фрагменте кода сначала запрашивается информация об имени и фамилии у пользователя, после чего собирается новое строковое значение, состоящее из фамилии Введение в программирование 23 и имени, разделенных запятой и пробелом. Полученный результат выво- дится на экран. # Запрашиваем у пользователя имя и фамилию first = input("Введите имя: ") last = input("Введите фамилию: ") # Конкатенируем строки both = last + ", " + first # Отображаем результат print(both) Количество символов в строке называется длиной строки. Это всегда положительное значение числового типа, и получить его можно при по- мощи функции len. На вход функция требует единственный строковый аргумент и возвращает его длину. Следующий пример демонстрирует применение функции len для определения длины имени человека: # Спрашиваем имя пользователя first = input("Введите имя: ") # Вычисляем длину строки num_chars = len(first) # Отображаем результат print("В вашем имени", num_chars, "символов") Иногда необходимо получить доступ к конкретным символам в строке. Например, вам может понадобиться извлечь первые символы из имени, отчества и фамилии пользователя, чтобы собрать инициалы. Каждый символ в строке имеет свой уникальный индекс. Первый сим- вол обладает индексом 0, а последний – индексом, равным длине строки минус один. Получить доступ к символу в строке по индексу можно, помес- тив его значение в квадратные скобки непосредственно после строковой переменной. В следующей программе демонстрируется отображение на экране инициалов человека: # Запрашиваем имя пользователя first = input("Введите имя: ") middle = input("Введите отчество: ") last = input("Введите фамилию: ") # Извлекаем первый символ из всех трех переменных и собираем их вместе initials = first[0] + middle[0] + last[0] # Выводим инициалы print("Ваши инициалы:", initials) Получить из строки несколько символов, стоящих подряд, можно, ука- зав два индекса в квадратных скобках, разделенных двоеточием. Эта опе- рация по-другому называется выполнением среза (slicing) строки. Исполь- 24 Упражнения зование срезов позволяет эффективно извлекать подстроки из строковых переменных. 1.6. у пражнения Задачи для самостоятельного выполнения, приведенные в данном разде- ле, помогут вам воплотить на практике знания, полученные в этой главе. И хотя это будут небольшие по размеру фрагменты кода, они должны стать важным шагом на пути к полноценным программам, которые вы будете писать в будущем. Упражнение 1. Почтовый адрес (Решено. 9 строк) Напишите несколько строк кода, выводящих на экран ваше имя и почто- вый адрес. Адрес напишите в формате, принятом в вашей стране. Ника- кого ввода от пользователя ваша первая программа принимать не будет, только вывод на экран и больше ничего. Упражнение 2. Приветствие (9 строк) Напишите программу, запрашивающую у пользователя его имя. В ответ на ввод на экране должно появиться приветствие с обращением по имени, введенному с клавиатуры ранее. Упражнение 3. Площадь комнаты (Решено. 13 строк) Напишите программу, запрашивающую у пользователя длину и ширину комнаты. После ввода значений должен быть произведен расчет площади комнаты и выведен на экран. Длина и ширина комнаты должны вводиться в формате числа с плавающей запятой. Дополните ввод и вывод единицами измерения, принятыми в вашей стране. Это могут быть футы или метры. Упражнение 4. Площадь садового участка (Решено. 15 строк) Создайте программу, запрашивающую у пользователя длину и ширину садового участка в футах. Выведите на экран площадь участка в акрах. Подсказка. В одном акре содержится 43 560 квадратных футов. Введение в программирование 25 Упражнение 5. Сдаем бутылки (Решено. 15 строк) Во многих странах в стоимость стеклотары закладывается определенный депозит, чтобы стимулировать покупателей напитков сдавать пустые бу- тылки. Допустим, бутылки объемом 1 литр и меньше стоят $0,10, а бутыл- ки большего объема – $0,25. Напишите программу, запрашивающую у пользователя количество бу- тылок каждого размера. На экране должна отобразиться сумма, которую можно выручить, если сдать всю имеющуюся посуду. Отформатируйте вывод так, чтобы сумма включала два знака после запятой и дополнялась слева символом доллара. Упражнение 6. Налоги и чаевые (Решено. 17 строк) Программа, которую вы напишете, должна начинаться с запроса у поль- зователя суммы заказа в ресторане. После этого должен быть произведен расчет налога и чаевых официанту. Вы можете использовать принятую в вашем регионе налоговую ставку для подсчета суммы сборов. В качестве чаевых мы оставим 18 % от стоимости заказа без учета налога. На выхо- де программа должна отобразить отдельно налог, сумму чаевых и итог, включая обе составляющие. Форматируйте вывод таким образом, чтобы все числа отображались с двумя знаками после запятой. Упражнение 7. Сумма первых n положительных чисел (Решено. 11 строк) Напишите программу, запрашивающую у пользователя число и подсчи- тывающую сумму натуральных положительных чисел от 1 до введенного пользователем значения. Сумма первых n положительных чисел может быть рассчитана по формуле: Упражнение 8. Сувениры и безделушки (15 строк) Интернет-магазин занимается продажей различных сувениров и безде- лушек. Каждый сувенир весит 75 г, а безделушка – 112 г. Напишите про- грамму, запрашивающую у пользователя количество тех и других покупок, после чего выведите на экран общий вес посылки. 26 Упражнения Упражнение 9. Сложные проценты (19 строк) Представьте, что вы открыли в банке сберегательный счет под 4 % годо- вых. Проценты банк рассчитывает в конце года и добавляет к сумме счета. Напишите программу, которая запрашивает у пользователя сумму перво- начального депозита, после чего рассчитывает и выводит на экран сумму на счету в конце первого, второго и третьего годов. Все суммы должны быть округлены до двух знаков после запятой. Упражнение 10. Арифметика (Решено. 22 строки) Создайте программу, которая запрашивает у пользователя два целых чис- ла a и b, после чего выводит на экран результаты следующих математи- ческих операций: сумма a и b; разница между a и b; произведение a и b; частное от деления a на b; остаток от деления a на b; десятичный логарифм числа a; результат возведения числа a в степень b. Подсказка. Функцию log10 вы найдете в модуле math. Упражнение 11. Потребление топлива (13 строк) В США потребление автомобильного топлива исчисляется в милях на галлон (miles-per-gallon – MPG). В то же время в Канаде этот показатель обычно выражается в литрах на 100 км (liters-per-hundred kilometers – L/100 km). Используйте свои исследовательские способности, чтобы опре- делить формулу перевода первых единиц исчисления в последние. После этого напишите программу, запрашивающую у пользователя показатель потребления топлива автомобилем в американских единицах и выводя- щую его на экран в канадских единицах. Упражнение 12. Расстояние между точками на Земле (27 строк) Как известно, поверхность планеты Земля искривлена, и расстояние меж- ду точками, характеризующимися одинаковыми градусами по долготе, может быть разным в зависимости от широты. Таким образом, для вычис- Введение в программирование 27 ления расстояния между двумя точками на Земле одной лишь теоремой Пифагора не обойтись. Допустим, (t 1 , g 1 ) и (t 2 , g 2 ) – координаты широты и долготы двух точек на поверхности Земли. Тогда расстояние в километрах между ними с учетом искривленности планеты можно найти по следующей формуле: distance = 6371,01´arccos(sin(t 1 )´sin(t 2 ) + cos(t 1 )´cos(t 2 )´cos(g 1 - g 2 )). Примечание. Число 6371,01 в этой формуле, конечно, было выбрано не случайно и представляет собой среднее значение радиуса Земли в километрах. Напишите программу, в которой пользователь будет вводить коорди- наты двух точек на Земле (широту и долготу) в градусах. На выходе мы должны получить расстояние между этими точками при следовании по кратчайшему пути по поверхности планеты. Подсказка. Тригонометрические функции в Python оперируют радианами. Таким образом, вам придется введенные пользователем величины из градусов перевести в радианы, прежде чем вычислять расстояние между точками. В модуле math есть удобная функция с названием radians-Функции:radians, служащая как раз для пере- вода градусов в радианы. Упражнение 13. Размен (Решено. 35 строк) Представьте, что вы пишете программное обеспечение для автомати- ческой кассы в магазине самообслуживания. Одной из функций, зало- женных в кассу, должен быть расчет сдачи в случае оплаты покупателем наличными. Напишите программу, которая будет запрашивать у пользователя сум- му сдачи в центах. После этого она должна рассчитать и вывести на экран, сколько и каких монет потребуется для выдачи указанной суммы, при ус- ловии что должно быть задействовано минимально возможное количест- во монет. Допустим, у нас есть в распоряжении монеты достоинством в 1, 5, 10, 25 центов, а также в 1 (loonie) и 2 (toonie) канадских доллара. Примечание. Монета номиналом в 1 доллар была выпущена в Канаде в 1987 году. Свое просторечное название (loonie) она получила от изображения полярной гагары (loon) на ней. Двухдолларовая монета, вышедшая девятью годами позже, была про- звана toonie, как комбинация из слов два (two) и loonie. 28 Упражнения Упражнение 14. Рост (Решено. 16 строк) Многие люди на планете привыкли рассчитывать рост человека в футах и дюймах, даже если в их стране принята метрическая система. Напишите программу, которая будет запрашивать у пользователя количество футов, а затем дюймов в его росте. После этого она должна пересчитать рост в сантиметры и вывести его на экран. Подсказка. Один фут равен 12 дюймам, а один дюйм – 2,54 см. Упражнение 15. Расстояние (20 строк) Для этого упражнения вам необходимо будет написать программу, кото- рая будет запрашивать у пользователя расстояние в футах. После этого она должна будет пересчитать это число в дюймы, ярды и мили и вывес- ти на экран. Коэффициенты для пересчета единиц вы без труда найдете в интернете. Упражнение 16. Площадь и объем (15 строк) Напишите программу, которая будет запрашивать у пользователя радиус и сохранять его в переменной r. После этого она должна вычислить пло- щадь круга с заданным радиусом и объем шара с тем же радиусом. Ис- пользуйте в своих вычислениях константу pi из модуля math. Подсказка. Площадь круга вычисляется по формуле area = πr 2 , а объем шара – по формуле volume = 4 3π r 3 Упражнение 17. Теплоемкость (Решено. 23 строки) Количество энергии, требуемое для повышения температуры одного грамма материала на один градус Цельсия, называется удельной тепло- емкостью материала и обозначается буквой C. Общее количество энергии (q), требуемое для повышения температуры m граммов материала на ΔT градусов Цельсия, может быть рассчитано по формуле: q = mCDT. Введение в программирование 29 Напишите программу, запрашивающую у пользователя массу воды и требуемую разницу температур. На выходе вы должны получить коли- чество энергии, которое необходимо добавить или отнять для достижения желаемого температурного изменения. Подсказка. Удельная теплоемкость воды равна 4,186 Дж г·С . Поскольку вода обладает плотностью 1 грамм на миллилитр, в данном упражнении можно взаимозаменять граммы и миллилитры. Расширьте свою программу таким образом, чтобы выводилась так- же стоимость сопутствующего нагрева воды. Обычно принято измерять элект ричество в кВт·ч, а не в джоулях. Для данного примера предположим, что электричество обходится нам в 8,9 цента за один кВт·ч. Используйте свою программу для подсчета стоимости нагрева одной чашки кофе. Подсказка. Для решения второй части задачи вам придется найти способ перевода единиц электричества между джоулями и кВт·ч. Упражнение 18. Объем цилиндра (15 строк) Объем цилиндра может быть рассчитан путем умножения площади круга, лежащего в его основе, на высоту. Напишите программу, в которой поль- зователь будет задавать радиус цилиндра и его высоту, а в ответ получать его объем, округленный до одного знака после запятой. Упражнение 19. Свободное падение (Решено. 15 строк) Напишите программу для расчета скорости объекта во время его сопри- косновения с землей. Пользователь должен задать высоту в метрах, с ко- торой объект будет отпущен. Поскольку объекту не будет придаваться ускорение, примем его начальную скорость за 0 м/с. Предположим, что ускорение свободного падения равно 9,8 м/с 2 . При известных начальной скорости (v i ), ускорении (a) и дистанции (d) можно вычислить скорость при соприкосновении объекта с землей по формуле 30 Упражнения Упражнение 20. Уравнение состояния идеального газа (19 строк) Уравнение состояния идеального газа представляет собой математиче- скую аппроксимацию поведения газов в условиях изменения давления, объема и температуры. Обычно соответствующая формула записывается так: PV = nRT, где P – это давление в паскалях, V – объем в литрах, n – количество ве- щества в молях, R – универсальная газовая постоянная, равная 8,314 Дж/(моль·К), а T – температура по шкале Кельвина. Напишите программу для измерения количества газа в молях при за- данных пользователем давлении, объеме и температуре. Проверьте свою программу путем вычисления количества газа в баллоне для дайвинга. Типичный баллон вмещает 12 л газа под давлением 20 000 000 Па (при- мерно 3000 фунтов на кв. дюйм). Температуру в комнате примем за 20° по шкале Цельсия или 68° по Фаренгейту. Подсказка. Чтобы перевести температуру из градусов Цельсия в Кельвины, необхо- димо прибавить к ней 273,15. Из Фаренгейта в Кельвины температура переводится путем вычитания из нее 32, умножения результата на 5 9 и прибавления тех же 273,15. Упражнение 21. Площадь треугольника (13 строк) Площадь треугольника может быть вычислена с использованием следую- щей формулы, где b – длина основания треугольника, а h – его высота: Напишите программу, в которой пользователь сможет вводить значе- ния для переменных b и h, после чего на экране будет отображена площадь треугольника с заявленными основанием и высотой. Упражнение 22. Площадь треугольника (снова) (16 строк) В предыдущем упражнении мы вычисляли площадь треугольника при из- вестных длинах его основания и высоты. Но можно рассчитать площадь Введение в программирование 31 и на основании длин всех трех сторон треугольника. Пусть s 1 , s 2 и s 3 – дли- ны сторон, а s = (s 1 + s 2 + s 3 )/2. Тогда площадь треугольника может быть вычислена по следующей формуле: Разработайте программу, которая будет принимать на вход длины всех трех сторон треугольника и выводить его площадь. Упражнение 23. Площадь правильного многоугольника (Решено. 14 строк) Многоугольник называется правильным, если все его стороны и углы рав- ны. Площадь такой фигуры можно вычислить по следующей формуле, в которой s – длина стороны, а n – количество сторон: Напишите программу, которая будет запрашивать у пользователя зна- чения переменных s и n и выводить на экран площадь правильного много- угольника, построенного на основании этих величин. Упражнение 24. Единицы времени (22 строки) Создайте программу, в которой пользователь сможет ввести временной промежуток в виде количества дней, часов, минут и секунд и узнать общее количество секунд, составляющее введенный отрезок. Упражнение 25. Единицы времени (снова) (Решено. 24 строки) В данном упражнении мы развернем ситуацию из предыдущей задачи. На этот раз вам предстоит написать программу, в которой пользователь будет вводить временной промежуток в виде общего количества секунд, после чего на экране должна быть показана та же длительность в формате D:HH:MM:SS, где D, HH, MM и SS – это количество дней, часов, минут и се- кунд соответственно. При этом последние три значения должны быть вы- ведены в формате из двух цифр, как мы привыкли видеть их на электрон- ных часах. Попробуйте узнать сами, какие символы необходимо ввести в спецификатор формата, чтобы при необходимости числа дополнялись слева не пробелами, а нулями. 32 Упражнения Упражнение 26. Текущее время (10 строк) Модуль time в Python включает в себя несколько очень полезных функций для работы со временем. Одна из таких функций – asctime – считывает текущее системное время компьютера и возвращает его в удобном для восприятия виде. Используйте эту функцию для отображения на экране текущей даты и времени. Никакого ввода от пользователя на этот раз вам не потребуется. Упражнение 27. Когда Пасха? (33 строки) Пасха традиционно празднуется в воскресенье, следующее за первым полнолунием после дня весеннего равноденствия. Поскольку здесь есть зависимость от фазы луны, фиксированной даты для этого праздника в григорианском календаре не существует. Фактически Пасха может вы- пасть на любую дату между 22 марта и 25 апреля. День и месяц Пасхи для конкретного года можно вычислить по следующему алгоритму: в переменную a запишите остаток от деления year на 19; в переменную b запишите частное от деления year на 100 с округле- нием вниз; в переменную c запишите остаток от деления year на 100; в переменную d запишите частное от деления b на 4 с округлением вниз; в переменную e запишите остаток от деления b на 4; в переменную f запишите результат вычисления формулы с округлением вниз; в переменную g запишите результат вычисления формулы с округлением вниз; в переменную h запишите остаток от деления выражения 19a + b - d - g + 15 на 30; в переменную i запишите частное от деления c на 4 с округлением вниз; в переменную k запишите остаток от деления c на 4; в переменную l запишите остаток от деления выражения 32 + 2e + 2i - h - k на 7; в переменную m запишите результат вычисления формулы с округлением вниз; Введение в программирование 33 установите месяц равным результату вычисления формулы установите день равным единице плюс остаток от деления выраже- ния h + l - 7m + 114 на 31. Напишите программу, реализующую этот алгоритм. Пользователь дол- жен ввести год, для которого его интересует дата Пасхи, и получить ответ на свой вопрос. Упражнение 28. Индекс массы тела (14 строк) Напишите программу для расчета индекса массы тела (body mass index – BMI) человека. Пользователь должен ввести свой рост и вес, после чего вы используете одну из приведенных ниже формул для определения индекса. Если пользователь вводит рост в дюймах, а вес в фунтах, формула будет следующей: Если же пользователь предпочитает вводить информацию о себе в сан- тиметрах и килограммах, формула упростится и станет такой: Упражнение 29. Температура с учетом ветра (Решено. 22 строки) Когда в прохладный день еще и дует ветер, температура кажется более низкой, чем есть на самом деле, поскольку движение воздушных масс способствует более быстрому охлаждению теплых предметов, к коим в данном случае можно отнести и человека. Этот эффект известен как охлаждение ветром. В 2001 году Канада, Великобритания и США договорились об исполь- зовании общей формулы для определения коэффициента охлаждения ветром. В формуле, приведенной ниже, T a – это температура воздуха в гра- дусах Цельсия, а V – скорость ветра в километрах в час. Похожие формулы с другими константами могут использоваться для вычисления коэффици- ента охлаждения ветром для температур, указанных в градусах по Фарен- гейту, и скорости ветра в милях в час или метрах в секунду. 34 Упражнения WCI = 13,12 + 0,6215T a - 11,37V 0,16 + 0,3965T a V 0,16 Напишите программу, которая будет запрашивать у пользователя тем- пературу воздуха и скорость ветра и выдавать рассчитанный коэффици- ент охлаждения ветром с округлением до ближайшего целого. Примечание. Принято считать, что коэффициент охлаждения ветром допустимо рас- считывать при температурах, меньших или равных 10 °С, и скорости ветра, превы- шающей 4,8 км/ч. Упражнение 30. Цельсий в Фаренгейт и Кельвин (17 строк) Напишите программу, которая будет запрашивать у пользователя значение температуры в градусах Цельсия и отображать эквивалентный показатель по шкалам Фаренгейта и Кельвина. Необходимые коэффициенты и фор- мулы для проведения расчетов нетрудно найти на просторах интернета. Упражнение 31. Единицы давления (17 строк) В данном задании вам предстоит написать программу, которая будет пе- реводить введенное пользователем значение давления в килопаскалях (кПа) в фунты на квадратный дюйм (PSI), миллиметры ртутного столба и атмосферы. Коэффициенты и формулы для перевода найдите само- стоятельно. Упражнение 32. Сумма цифр в числе (18 строк) Разработайте программу, запрашивающую у пользователя целое четы- рехзначное число и подсчитывающую сумму составляющих его цифр. На- пример, если пользователь введет число 3141, программа должна вывести следующий результат: 3 + 1 + 4 + 1 = 9. Упражнение 33. Сортировка трех чисел (Решено. 19 строк) Напишите программу, запрашивающую у пользователя три целых числа и выводящую их в упорядоченном виде – по возрастанию. Используйте функции min и max для нахождения наименьшего и наибольшего значений. Оставшееся число можно найти путем вычитания из суммы трех введен- ных чисел максимального и минимального. Введение в программирование 35 Упражнение 34. Вчерашний хлеб (Решено. 19 строк) Пекарня продает хлеб по $3,49 за буханку. Скидка на вчерашний хлеб со- ставляет 60 %. Напишите программу, которая будет запрашивать у пользо- вателя количество приобретенных вчерашних буханок хлеба. В вывод на экран должны быть включены обычная цена за буханку, цена со скидкой и общая стоимость приобретенного хлеба. Все значения должны быть вы- ведены на отдельных строках с соответствующими описаниями. Исполь- зуйте для вывода формат с двумя знаками после запятой и выровненным разделителем. |