{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Python для сбора данных\n", "\n", "*Алла Тамбовцева, НИУ ВШЭ*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Дополнительное домашнее задание" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 1 (1 балл)\n", "\n", "Напишите программу, которая запрашивает у пользователя его баллы в дипломе через пробел и выводит на экран сводную информацию: GPA (средний балл), минимальный балл и максимальный балл, словарь с парами *тип оценки-число таких оценок*.\n", "\n", "Использовать встроенную функции `mean()`, `min()`, `max()`нельзя, но функции `sum()` и `sorted()`, а также метод `.count()` для списков можно.\n", "\n", "**Пример:**\n", "\n", "*Входные данные:*\n", "\n", " Введите ваши оценки: 8 9 10 10 7 6 6 5 8 9\n", "\n", "*Выходные данные:*\n", "\n", " GPA: 7.800000\n", " Минимальный балл: 5\n", " Максимальный балл: 10\n", " {5: 1, 6: 2, 7: 1, 8: 2, 9: 2, 10: 2}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "### YOUR CODE HERE ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 2 (1 балл)\n", "\n", "Напишите программу, которая просит пользователя заполнить пропуски в предложениях (дописать фразовые глаголы), считает число правильных ответов и выводит сумму баллов из 10 (каждое предложение весит 1 балл). \n", "\n", "Предложения с пропусками и недостающие предлоги сохранены в словаре `answers`:" ] }, { "cell_type": "code", "execution_count": 69, "metadata": {}, "outputs": [], "source": [ "answers = {\"She turned ___ the light so as to enjoy the darkness.\" : \"off\",\n", " \"It was so hot in the room, so she felt she was going to get ___.\" : \"down\",\n", " \"Mary turned right and came ___ her friend Peter.\" : \"across\", \n", " \"It will be very cold in the mountains, so put ___ all warm clothes you have.\" : \"on\", \n", " \"There was no morning when he did not come ___ with a great idea.\" : \"up\", \n", " \"I can't hear you properly, speak ___, please.\" : \"up\", \n", " \"Give ___ talking when I start to speak.\" : \"up\",\n", " \"We get ___ well with our neighbours, we never argue.\" : \"on\", \n", " \"Be careful, the plane is going to take ___.\" : \"off\",\n", " \"He was very sad while listening to the teacher who called him ___.\" : \"down\"}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Чтобы получить отступ в одну строку, в конце предыдущей строки можно поставить `\\n`, символ перехода на новую строку.\n", "\n", "**Пример:**\n", "\n", " Fill in the gaps in the sentences. \n", "\n", " We get ___ well with our neighbours, we never argue.\n", " Your answer: on\n", " She turned ___ the light so as to enjoy the darkness.\n", " Your answer: off\n", " I can't hear you properly, speak ___, please.\n", " Your answer: up\n", " Be careful, the plane is going to take ___.\n", " Your answer: off\n", " He was very sad while listening to the teacher who called him ___.\n", " Your answer: off\n", " There was no morning when he did not come ___ with a great idea.\n", " Your answer: up\n", " It will be very cold in the mountains, so put ___ all warm clothes you have.\n", " Your answer: on\n", " It was so hot in the room, so she felt she was going to get ___.\n", " Your answer: back\n", " Mary turned right and came ___ her friend Peter.\n", " Your answer: across\n", " Give ___ talking when I start to speak.\n", " Your answer: up\n", "\n", " Your score is: 8 out of 10\n", " You made mistakes in the following sentences: \n", " He was very sad while listening to the teacher who called him ___.\n", " It was so hot in the room, so she felt she was going to get ___." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "### YOUR CODE HERE ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 3 (1 балл)\n", "\n", "Напишите программу, которая выбирает первый пример из списка `exer` и предлагает пользователю его решить. Если решение верное, то на экран выводится сообщение \"Верно!\" и программа предлагает пользователю решить следующий пример, если решение неверное, то на экран выводится сообщение \"Попробуйте еще раз!\" и программа предлагает пользователю решить *тот же* пример. Когда пользователь предлагает верное решение последнего примера, программа выводит на экран сообщение \"Вы решили все примеры! Идите пить чай!\" и останавливается.\n", "\n", "Список `exer`:" ] }, { "cell_type": "code", "execution_count": 79, "metadata": {}, "outputs": [], "source": [ "exer = [\"4^2+3*8\", \"25+4^3*5\", \"36^0.5+12\", \"34-12*3^2\", \"2^3+16^0.5-1\", \"8*0-2^8\"]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Подсказка:** создайте список ответов на примеры, а затем словарь соотвествий.\n", "\n", "**Пример работы программы:**\n", "\n", " Решите пример \n", "\n", " 34-12*4^2\n", " -74\n", " Верно! \n", "\n", " Решите пример \n", "\n", " 8*0-2^8\n", " 0\n", " Попробуйте еще раз! \n", "\n", " -256\n", " Верно! \n", "\n", " Решите пример \n", "\n", " 25+4^3*5\n", " 345\n", " Верно! \n", "\n", " Решите пример \n", "\n", " 4^2+3*8\n", " 7\n", " Попробуйте еще раз! \n", "\n", " 40\n", " Верно! \n", "\n", " Решите пример \n", "\n", " 36^0.5+12\n", " 18\n", " Верно! \n", "\n", " Решите пример \n", "\n", " 2^3+16^0.5-1\n", " 11\n", " Верно! \n", "\n", " Вы решили все примеры! Идите пить чай!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "### YOUR CODE HERE ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 4 (1 балл)\n", "\n", "Дан словарь `prods`, записи в котором представляют собой пары товар-стоимость. Напишите программу, которая просит пользователя ввести число – имеющуюся у него сумму денег, затем перечень товаров, какие он хочет купить (через запятую, без пробелов), и:\n", "\n", "* в случае, если имеющихся средств достаточно, программа выдает сообщение вида \"Отлично! Ваша сдача n рублей.\"\n", "* в случае, если имеющихся средств недостаточно, программа выдает сообщение вида \"Не достаточно средств. Не хватает n рублей.\"\n", "\n", "Считайте, что пользователь всегда вводит те названия, которые есть в \"магазине\" (в словаре `prods`) и вводит их без опечаток и в нужном регистре.\n", "\n", "**Пример:**\n", "\n", "*Входные данные:*\n", "\n", " Введите имеющуюся сумму денег: 100\n", " Введите перечень товаров через запятую: бананы,кефир\n", "\n", "*Выходные данные:*\n", "\n", " Не достаточно средств. Не хватает 56 рублей.\n", "\n", "*Входные данные:*\n", "\n", " Введите имеющуюся сумму денег: 200\n", " Введите перечень товаров через запятую: колбаса Докторская\n", "\n", "*Выходные данные:*\n", "\n", " Отлично! Ваша сдача 75 рублей." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "prods = {\"батон Нарезной\": 28, \n", " \"масло сливочное\": 60, \n", " \"Кока-кола\": 45, \n", " \"шоколадка Алёнка\": 82, \n", " \"халва арахисовая\": 112, \n", " \"мука пшеничная Макфа\": 78, \n", " \"колбаса Докторская\": 125, \n", " \"сыр Гауда\": 187, \n", " \"молоко\": 64, \n", " \"кефир\": 70, \n", " \"бананы\": 86, \n", " \"помидоры\": 92}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "### YOUR CODE HERE ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 5 (2 балла)\n", "\n", "Выполните задачу 4, но с учетом того, что пользователь может ошибаться при вводе названий.\n", "\n", "1) Если ошибка только в регистре (пользователь ввел `шоколадка алёнка` вместо `шоколадка Алёнка`), программа должна понимать, что имел в виду пользователь, то есть работать без ошибок\n", "\n", "2) Если какое-то название введено с ошибкой (или такого наименования нет в словаре), на экран должно выводиться сообщение вида `Проверьте название X. Такого товара нет в магазине.` и исполнение программы должно останавливаться." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "### YOUR CODE HERE ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 5 (2 балла)\n", "\n", "*Поле чудес (почти)*\n", "\n", "Напишите программу-игру, которая делает следующее: загадывает слово и просит пользователя угадать его по первой и последней букве (\"скелет\" слова выводится на экран). Если пользователь угадал слово, на экран выводится сообщение \"Так держать!\", если нет ‒ сообщение вида \"Подсказка: \" и слово с двумя первыми буквами. Если пользователь опять не угадывает, выводится сообщение вида \"Подсказка: \" и слово с тремя первыми буквами и так далее, до тех пор, пока пользователь не угадает слово.\n", "\n", "Для удобства приведен код, который залезает в txt-файл, в котором хранятся слова (каждое с новой строки), составляет из этих слов список и выбирает из них случайное. Скачайте [файл](http://math-info.hse.ru/f/2017-18/py-prog/words.txt) и сохраните его в ту же папку, что и текущий ноутбук (иначе Python не найдет файл и выдаст ошибку `No such file or directory`." ] }, { "cell_type": "code", "execution_count": 115, "metadata": {}, "outputs": [], "source": [ "# список слов из файла words.txt\n", "word_list = []\n", "with open('words.txt') as f: # or whatever the wordlist is saved as\n", " for line in f.readlines():\n", " word_list.append(line.strip())" ] }, { "cell_type": "code", "execution_count": 116, "metadata": {}, "outputs": [], "source": [ "# выбор случайного слова - используйте вторую строчку для выбора слова\n", "from random import choice\n", "rword = choice(word_list)\n", "rword" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Пример работы программы:**\n", "\n", "*Пример 1:*\n", "\n", " Угадайте слово: в _ _ _ а\n", " Введите слово: вилка\n", " Подсказка: вы _ _ а\n", " Введите слово: вышка\n", " Так держать!\n", " \n", "*Пример 2:* \n", " \n", " Угадайте слово: с _ _ _ _ я\n", " Введите слово: сессия\n", " Так держать!\n", " \n", "*Пример 3:* \n", "\n", " Угадайте слово: с _ _ _ _ _ ь\n", " Введите слово: сырость\n", " Подсказка: сл _ _ _ _ ь\n", " Введите слово: слякоть\n", " Подсказка: сло _ _ _ ь\n", " Введите слово: словарь\n", " Так держать!" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "### YOUR CODE HERE ###" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Задача 7 (2 балла)\n", "\n", "*Вредный таймер*\n", "\n", "Представьте, что ваша программа умеет воспроизодить музыкальные композиции (Python [умеет](https://wiki.python.org/moin/Audio/) работать с медиа-файлами, но это не очень просто, поэтому давайте заменим звонок на `print(\"LALALA)`). \n", "\n", "Напишите программу, которая будет \"играть\" мелодию каждую минуту, пока пользователь не \"выключит\" ее. При этом она будет выводить на экран сообщение `Sorry, I will sing again!`. Чтобы \"выключить программу\", нужно трижды ввести \"Ах, цветут каштаны на Елисейских полях!\". Когда программа остановится, она должна вывести сообщение `STOP`.\n", "\n", "**Подсказка:** чтобы выставить задержку по времени, можно импортировать функцию `sleep` из модуля `time`:" ] }, { "cell_type": "code", "execution_count": 163, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0\n", "1\n", "2\n" ] } ], "source": [ "from time import sleep\n", "\n", "for i in range(3):\n", " sleep(5)\n", " print(i)\n", " # ждать 5 секунд прежде чем вывести i на экран" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Пример работы программы:**\n", "\n", " LALALA\n", " воочт\n", " что\n", " ах\n", " Sorry, I will sing again!\n", " LALALA\n", " Ах, цветут каштаны на Елисейских полях!\n", " Ах, цветут каштаны на Елисейских полях!\n", " Ах, цветут каштаны на Елисейских полях!\n", " STOP" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "### YOUR CODE HERE ###" ] } ], "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.6.8" } }, "nbformat": 4, "nbformat_minor": 2 }