{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Программирование на языке Python для сбора и анализа данных\n", "\n", "*Семинары ведут: Щуров И.В., Будылин Р.Я., НИУ ВШЭ*\n", "\n", "Данный notebook является набором задач по курсу \n", "«Программирование на языке Python для сбора и анализа данных» \n", "(НИУ ВШЭ, 2014-15). Тексты задач взяты с сайта http://informatics.mccme.ru/. \n", "На [странице курса](http://math-info.hse.ru/s15/m) находятся другие материалы.\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Домашнее задание №2\n", "За разные задачи можно получить разное число баллов. Максимум за ДЗ можно набрать 14 баллов. Вы можете решить больше задач, чем требуется, чтобы набрать 14 баллов, чтобы подстраховаться.\n", "\n", "В задачах **A** и **B** вы можете использовать один из двух подходов к решению: либо использовать продвинутые средства Python для работы со списками, как это обсуждалось на лекции (включая срезы, присваивание срезам, метод `insert()`, функцию `del`), либо решать эти задачу «вручную», то есть пользоваться только присваиванием одного элемента списка другому элементу, добавлением элемента в конец с помощью `append()` и удалением элемента из конца с помощью `pop()`. В первом случае вы получите за эти задачи 1 балл, во втором случае (он технически сложнее и требует некоторых размышлений) — 2 балла.\n", "\n", "При решении задач **A** и **B** на два балла можно использовать один или два раза `split()` (исключительно для получения входного списка) и один раз `join()` для вывода итогового списка (если вы знаете, что это такое).\n", "\n", "### Подсказки\n", "- У срезов и функции `range` бывает третий аргумент, то есть можно сделать не только `A[1:10]`, но и `A[1:10:3]`, а также `range(1,10,3)`. Посмотрите, что получится.\n", "- Чтобы превратить строчку `\"1 2 45 hello\"` в список `['1', '2', '45', 'hello']`, можно использовать метод `split()` строки. Например:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "['1', '2', '45', 'hello']" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "s = \"1 2 45 hello\"\n", "s.split()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ограничения\n", "Во всех задачах **нельзя** использовать функции `sum`, `min`, `max`, а также какие-либо `import`." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### [Задача A](http://informatics.mccme.ru/mod/statements/view3.php?id=16876&chapterid=3169) (1-2 балла)\n", "\n", "
Дан список целых чисел, число k и значение C. Необходимо вставить в список на позицию с индексом k элемент, равный C, сдвинув все элементы имевшие индекс не менее k вправо.
Посколько при этом количество элементов в списке увеличивается, после считывания списка в его конец нужно будет добавить новый элемент, используя метод `append()`.
Вставку необходимо осуществлять уже в считанном списке, не делая этого при выводе и не создавая дополнительного списка.
\n", "Вводится список чисел. Все числа списка находятся на одной строке. На второй строке вводятся числа k и C.
\n", "Выведите ответ на задачу.
\n", "7 6 5 4 3 2 1\n", "2 0\n", "
7 6 0 5 4 3 2 1 \n", "
Дан список из чисел и индекс элемента в списке k. Удалите из списка элемент с индексом k, сдвинув влево все элементы, стоящие правее элемента с индексом k.
\n", "Программа получает на вход список, затем число k. Программа сдвигает все элементы, а после этого удаляет последний элемент списка при помощи метода `pop()`.
Программа должна осуществлять сдвиг непосредственно в списке, а не делать это при выводе элементов. Также нельзя использовать дополнительный список.
\n", "Выведите ответ на задачу.
\n", "7 6 5 4 3 2 1\n", "2\n", "
7 6 4 3 2 1 \n", "
Выведите все элементы списка с четными индексами\n",
"(то есть A[0]
, A[2]
, A[4]
, ...).
Программа должна быть эффективной и не выполнять лишних действий!
\n", "Вводится список чисел. Все числа списка находятся на одной строке.
\n", "Выведите ответ на задачу.
\n", "1 2 3 4 5\n", "
1 3 5 \n", "
Даны два целых числа A и B (при этом A≤B). Выведите все числа от A до B включительно.\n", "\n", "
Вводятся два целых числа.
\n", "Выведите ответ на задачу.
\n", "1\n", "10\n", "
1 2 3 4 5 6 7 8 9 10 \n", "
Дано 10 целых чисел. Вычислите их сумму. Напишите программу, использующую наименьшее число переменных.
\n", "Вводятся 10 целых чисел. Каждое число вводится в отдельной строке.
\n", "Выведите ответ на задачу.
\n", "0\n", "1\n", "2\n", "3\n", "4\n", "5\n", "6\n", "7\n", "8\n", "9\n", "
45\n", "
Дано несколько чисел. Вычислите их сумму. Сначала вводите количество чисел N, затем вводится ровно N целых чисел.\n", "Какое наименьшее число переменных нужно для решения этой задачи?
\n", "В первой строке вводится натуральное число N - количество чисел. В следующих N строках вводится по одному целому числу.
\n", "Выведите ответ на задачу.
\n", "2\n", "235\n", "56\n", "\n", "
291\n", "
По данному натуральном $n$ вычислите сумму \n", "$1^2+2^2+3^2+...+n^2$.\n", "\n", "
Вводится натуральное число.
\n", "Выведите ответ на задачу.
\n", "3\n", "
14\n", "
Вот ряд, в котором вычисляется значение дзета-функции для числа 2:\n", "\n", "$$\n", "\\frac{\\pi^2}{6} = \\frac{1}{1^2}+\\frac{1}{2^2}+\\frac{1}{3^2}+\\frac{1}{4^2}+ ...\n", "$$\n", "\n", "
\n", "\n", "Вычислите приближение к числу $\\pi$, используя первые 10 членов этого ряда.\n", "
\n", "Переставьте соседние элементы списка (A[0]
c A[1]
,\n",
"A[2]
c A[3]
и т.д.).\n",
"Если элементов нечетное число, то последний элемент остается на своем месте.
Вводится список чисел. Все числа списка находятся на одной строке.
\n", "Выведите ответ на задачу.
\n", "1 2 3 4 5\n", "
2 1 4 3 5 \n", "
По данному натуральном $n$ вычислите сумму $1!+2!+3!+...+n!$.\n", "В решении этой задачи можно использовать\n", "только один цикл и нельзя использовать `import`.
\n", "Вводится натуральное число n.
\n", "Выведите ответ на задачу.
\n", "3\n", "
9\n", "
Дано положительное действительное число X. Выведите его первую цифру после десятичной точки.\n", "При решении этой задачи нельзя пользоваться условной инструкцией и циклом.
\n", "Вводится положительное действительное число.
\n", "Выведите ответ на задачу.
\n", "1.79\n", "
7\n", "
Напишите программу, которая по данному числу n от 1 до 9 выводит на экран n пингвинов. Изображение одного пингвина\n", "имеет размер 5×9 символов, между двумя соседними пингвинами также имеется пустой (из пробелов) столбец. Разрешается\n", "вывести пустой столбец после последнего пингвина. Для упрощения рисования скопируйте пингвина из примера в среду\n", "разработки.\n", "\n", "
Вводится натуральное число.
\n", "Выведите ответ на задачу.
\n", "Учтите, что вывод данных на экран производится построчно, а не попингвинно.
\n", "В некоторых языках программирования символ обратного слэша “\\” в текстовых строках\n",
"\tимеет специальное значение. Чтобы включить в состав текстовой\n",
"\tстроки такой символ, его нужно повторить дважды. Например,\n",
"\tдля вывода на экран одного такого символа можно использовать\n",
"\tтакой код: print(\"\\\\\")
.
3\n", "
_~_ _~_ _~_ \n", " (o o) (o o) (o o) \n", " / V \\ / V \\ / V \\ \n", "/( _ )\\ /( _ )\\ /( _ )\\ \n", " ^^ ^^ ^^ ^^ ^^ ^^ \n", "
1\n", "
_~_ \n", " (o o) \n", " / V \\ \n", "/( _ )\\ \n", " ^^ ^^ \n", "