{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Задания к курсу \"Технологии и языки программирования\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1) Напишите функцию, выполняющую умножение двух матриц, задаваемых вложенными списками:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def matrix_mul(m1, m2):\n", " pass # pass -- это оператор, который ничего не делает. Вмество него должен быть ваш код" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Например, результатом работы функции `matrix_mul(m1, m2)` для матриц \n", "\n", "`m1 = [ [1, 2, 3], [5, 5, 6] ]` и `m2 = [ [3, 2], [4, 2], [1, 1] ]`\n", "\n", "будет матрица\n", "\n", "`m1 = [ [14, 9], [41, 26] ]`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Игра \"Жизнь\"\n", "\n", "2) Напишите функцию `count_neighbours`, определяющую количество соседей клетки с координатами x, y, принадлежащей колонии. Колония клеток задается множеством пар координат (множеством кортежей). Координаты клетки - целые числа. \n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "У клетки с координатами (1, 1) 1 сосед(ей)\n" ] } ], "source": [ "# Глобальная переменная - список пар смещений координат соседей, включая смещение (0, 0). \n", "# Всего 9 пар. \n", "dxdy = [(dx,dy) for dx in range(-1,2) for dy in range(-1,2)]\n", " \n", "def count_neighbours(colony, cell):\n", " # Функция определяет количество соседей клетки с координатами\n", " # cell[0], cell[1], принадлежащей колонии colony\n", " # colony - множество пар координат клеток колонии\n", " # { (x1,y1), (x2,y2), ... }\n", " \n", " # получаем список значенией True/False (есть сосед/нет соседа)\n", " # для всех 8 граничащих клеток\n", " neighbors = [ (cell[0]+dx, cell[1]+dy) in colony for dx,dy in dxdy if dx!=0 or dy!=0]\n", " # Вычисляем количество соседей (при суммировании True превращается в 1,\n", " # а False в 0)\n", " return sum(neighbors) \n", " \n", "# Колония для тестирования работы функции\n", "colony = { (1,1), (2,1), (3,1) }\n", "\n", "# Количество соседей клетки с коодинатами (1,1)\n", "c = (1,1)\n", "n = count_neighbours(colony, c)\n", "\n", "print(\"У клетки с координатами\", c, n, \"сосед(ей)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3) Напишите функцию `get_colony_area(colony)`:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def get_colony_area(colony):\n", " pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Функция возвращающает множество координат живых клеток колонии и клеток, граничащих с колонией. Например, для колонии \n", "\n", "`colony = { (1,1), (2,1), (3,1) }`\n", "\n", "результатом работы функции будет множество (порядок клеток произвольный):\n", "\n", "`{ (0,1), (1,1), (2,1), (3,1), (4,1), (0,0), (1,0), (2,0), (3,0), (4,0), (0,2), (1,2), (2,2), (3,2), (4,2) }`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4) Напишите функцию `next_generation(colony)`:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def next_generation(colony):\n", " pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Функция определяет следующее поколение колонии. Например, для колонии\n", "\n", "`colony = { (1,1), (2,1), (3,1) }`\n", "\n", "результатом работы функции `next_generation(colony)` будет колония (порядок клеток произвольный):\n", "\n", "`{ (2,2), (2,1), (2,0) }`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "5) Напишите функцию, вычисляющую количество родившихся клеток и умерших клеток колонии:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def get_colony_stat(colony): \n", " pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Результат работы функции словарь вида: " ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "{'n_born': 3, 'n_survives': 1}" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "{'n_born': 3, 'n_survives': 1}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "6) Напишите функцию " ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def game_life( born = (3,), survives = (2,3) ):\n", " pass" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Функция возвращает ссылку на функцию типа `next_generation(colony)` (см. задание 4), которая будет определять следующее поколение колонии по правилам развития колонии, определяемым параметрами `born` и `survives`. Аргумент `survives` определяет количество соседей живой клетки, при котором клетка выжывает и переходит в следующее поколение. Аргумент `born` определяет количество живых клеток-соседей пусткой клетки, при котором происходит рождение новой клетки. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Продолжение следует..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Требования\n", "### Оформление\n", "1. Выполненные задания оформляются в виде \\*.py. \n", "2. Код должен быть подробно прокомментирован.\n", "3. В начале файла должены быть указаны имя автора и наименование задания:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'\\n\\n@author: Раскольников Родион\\n\\nЗадание 1. Умножение двух матрицы\\n\\n'" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "\"\"\"\n", "\n", "@author: Раскольников Родион\n", "\n", "Задание 1. Умножение двух матрицы\n", "\n", "\"\"\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Файл с заданием отправляется по электронной почте yudintsev@termech.ru или в группу ВК. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Сроки\n", "\n", "| Задания | Срок |\n", "| :-----------: |:-------------:|\n", "| 1...6 | 15 ноября |\n", "| 7 | |\n", "| 8 | |\n", "| 9 | |" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.5.2" } }, "nbformat": 4, "nbformat_minor": 1 }