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-файл, в котором хранятся слова (каждое с новой строки), составляет из этих слов список и выбирает из них случайное. Скачайте файл и сохраните его в ту же папку, что и текущий ноутбук (иначе 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 умеет работать с медиа-файлами, но это не очень просто, поэтому давайте заменим звонок на 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 на экран
0
1
2

Пример работы программы:

LALALA
воочт
что
ах
Sorry, I will sing again!
LALALA
Ах, цветут каштаны на Елисейских полях!
Ах, цветут каштаны на Елисейских полях!
Ах, цветут каштаны на Елисейских полях!
STOP
In [ ]:
### YOUR CODE HERE ###