Содержит задачи из курса на платформе Stepik. Курс "Программирование на Python" https://stepik.org/course/67
3_class_balakirev // код из обучения Балакирева ООП
2_class// Вам дается последовательность целых чисел и вам нужно ее обработать и вывести на экран сумму первой пятерки чисел из этой последовательности, затем сумму второй пятерки, и т. д. Но последовательность не дается вам сразу целиком. С течением времени к вам поступают её последовательные части. Например, сначала первые три элемента, потом следующие шесть, потом следующие два и т. д. Реализуйте класс Buffer, который будет накапливать в себе элементы последовательности и выводить сумму пятерок последовательных элементов по мере их накопления. Одним из требований к классу является то, что он не должен хранить в себе больше элементов, чем ему действительно необходимо, т. е. он не должен хранить элементы, которые уже вошли в пятерку, для которой была выведена сумма.
Класс должен иметь следующий вид class Buffer: def init(self): # конструктор без аргументов def add(self, *a): # добавить следующую часть последовательности
def get_current_part(self):
# вернуть сохраненные в текущий момент элементы последовательности в порядке, в котором они были
# добавлены
Пример работы с классом buf = Buffer() buf.add(1, 2, 3) buf.get_current_part() # вернуть [1, 2, 3] buf.add(4, 5, 6) # print(15) – вывод суммы первой пятерки элементов buf.get_current_part() # вернуть [6] buf.add(7, 8, 9, 10) # print(40) – вывод суммы второй пятерки элементов buf.get_current_part() # вернуть [] buf.add(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) # print(5), print(5) – вывод сумм третьей и четвертой пятерки buf.get_current_part() # вернуть [1]
1_class//
Реализуйте класс MoneyBox, для работы с виртуальной копилкой. Каждая копилка имеет ограниченную вместимость, которая выражается целым числом – количеством монет, которые можно положить в копилку. Класс должен поддерживать информацию о количестве монет в копилке, предоставлять возможность добавлять монеты в копилку и узнавать, можно ли добавить в копилку ещё какое-то количество монет, не превышая ее вместимость. Класс должен иметь следующий вид
class MoneyBox: def init(self, capacity): # конструктор с аргументом – вместимость копилки
def can_add(self, v):
# True, если можно добавить v монет, False иначе
def add(self, v):
# положить v монет в копилку
При создании копилки, число монет в ней равно 0. Примечание: Гарантируется, что метод add(self, v) будет вызываться только если can_add(self, v) – True.
name_space//
Реализуйте программу, которая будет эмулировать работу с пространствами имен. Необходимо реализовать поддержку создания пространств имен и добавление в них переменных. В данной задаче у каждого пространства имен есть уникальный текстовый идентификатор – его имя. Вашей программе на вход подаются следующие запросы:
create – создать новое пространство имен с именем внутри пространства add – добавить в пространство переменную get – получить имя пространства, из которого будет взята переменная при запросе из пространства , или None, если такого пространства не существует Рассмотрим набор запросов
add global a create foo global add foo b create bar foo add bar a
Структура пространств имен описанная данными запросами будет эквивалентна структуре пространств имен, созданной при выполнении данного кода
a = 0 def foo(): b = 1 def bar(): a = 2 В основном теле программы мы объявляем переменную a, тем самым добавляя ее в пространство global. Далее мы объявляем функцию foo, что влечет за собой создание локального для нее пространства имен внутри пространства global. В нашем случае, это описывается командой create foo global. Далее мы объявляем внутри функции foo функцию bar, тем самым создавая пространство bar внутри пространства foo, и добавляем в bar переменную a.
Добавим запросы get к нашим запросам
get foo a get foo c get bar a get bar b
Представим как это могло бы выглядеть в коде
a = 0 def foo(): b = 1 get(a) get(c) def bar(): a = 2 get(a) get(b)
Результатом запроса get будет имя пространства, из которого будет взята нужная переменная. Например, результатом запроса get foo a будет global, потому что в пространстве foo не объявлена переменная a, но в пространстве global, внутри которого находится пространство foo, она объявлена. Аналогично, результатом запроса get bar b будет являться foo, а результатом работы get bar a будет являться bar.
Результатом get foo c будет являться None, потому что ни в пространстве foo, ни в его внешнем пространстве global не была объявлена переменная с.
Более формально, результатом работы get является
, если в пространстве была объявлена переменная get – результат запроса к пространству, внутри которого было создано пространство , если переменная не была объявлена None, если не существует , т. е. – это global Формат входных данных В первой строке дано число n (1 ≤ n ≤ 100) – число запросов. В каждой из следующих n строк дано по одному запросу. Запросы выполняются в порядке, в котором они даны во входных данных. Имена пространства имен и имена переменных представляют из себя строки длины не более 10, состоящие из строчных латинских букв.
Формат выходных данных Для каждого запроса get выведите в отдельной строке его результат.
Sample Input:
9 add global a create foo global add foo b get foo a get foo c create bar foo add bar a get bar a get bar b Sample Output:
global None bar foo
yandex_test//
Даны две строки строчных латинских символов: строка J и строка S. Символы, входящие в строку J, — «драгоценности», входящие в строку S — «камни». Нужно определить, какое количество символов из S одновременно являются «драгоценностями». Проще говоря, нужно проверить, какое количество символов из S входит в J. Это разминочная задача, к которой мы размещаем готовые решения. Она очень простая и нужна для того, чтобы вы могли познакомиться с нашей автоматической системой проверки решений. Ввод и вывод осуществляется через файлы, либо через стандартные потоки ввода-вывода, как вам удобнее. Формат ввода На двух первых строках входного файла содержатся две строки строчных латинских символов: строка J и строка S. Длина каждой не превосходит 100 символов. Формат вывода Выходной файл должен содержать единственное число — количество камней, являющихся драгоценностями.
tern_if// тернарный оператор, второй вариант: выражение (d > 0) - (d < 0) работает как функция sign, возвращая -1,0,1 в зависимости от знака числа d. Эти три возможных значения служат индексами символов в строке '=><'
list_f_sring_format//
#При вводе Марина Викторовна Иванова, отобразит Ивановна М.В.
bill_use_f_string//
Яблоки 3 $ 1.50 Хлеб 10 $15.00 Сыр 6 $13.50 Total: $30.00
football_dict_if_list//
Напишите программу, которая принимает на стандартный вход список игр футбольных команд с результатом матча и выводит на стандартный вывод сводную таблицу результатов всех матчей. За победу команде начисляется 3 очка, за поражение — 0, за ничью — 1. Формат ввода следующий: В первой строке указано целое число n — количество завершенных игр. После этого идет n строк, в которых записаны результаты игры в следующем формате: Первая_команда;Забито_первой_командой;Вторая_команда;Забито_второй_командой Вывод программы необходимо оформить следующим образом: Команда:Всего_игр Побед Ничьих Поражений Всего_очков Конкретный пример ввода-вывода приведён ниже. Порядок вывода команд произвольный.
Sample Input: 3 Спартак;9;Зенит;10 Локомотив;12;Зенит;3 Спартак;8;Локомотив;15
Sample Output: Спартак:2 0 0 2 0 Зенит:2 1 0 1 3 Локомотив:2 2 0 0 6
work_with_file_dict//
Дан файл с таблицей в формате TSV с информацией о росте школьников разных классов. Напишите программу, которая прочитает этот файл и подсчитает для каждого класса средний рост учащегося. Файл состоит из набора строк, каждая из которых представляет собой три поля: Класс Фамилия Рост Класс обозначается только числом. Буквенные модификаторы не используются. Номер класса может быть от 1 до 11 включительно. В фамилии нет пробелов, а в качестве роста используется натуральное число, но при подсчёте среднего требуется вычислить значение в виде вещественного числа. Выводить информацию о среднем росте следует в порядке возрастания номера класса (для классов с первого по одиннадцатый). Если про какой-то класс нет информации, необходимо вывести напротив него прочерк. В качестве ответа прикрепите файл с полученными данными о среднем росте.
Sample Input:
6 Вяххи 159 11 Федотов 172 7 Бондарев 158 6 Чайкина 153 Sample Output:
1 - 2 - 3 - 4 - 5 - 6 156.0 7 158.0 8 - 9 - 10 - 11 172.0
turtle//
Группа биологов в институте биоинформатики завела себе черепашку. После дрессировки черепашка научилась понимать и запоминать указания биологов следующего вида: север 10 запад 20 юг 30 восток 40 где первое слово — это направление, в котором должна двигаться черепашка, а число после слова — это положительное расстояние в сантиметрах, которое должна пройти черепашка. Но команды даются быстро, а черепашка ползёт медленно, и программисты догадались, что можно написать программу, которая определит, куда в итоге биологи приведут черепашку. Для этого программисты просят вас написать программу, которая выведет точку, в которой окажется черепашка после всех команд. Для простоты они решили считать, что движение начинается в точке (0, 0), и движение на восток увеличивает первую координату, а на север — вторую. Программе подаётся на вход число команд n, которые нужно выполнить черепашке, после чего n строк с самими командами. Вывести нужно два числа в одну строку: первую и вторую координату конечной точки черепашки. Все координаты целочисленные.
Sample Input: 4 север 10 запад 20 юг 30 восток 40 Sample Output: 20 -20
dict_check_word// Простейшая система проверки орфографии может быть основана на использовании списка известных слов. Если введённое слово не найдено в этом списке, оно помечается как "ошибка". Попробуем написать подобную систему. На вход программе первой строкой передаётся количество d известных нам слов, после чего на d строках указываются эти слова. Затем передаётся количество l строк текста для проверки, после чего l строк текста. Выведите уникальные "ошибки" в произвольном порядке. Работу производите без учёта регистра.
Sample Input: 4 champions we are Stepik 3 We are the champignons We Are The Champions Stepic Sample Output: stepic champignons the
encryption decryption// В какой-то момент в Институте биоинформатики биологи перестали понимать, что говорят информатики: они говорили каким-то странным набором звуков. В какой-то момент один из биологов раскрыл секрет информатиков: они использовали при общении подстановочный шифр, т.е. заменяли каждый символ исходного сообщения на соответствующий ему другой символ. Биологи раздобыли ключ к шифру и теперь нуждаются в помощи: Напишите программу, которая умеет шифровать и расшифровывать шифр подстановки. Программа принимает на вход две строки одинаковой длины, на первой строке записаны символы исходного алфавита, на второй строке — символы конечного алфавита, после чего идёт строка, которую нужно зашифровать переданным ключом, и ещё одна строка, которую нужно расшифровать.
Пусть, например, на вход программе передано: abcd d%# abacabadaba #%d% Это значит, что символ a исходного сообщения заменяется на символ * в шифре, b заменяется на d, c — на % и d — на #. Нужно зашифровать строку abacabadaba и расшифровать строку #*%d% с помощью этого шифра. Получаем следующие строки, которые и передаём на вывод программы: d%d#d dacabac
file_requests_next_lesson// Имеется набор файлов, каждый из которых, кроме последнего, содержит имя следующего файла. Первое слово в тексте последнего файла: "We". Скачайте предложенный файл. В нём содержится ссылка на первый файл из этого набора. Все файлы располагаются в каталоге по адресу: https://stepic.org/media/attachments/course67/3.6.3/ Загрузите содержимое последнего файла из набора, как ответ на это задание.
requests and Tranlation// load text, use requests, translate text en -> ru.
Нужно почитать ссылку: https://pythonru.com/biblioteki/parsing-na-python-s-beautiful-soup?ysclid=lfkqnuz5u4997695131
on line -> https://replit.com/
Про NumPy и matplotlib https://pyprog.pro/
work_with_file_2// Имеется файл с данными по успеваемости абитуриентов. Он представляет из себя набор строк, где в каждой строке записана следующая информация: Фамилия;Оценка_по_математике;Оценка_по_физике;Оценка_по_русскому_языку Поля внутри строки разделены точкой с запятой, оценки — целые числа. Напишите программу, которая считывает исходный файл с подобной структурой и для каждого абитуриента записывает его среднюю оценку по трём предметам на отдельной строке, соответствующей этому абитуриенту, в файл с ответом. Также вычислите средние баллы по математике, физике и русскому языку по всем абитуриентам и добавьте полученные значения, разделённые пробелом, последней строкой в файл с ответом. В качестве ответа на задание прикрепите полученный файл со средними оценками по каждому ученику и одной строкой со средними оценками по трём предметам.
Sample Input: Петров;85;92;78 Сидоров;100;88;94 Иванов;58;72;85
Sample Output: 85.0 94.0 71.666666667 81.0 84.0 85.666666667
find_word_count_2// Недавно мы считали для каждого слова количество его вхождений в строку. Но на все слова может быть не так интересно смотреть, как, например, на наиболее часто используемые. Напишите программу, которая считывает текст из файла (в файле может быть больше одной строки) и выводит самое частое слово в этом тексте и через пробел то, сколько раз оно встретилось. Если таких слов несколько, вывести лексикографически первое (можно использовать оператор < для строк). В качестве ответа укажите вывод программы, а не саму программу. Слова, написанные в разных регистрах, считаются одинаковыми.
find word count// Находим максимально встречающяеся слово в строке
open_write_file// На прошлой неделе мы сжимали строки, используя кодирование повторов. Теперь нашей задачей будет восстановление исходной строки обратно. Напишите программу, которая считывает из файла строку, соответствующую тексту, сжатому с помощью кодирования повторов, и производит обратную операцию, получая исходный текст. Запишите полученный текст в файл и прикрепите его, как ответ на это задание. В исходном тексте не встречаются цифры, так что код однозначно интерпретируем. Примечание. Это первое задание типа Dataset Quiz. В таких заданиях после нажатия "Start Quiz" у вас появляется ссылка "download your dataset". Используйте эту ссылку для того, чтобы загрузить файл со входными данными к себе на компьютер. Запустите вашу программу, используя этот файл в качестве входных данных. Выходной файл, который при этом у вас получится, надо отправить в качестве ответа на эту задачу.
Sample Input: a3b4c2e10b1 Sample Output: aaabbbbcceeeeeeeeeeb
lesson_2_dict// Когда Антон прочитал «Войну и мир», ему стало интересно, сколько слов и в каком количестве используется в этой книге. Помогите Антону написать упрощённую версию такой программы, которая сможет подсчитать слова, разделённые пробелом и вывести получившуюся статистику. Программа должна считывать одну строку со стандартного ввода и выводить для каждого уникального слова в этой строке число его повторений (без учёта регистра) в формате "слово количество" (см. пример вывода). Порядок вывода слов может быть произвольным, каждое уникальное слово должно выводиться только один раз.
Sample Input 1: a aa abC aa ac abc bcd a Sample Output 1: ac 1 a 2 abc 2 bcd 1 aa 2
dict_first_lesson // Напишите функцию update_dictionary(d, key, value), которая принимает на вход словарь dd и два числа: keykey и valuevalue. Если ключ keykey есть в словаре dd, то добавьте значение valuevalue в список, который хранится по этому ключу. Если ключа keykey нет в словаре, то нужно добавить значение в список по ключу 2 * key2∗key. Если и ключа 2 * key2∗key нет, то нужно добавить ключ 2 * key2∗key в словарь и сопоставить ему список из переданного элемента [value][value]. Требуется реализовать только эту функцию, кода вне её не должно быть. Функция не должна вызывать внутри себя функции input и print.
first_func // первый раз пробую объявлять функцию
saper // Напишите программу, на вход которой подаётся прямоугольная матрица в виде последовательности строк. После последней строки матрицы идёт строка, содержащая только строку "end" (без кавычек, см. Sample Input). Программа должна вывести матрицу того же размера, у которой каждый элемент в позиции i, j равен сумме элементов первой матрицы на позициях (i-1, j), (i+1, j), (i, j-1), (i, j+1). У крайних символов соседний элемент находится с противоположной стороны матрицы. В случае одной строки/столбца элемент сам себе является соседом по соответствующему направлению.
spiral // Выведите таблицу размером n×n, заполненную числами от 1 до n*n по спирали, выходящей из левого верхнего угла и закрученной по часовой стрелке