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