{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Программирование и анализ данных\n", "\n", "*Алла Тамбовцева, НИУ ВШЭ*\n", "\n", "## Семинар по темам: кортежи и словари" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 1\n", "\n", "Дан словарь с названиями разных рептилий:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "rept = {\"python\" : \" питон\", \n", " \"anaconda\" : \"анаконда\", \n", " \"tortoize\" : \" черепаха\" }" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Добавьте в словарь пару \"snake\" - \" змея\".\n", "* Исправьте ключ \"tortoize\" на правильный \"tortoise\".\n", "* Выведите на экран сообщения вида\n", "\n", " Питон по-английски будет python.\n", "\n", "для всех слов в словаре (сообщение для каждого слова ‒ с новой строчки)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'python': ' питон', 'anaconda': 'анаконда', 'snake': 'змея', 'tortoise': 'черепаха'}\n" ] } ], "source": [ "# 1\n", "rept[\"snake\"] = \"змея\"\n", "\n", "# 2\n", "del rept[\"tortoize\"] # удаляем запись с неправильным ключом\n", "rept[\"tortoise\"] = \"черепаха\" # добавляем с правильным\n", "\n", "# проверяем\n", "print(rept)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Питон по-английски будет python.\n", "Анаконда по-английски будет anaconda.\n", "Змея по-английски будет snake.\n", "Черепаха по-английски будет tortoise.\n" ] } ], "source": [ "# 3\n", "for k, v in rept.items():\n", " print(f\"{v.strip().capitalize()} по-английски будет {k}.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 2\n", "\n", "В списке `cnt` хранятся названия стран, а в списке `fh` – значения индекса Freedom House для этих стран. Создайте словарь, используя в качестве ключей названия стран, а в качестве значений – значения индекса." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "cnt = [\"Andorra\", \"Belarus\", \"Denmark\", \n", " \"Kenya\", \"Jamaica\", \"Romania\"]\n", "fh = [1.0, 6.0, 1.0, 4.0, 2.5, 2.0]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'Andorra': 1.0, 'Belarus': 6.0, 'Denmark': 1.0, 'Kenya': 4.0, 'Jamaica': 2.5, 'Romania': 2.0}\n" ] } ], "source": [ "data = dict(zip(cnt, fh))\n", "print(data) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 3\n", "\n", "Дан список, состоящий из пар чисел:" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "pairs = [(2, 4), (4, 6), (0, 1), (5, 2), (9, 1), (3, 8)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Создайте словарь `calc`, где ключами являются пары чисел, а значениями – их произведение (произведение тоже должно считаться в Python, не в уме)." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{(2, 4): 8, (4, 6): 24, (0, 1): 0, (5, 2): 10, (9, 1): 9, (3, 8): 24}\n" ] } ], "source": [ "calc = {}\n", "for p in pairs:\n", " calc[p] = p[0] * p[1]\n", "print(calc) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "*Обратите внимание: если бы `pairs` был списком списков, то ничего бы не получилось – как мы обсуждали, изменяемые объекты не могут быть ключами в словаре.*" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "ename": "TypeError", "evalue": "unhashable type: 'list'", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m\u001b[0m\n\u001b[1;32m 4\u001b[0m \u001b[0;31m# не сработает, список – изменяемый\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 5\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mp\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mpairs2\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 6\u001b[0;31m \u001b[0mcalc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mp\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m*\u001b[0m \u001b[0mp\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 7\u001b[0m \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mcalc\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mTypeError\u001b[0m: unhashable type: 'list'" ] } ], "source": [ "pairs2 = [[2, 4], [4, 6], [0, 1], [5, 2], [9, 1], [3, 8]]\n", "calc = {}\n", "\n", "# не сработает, список – изменяемый\n", "for p in pairs2:\n", " calc[p] = p[0] * p[1]\n", "print(calc) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 4\n", "\n", "Дан словарь `grades` с оценками студентов за контрольную работу в 5-балльной шкале. Напишите код, который сделает следующее: \n", "\n", "* Выведет на экран имя каждого студента и его оценку (каждый студент – с новой строки).\n", "* Сохранит имена студентов, получивших отличные оценки, в список `excel`.\n", "* Сохранит имена студентов, получивших хорошие оценки, в список `good`.\n", "* Сохранит имена студентов, получивших удовлетворительные оценки, в список `satisf`.\n", "* Сохранит имена студентов, получивших плохие оценки, в список `bad`. " ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": [ "grades = {'Anna': 4, 'Bob': 3, 'Claire': 5, 'Dick': 2, 'Elena': 5, \n", " 'Fred': 5, 'George': 4, 'Kristina': 3, 'Nick': 2, \n", " 'Ursula': 4, 'Viktor': 5}" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Anna 4\n", "Bob 3\n", "Claire 5\n", "Dick 2\n", "Elena 5\n", "Fred 5\n", "George 4\n", "Kristina 3\n", "Nick 2\n", "Ursula 4\n", "Viktor 5\n" ] } ], "source": [ "# решение 1\n", "excel, good, satisf, bad = [], [], [], []\n", "\n", "for name, grade in grades.items():\n", " print(name, grade)\n", " if grade == 5:\n", " excel.append(name)\n", " if grade == 4:\n", " good.append(name)\n", " if grade == 3:\n", " satisf.append(name)\n", " if grade == 2:\n", " bad.append(name)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "['Claire', 'Elena', 'Fred', 'Viktor'] ['Anna', 'George', 'Ursula'] ['Bob', 'Kristina'] ['Dick', 'Nick']\n" ] } ], "source": [ "print(excel, good, satisf, bad)" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Anna 4\n", "Bob 3\n", "Claire 5\n", "Dick 2\n", "Elena 5\n", "Fred 5\n", "George 4\n", "Kristina 3\n", "Nick 2\n", "Ursula 4\n", "Viktor 5\n", "['Claire', 'Elena', 'Fred', 'Viktor'] ['Anna', 'George', 'Ursula'] ['Bob', 'Kristina'] ['Dick', 'Nick']\n" ] } ], "source": [ "# решение 2 – с elif\n", "excel, good, satisf, bad = [], [], [], []\n", "\n", "for name, grade in grades.items():\n", " print(name, grade)\n", " if grade == 5:\n", " excel.append(name)\n", " elif grade == 4:\n", " good.append(name)\n", " elif grade == 3:\n", " satisf.append(name)\n", " else:\n", " bad.append(name)\n", "print(excel, good, satisf, bad)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Anna 4\n", "Bob 3\n", "Claire 5\n", "Dick 2\n", "Elena 5\n", "Fred 5\n", "George 4\n", "Kristina 3\n", "Nick 2\n", "Ursula 4\n", "Viktor 5\n", "['Claire', 'Elena', 'Fred', 'Viktor'] ['Anna', 'George', 'Ursula'] ['Bob', 'Kristina'] ['Dick', 'Nick']\n" ] } ], "source": [ "# решение 3 – без .items()\n", "\n", "excel, good, satisf, bad = [], [], [], []\n", "\n", "for name in grades:\n", " print(name, grades[name])\n", " if grades[name] == 5:\n", " excel.append(name)\n", " elif grades[name] == 4:\n", " good.append(name)\n", " elif grades[name] == 3:\n", " satisf.append(name)\n", " else:\n", " bad.append(name)\n", "print(excel, good, satisf, bad)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "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.7.4" } }, "nbformat": 4, "nbformat_minor": 2 }