Запустите следующие ячейку, чтобы иметь возможность запускать тесты. Эту операцию нужно проделывать каждый раз, когда вы перезапускаете ядро. Если какой-то из тестов говорит NameError: name 'Tester' is not defined
, нужно запустить эту ячейку ещё раз.
# Фабрика тестов для проверки программ, принимающих данные через input()
from collections import deque
class Tester(object):
def __init__(self, inp):
self.outputs = []
self.inputs = deque(inp)
def print(self, *args, sep = " ", end = "\n"):
text = sep.join(map(str, args)) + end
newlines = text.splitlines(keepends=True)
if self.outputs and self.outputs[-1] and self.outputs[-1][-1] != "\n" and newlines:
self.outputs[-1] += newlines[0]
self.outputs.extend(newlines[1:])
else:
self.outputs.extend(newlines)
def input(self, *args):
assert self.inputs, "Вы пытаетесь считать больше элементов, чем предусмотрено условием"
return self.inputs.popleft()
def __enter__(self):
global print
global input
print = self.print
input = self.input
return self.outputs
def __exit__(self, *args):
global print
global input
del print
del input
Напишите программу, которая просит пользователя последовательно ввести с клавиатуры два числа (каждое с новой строчки), число пройденных экзаменов и общее число экзаменов, и выводит на экран сообщение вида Пройдено 40.00% пути.
Число процентов должно представляться в виде целого числа; если оно дробное, то дробная часть должна отбрасываться.
Пример работы программы:
Ввод:
Введите число пройденных экзаменов: 2
Введите общее число экзаменов: 8
Вывод:
Пройдено 25 процентов пути.
def my_count():
### BEGIN SOLUTION
e = int(input('Введите число пройденных экзаменов: '))
t = int(input('Введите общее число экзаменов: '))
a = int(e / t * 100)
print('Пройдено %i процентов пути.' % a)
### END SOLUTION
my_count()
test_data = [
("6 8", ["Пройдено 75 процентов пути.\n"]),
("1 10", ["Пройдено 10 процентов пути.\n"]),
("2 8", ["Пройдено 25 процентов пути.\n"]),
("3 8", ["Пройдено 37 процентов пути.\n"])]
for inp, out in test_data:
with Tester(inp.split()) as t:
my_count()
assert len(t) == 1, "Вам нужно вывести ровно одну строку с ответом"
assert t == out, "Неверный ответ, была введена строка" + inp
Напишите программу col_music()
, которая просит пользователя ввести название цвета, и, если цвет равен yellow
, она выводит на экран строку "We all live in a yellow submarine", если green
, то "And the green grass grows all around, all around", если black
, то "Black night is not right". Если пользователь вводит какой-то другой цвет или один из перечисленных цветов в другом регистре или с опечатками, программа должна выводить на экран строку "Too hard. Make up something else."
Пример работы программы:
На входе:
Enter color: black
На выходе (вывод на экране):
Black night is not right
def col_music():
### BEGIN SOLUTION
c = input('Enter color: ')
if c == 'yellow':
print('We all live in a yellow submarine')
elif c == 'green':
print('And the green grass grows all around, all around')
elif c == 'black':
print('Black night is not right')
else:
print('Too hard. Make up something else')
### END SOLUTION
col_music()
Enter color: 4 Too hard. Make up something else
test_data = [
("black", ["Black night is not right\n"]),
("green", ["And the green grass grows all around, all around\n"]),
("yellow", ["We all live in a yellow submarine\n"]),
("Yellowe", ["Too hard. Make up something else\n"])]
for inp, out in test_data:
with Tester([inp]) as t:
col_music()
assert len(t) == 1, "Вам нужно вывести ровно одну строку с ответом"
assert t == out, "Неверный ответ, была введена строка " + inp
Впишите недостающий код в функцию make_double()
, которая принимает на вход некоторый список L
, а возвращает кортеж T
из двух списков: принятого на вход (старого) и преобразованного (нового). Преобразованный список представляет собой продублированный список, принятый на вход.
Пример работы программы:
На входе – список L
:
['a', 'b', 3]
На выходе – кортеж T
:
(['a', 'b', 3], ['a', 'b', 3, 'a', 'b', 3])
Ничего менять в готовом коде ниже не нужно, ваша задача – просто вписать строки, которые позволяют создать нужный кортеж T
.
L = ['a', 'b', 3]
def make_double(L):
### BEGIN SOLUTION
T = (L, L+L)
### END SOLUTION
return T
make_double(L)
(['a', 'b', 3], ['a', 'b', 3, 'a', 'b', 3])
assert make_double(['a', 'b', 3]) == (['a', 'b', 3], ['a', 'b', 3, 'a', 'b', 3]), "Ошибка при вводе " + str(['a', 'b', 3])
assert make_double([1, 0, 3, 3]) == ([1, 0, 3, 3], [1, 0, 3, 3, 1, 0, 3, 3]), "Ошибка при вводе " + str([1, 0, 3, 3])
assert make_double([-1, 6, 5, 9, 'q']) == ([-1, 6, 5, 9, 'q'], [-1, 6, 5, 9, 'q',-1, 6, 5, 9, 'q']), "Ошибка при вводе " + str(-1, 6, 5, 9, 'q')
Допишите недостающий код в функцию slov_find()
, которая принимает на вход два аргумента
w
)la
)и возвращает соответствующий перевод слова (res
). Считайте, что пользователь вводит слова из готового словаря my_dict
. Если введенного слова нет в словаре my_dict
, должна возвращаться строка res = "Слово не найдено"
.
Ничего в коде ниже менять не нужно, ваша задача – написать строки кода, которые присваивают переменной res
нужное значение в зависимости от выполнения условий.
Пример работы программы:
На входе:
w = "fant"
la = 1
slov_find(w, la)
На выходе:
'парень'
На входе:
w = "язык"
la = 2
slov_find(w, la)
На выходе:
'jezik'
На входе:
w = "открытка"
la = 2
slov_find(w, la)
На выходе:
'Слово не найдено'
w = input("Введите слово: ")
la = int(input("Введите число, 1 ‒ перевод со словенского на русский, 2 ‒ переводс русского на словенский: "))
def slov_find(w, la):
### BEGIN SOLUTION
back = {v:k for k, v in my_dict.items()}
if w in my_dict.items():
if la == 1:
res = my_dict(w)
if la == 2:
res = back(w)
else:
res = 'Слово не найдено'
### END SOLUTION
return res
slov_find(w, la)
Введите слово: 4 Введите число, 1 ‒ перевод со словенского на русский, 2 ‒ переводс русского на словенский: 2
'Слово не найдено'
my_dict = {'računalnik': 'компьютер',
'fant' : 'парень',
'sladoled' : 'мороженое',
'kosilo' : 'обед',
'jezik' : 'язык',
'hrbetnica' : 'позвоночник',
'enota' : 'урок'}
assert slov_find('fant', 1), "Ошибка при вводе слова " + "fant"
assert slov_find('računalnik', 1), "Ошибка при вводе слова " + "računalnik"
assert slov_find('sladoled', 1), "Ошибка при вводе слова " + "sladoled"
assert slov_find('урок', 2), "Ошибка при вводе слова " + "урок"
assert slov_find('обед', 2), "Ошибка при вводе слова " + "обед"
Допишите недостающий код в функцию my_count()
, которая принимает на вход целое число в формате строки (string) и,
{"сумма цифр" : 12, "произведение цифр": 27}
.Пользоваться готовой функцией sum()
можно. Для произведения можно импортировать библиотеку numpy
и взять оттуда функцию prod()
. Например, numpy.prod([1,6,7])
.
Ничего в коде ниже менять не нужно, ваша задача – написать строки кода, которые присваивают переменной res
нужное значение в зависимости от выполнения условий.
n = input("Введите целое число больше 0: ")
def my_count(n):
### BEGIN SOLUTION
if len(n) > 1:
n = [int(i) for i in list(n)]
s = sum(n)
import numpy
m = numpy.prod(n)
res = {'сумма цифр' : s, 'произведение цифр' : m}
else:
res = {}
### END SOLUTION
return res
my_count(n)
Введите целое число больше 0: 9
{}
assert my_count('325') == {'произведение цифр': 30, 'сумма цифр': 10}, "Ошибка при вводе числа 325"
assert my_count('111') == {'произведение цифр': 1, 'сумма цифр': 3}, "Ошибка при вводе числа 111"
assert my_count('45623') == {'произведение цифр': 720, 'сумма цифр': 20}, "Ошибка при вводе числа 45623"
Напишите программу, которая просит пользователя заполнить пропуски в предложениях (дописать фразовые глаголы), считает число правильных ответов и выводит сумму баллов из 10 (каждое предложение весит 1 балл).
Предложения с пропусками и недостающие предлоги сохранены в словаре answers
:
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 ___.
Напишите программу, которая выбирает первый пример из списка exer
и предлагает пользователю его решить. Если решение верное, то на экран выводится сообщение "Верно!" и программа предлагает пользователю решить следующий пример, если решение неверное, то на экран выводится сообщение "Попробуйте еще раз!" и программа предлагает пользователю решить тот же пример. Когда пользователь предлагает верное решение последнего примера, программа выводит на экран сообщение "Вы решили все примеры! Идите пить чай!" и останавливается.
Список exer
:
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
Верно!
Вы решили все примеры! Идите пить чай!
Поле чудес (почти)
Напишите программу-игру, которая делает следующее: загадывает слово и просит пользователя угадать его по первой и последней букве ("скелет" слова выводится на экран). Если пользователь угадал слово, на экран выводится сообщение "Так держать!", если нет ‒ сообщение вида "Подсказка: " и слово с двумя первыми буквами. Если пользователь опять не угадывает, выводится сообщение вида "Подсказка: " и слово с тремя первыми буквами и так далее, до тех пор, пока пользователь не угадает слово.
Для удобства приведен код, который залезает в txt-файл, в котором хранятся слова (каждое с новой строки), составляет из этих слов список и выбирает из них случайное. Скачайте файл и сохраните его в ту же папку, что и текущий ноутбук (иначе Python не найдет файл и выдаст ошибку No such file or directory
.
# список слов из файла 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())
word_list
# выбор случайного слова - используйте вторую строчку для выбора слова
from random import choice
rword = choice(word_list)
rword
Примеры работы программы:
Пример 1:
Угадайте слово: в _ _ _ а
Введите слово: вилка
Подсказка: вы _ _ а
Введите слово: вышка
Так держать!
Пример 2:
Угадайте слово: с _ _ _ _ я
Введите слово: сессия
Так держать!
Пример 3:
Угадайте слово: с _ _ _ _ _ ь
Введите слово: сырость
Подсказка: сл _ _ _ _ ь
Введите слово: слякоть
Подсказка: сло _ _ _ ь
Введите слово: словарь
Так держать!