Python, как второй язык программирования
Gusarev (обсуждение | вклад) |
Gusarev (обсуждение | вклад) (→Находим скрытый текст (10.03.2021)) |
||
(не показаны 48 промежуточных версий 1 участника) | |||
Строка 13: | Строка 13: | ||
|- | |- | ||
| [https://code.visualstudio.com/ Среда программирования на Python] | | [https://code.visualstudio.com/ Среда программирования на Python] | ||
+ | |||
+ | |- | ||
+ | | [http://wiki.school.ioffe.ru/images/f/f9/Verdict.pdf Вердикты тестирующей системы и их описание] | ||
+ | |||
+ | |- | ||
+ | | Python: стандартный PEP-8 (Python Enhancement Proposal) [https://www.python.org/dev/peps/pep-0008/ официальная страница (англ.)], [https://pep8.ru/doc/pep8/ один из урезанных переводов, если англ. совсем никак] | ||
+ | |||
|} | |} | ||
Строка 19: | Строка 26: | ||
{| | {| | ||
+ | ! style="text-align:left;width:300px;"| Тема | ||
+ | ! style="text-align:left;width:300px;"|Ссылка для входа | ||
+ | ! style="text-align:left;width:500px;"|Критерии оценивания и замечания | ||
+ | |||
+ | |||
|- | |- | ||
− | | [http://prog.school.ioffe.ru/python_as_2nd/01-calc-int.pdf Целочисленная арифметика] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=203 Вход в тестирующую систему (контест 203)] | + | | [http://prog.school.ioffe.ru/python_as_2nd/01-calc-int.pdf Целочисленная арифметика] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=203 Вход в тестирующую систему (контест 203)] || любые 7 задач |
|- | |- | ||
− | | [http://prog.school.ioffe.ru/python_as_2nd/02-if.pdf Условия] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=204 Вход в тестирующую систему (контест 204)] | + | | [http://prog.school.ioffe.ru/python_as_2nd/02-if.pdf Условия] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=204 Вход в тестирующую систему (контест 204)] || любые 7 задач |
|- | |- | ||
− | | [http://prog.school.ioffe.ru/python_as_2nd/04-cycle-for.pdf Цикл for] | + | | [http://prog.school.ioffe.ru/python_as_2nd/04-cycle-for.pdf Цикл for] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=205 Вход в тестирующую систему (контест 205)] || любые 7 задач |
|- | |- | ||
− | | [http://prog.school.ioffe.ru/python_as_2nd/05-cycle-while.pdf Цикл while] | + | | [http://prog.school.ioffe.ru/python_as_2nd/05-cycle-while.pdf Цикл while] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=206 Вход в тестирующую систему (контест 206)] || любые 7 задач |
|- | |- | ||
− | | [http://prog.school.ioffe.ru/python_as_2nd/06-string-slices.pdf Строки, срезы и некоторые методы работы со строками] | + | | [http://prog.school.ioffe.ru/python_as_2nd/06-string-slices.pdf Строки, срезы и некоторые методы работы со строками] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=207 Вход в тестирующую систему (контест 207)] || любые 7 задач |
|- | |- | ||
− | | [http://prog.school.ioffe.ru/python_as_2nd/07-string.pdf Строки и циклы] | + | | [http://prog.school.ioffe.ru/python_as_2nd/07-string.pdf Строки и циклы] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=208 Вход в тестирующую систему (контест 208)] || любые 7 задач |
+ | |||
+ | |- | ||
+ | | [http://prog.school.ioffe.ru/python_as_2nd/08-array.pdf Массивы] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=209 Вход в тестирующую систему (контест 209)] || любые 7 задач | ||
+ | |||
+ | |- | ||
+ | | [http://prog.school.ioffe.ru/python_as_2nd/09-func.pdf Функции и рекурсия] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=210 Вход в тестирующую систему (контест 210)] || любые 7 задач | ||
+ | |||
+ | |- | ||
+ | | [http://prog.school.ioffe.ru/python_as_2nd/10-set.pdf Множества] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=211 Вход в тестирующую систему (контест 211)] || любые 7 задач | ||
+ | |||
+ | |- | ||
+ | | [http://prog.school.ioffe.ru/python_as_2nd/11-dict.pdf Словари] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=212 Вход в тестирующую систему (контест 212)] || любые 7 задач | ||
+ | |||
+ | |- | ||
+ | | [http://prog.school.ioffe.ru/python_as_2nd/12-files.pdf Файлы] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=213 Вход в тестирующую систему (контест 213)] || любые 7 задач | ||
+ | |||
+ | |- | ||
+ | | [http://prog.school.ioffe.ru/python_as_2nd/13-numpy.pdf Numpy] || [https://prog.school.ioffe.ru/cgi-bin/new-client?contest_id=214 Вход в тестирующую систему (контест 214)] || Решите штук 10 первых задач и смотрите в конец листка на задачи с изображениями. | ||
+ | |||
|} | |} | ||
Строка 43: | Строка 74: | ||
=== Начало — бегло про python (27.01.2021) === | === Начало — бегло про python (27.01.2021) === | ||
− | [http://prog.school.ioffe.ru/python_as_2nd/ | + | <source lang="python"> |
+ | a = 34 | ||
+ | b = 5 | ||
+ | print(a + b, a - b, a * b, a // b, a / b, a % b, a ** b) | ||
+ | |||
+ | a = 15.8 | ||
+ | b = 3.7 | ||
+ | print(a // b, a % b) | ||
+ | |||
+ | a = int(input()) | ||
+ | b = int(input()) | ||
+ | print(f'a = {a}, b = {b}, a + b = {a + b:10}') | ||
+ | |||
+ | a = True | ||
+ | b = False | ||
+ | |||
+ | x = int(input()) | ||
+ | d = 2 | ||
+ | while d * d <= x: | ||
+ | if x % d == 0: | ||
+ | print('composite') | ||
+ | break | ||
+ | d += 1 | ||
+ | else: | ||
+ | print('prime') | ||
+ | |||
+ | for k in range(5): | ||
+ | print(k, end = ' ') | ||
+ | # print('Hello!') | ||
+ | |||
+ | print() | ||
+ | |||
+ | s = "dlkjh gqerg!$" | ||
+ | for ch in s: | ||
+ | print(ch.upper(), end = ' ') | ||
+ | |||
+ | s = "Ax" * 0 | ||
+ | print(s) | ||
+ | |||
+ | s = 'R' | ||
+ | print(ord(s), chr(109)) | ||
+ | |||
+ | s1 = input() | ||
+ | s2 = input() | ||
+ | print(s1 > s2) | ||
+ | s[0] = '4' # так нельзя | ||
+ | |||
+ | t = list() | ||
+ | x = [] | ||
+ | x = [4444, 3, 4, 5, 99] | ||
+ | print(x) | ||
+ | a = x.pop() | ||
+ | print(a, x) | ||
+ | x.append(3546) | ||
+ | print(x) | ||
+ | x.sort() | ||
+ | print(x) | ||
+ | |||
+ | t = tuple() | ||
+ | x = (4, 5, 6, 7) | ||
+ | y = (67, ) | ||
+ | |||
+ | x = set() | ||
+ | x = {4, 6, 2, 5, 8, 9} | ||
+ | for elem in x: | ||
+ | print(elem) | ||
+ | print(x) | ||
+ | |||
+ | mutable | ||
+ | immutable | ||
+ | d = {'Vova': 5, 'Anya': 5, 'Roma': 2} | ||
+ | print(d) | ||
+ | d['Vova'] = 4 | ||
+ | print(d) | ||
+ | d['Masha'] = 4 | ||
+ | print(d) | ||
+ | print(d['Vasya']) | ||
+ | |||
+ | |||
+ | name = input() | ||
+ | surname = input() | ||
+ | print(name + ' ' + surname) | ||
+ | |||
+ | def factorial(n): | ||
+ | if n <= 1: | ||
+ | return 1 | ||
+ | return n * factorial(n - 1) | ||
+ | |||
+ | print(factorial(0)) | ||
+ | </source> | ||
+ | |||
+ | === Работа с файлами (10.02.2021) === | ||
+ | |||
+ | <source lang="python"> | ||
+ | # читаем файл целиком (в строку) | ||
+ | with open('input_data.in') as f_in, open('input_data.copy', 'w') as f_out: | ||
+ | # f_out.write(f_in.read()) | ||
+ | print(f_in.read(), file=f_out) | ||
+ | |||
+ | |||
+ | # читаем файл целиком (в массив строк) | ||
+ | with open('input_data.in') as f_in, open('input_data.copy', 'w') as f_out: | ||
+ | x = f_in.readlines() | ||
+ | print(x) | ||
+ | for line in f_in.readlines(): | ||
+ | print(sum(map(int, line.split())), file=f_out) | ||
+ | |||
+ | # читаем файл построчно — 1 вариант | ||
+ | with open('input_data.in') as f_in, open('input_data.copy', 'w') as f_out: | ||
+ | for line in f_in: | ||
+ | print(sum(map(int, line.split())), file=f_out) | ||
+ | |||
+ | # читаем файл построчно — 2 вариант | ||
+ | with open('input_data.in') as f_in: | ||
+ | line = f_in.readline() | ||
+ | line_num = 1 | ||
+ | s = sum(map(int, line.split())) | ||
+ | print(s, line_num) | ||
+ | while line != '' and s < 4000: | ||
+ | line_num += 1 | ||
+ | s += sum(map(int, line.split())) | ||
+ | print(s, line_num) | ||
+ | line = f_in.readline() | ||
+ | |||
+ | # читаем файл посимвольно | ||
+ | char_2_search = input() | ||
+ | with open('pg5396.txt') as f_in: | ||
+ | found = False | ||
+ | ch = f_in.read(2) | ||
+ | while ch != '': | ||
+ | if ch == char_2_search: | ||
+ | found = True | ||
+ | break | ||
+ | ch = f_in.read(1) | ||
+ | |||
+ | print('YES' if found else 'NO') | ||
+ | |||
+ | # последовательно читаем разными методами | ||
+ | with open('partly_read.txt') as f_in: | ||
+ | s = f_in.read(5) | ||
+ | # print(f_in.readline()) | ||
+ | # for row in f_in: | ||
+ | # print(row) | ||
+ | # break | ||
+ | print(f_in.readlines()) | ||
+ | # print(f_in.read()) | ||
+ | |||
+ | </source> | ||
+ | |||
+ | === Как писать telegram-bot (17.02.2021) === | ||
+ | |||
+ | [https://core.telegram.org/bots Документация telegram — что такое bot, как он устроен и что нужно сделать, чтобы его написать] <br> | ||
+ | [https://github.com/python-telegram-bot/python-telegram-bot API для написания telegram-bot на Python (telegram.ext)] | ||
+ | <br> | ||
+ | Домашка: | ||
+ | <ul> | ||
+ | <li> Сделать себе токен, пообщавшись в Botfather. И никому его не показывать.<br> | ||
+ | <li> Написать бота, который только стартует. Можно поменять строку приветствия, это хотите. | ||
+ | |||
+ | === Пример минимального бота и обработка URL-запросов (24.02.2021) === | ||
+ | |||
+ | <source lang="python"> | ||
+ | from telegram.ext import Updater, CommandHandler, MessageHandler, Filters | ||
+ | # import logging | ||
+ | |||
+ | |||
+ | def start(update, context): | ||
+ | context.bot.send_message(chat_id=update.effective_chat.id, text="I'm a bot, please talk to me!") | ||
+ | |||
+ | |||
+ | def help_(update, context): | ||
+ | msg = '''This simple bot written just to check the basic environment''' | ||
+ | context.bot.send_message(chat_id=update.effective_chat.id, text=msg) | ||
+ | |||
+ | |||
+ | def test_(update, context): | ||
+ | msg = '''test message''' | ||
+ | context.bot.send_message(chat_id=update.effective_chat.id, text=msg) | ||
+ | |||
+ | |||
+ | def unknown(update, context): | ||
+ | context.bot.send_message(chat_id=update.effective_chat.id, text="Sorry, I didn't understand that command.") | ||
+ | |||
+ | # тут вместо многоточия надо вставить ваш токен, который вы получили, пообщавшись с FatherBot | ||
+ | updater = Updater(token='...', use_context=True) | ||
+ | |||
+ | dispatcher = updater.dispatcher | ||
+ | |||
+ | start_handler = CommandHandler('start', start) | ||
+ | dispatcher.add_handler(start_handler) | ||
+ | |||
+ | help_handler = CommandHandler('help', help_) | ||
+ | dispatcher.add_handler(help_handler) | ||
+ | |||
+ | test_handler = CommandHandler('test', test_) | ||
+ | dispatcher.add_handler(test_handler) | ||
+ | |||
+ | unknown_handler = MessageHandler(Filters.command, unknown) | ||
+ | dispatcher.add_handler(unknown_handler) | ||
+ | |||
+ | updater.start_polling() | ||
+ | |||
+ | </source> | ||
+ | |||
+ | |||
+ | <source lang="python"> | ||
+ | |||
+ | import urllib.request | ||
+ | |||
+ | url = "https://ocw.mit.edu/courses/most-visited-courses/" | ||
+ | response = urllib.request.urlopen(url) | ||
+ | x = response.read().decode().split('\n')[:20] | ||
+ | print(x) | ||
+ | |||
+ | </source> | ||
+ | |||
+ | === Находим скрытый текст (10.03.2021) === | ||
+ | |||
+ | Вам дан текст (text.txt), который был написан одним писателем вскоре после Великой Отечественной войны. Обстоятельства написания книги были довольно сложные, даже драматические. Дело в том, что книгу заставил его написать рецидивист, чтобы затем присвоить авторство книги себе. Автору пришлось скрыть в тексте книги один "секрет", чтобы потом доказать, что именно он её написал. | ||
+ | |||
+ | Секрет устроен так: начиная с какого-то места в этом тексте надо смотреть на первые буквы каждого N-го слова. Число N при этом нам неизвестно. Если угадать место и число N, то всё получится. | ||
+ | |||
+ | Вам дан словарь слов русского языка, в котором есть все те слова (all_words.txt), которые содержатся в секретном послании писателя. | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/text.txt Текст книги] | ||
+ | [http://prog.school.ioffe.ru/python_as_2nd/all_words.txt Словарик с большим количеством слов, для справки.] | ||
+ | |||
+ | === Обрабатываем изображения (numpy, PIL) 31.03.2021 === | ||
+ | |||
+ | Чтобы работали все примеры, надо, чтобы были установлены следующие библиотеки: numpy, pillow, scikit-image, matplotlib. | ||
+ | |||
+ | Ниже приведены ссылки на программы, с которыми можно немного поиграться. Тут же есть и изображение, но можете использовать любое своё. | ||
+ | |||
+ | Подумайте, как сделать зеркало относительно горизонтальной оси (поменять верх/низ). Если непонятно, найдите и почитайте документацию на метод, который использован в коде. | ||
+ | |||
+ | В другом файле показывается, как можно работать с отдельными каналами (выкинуть красный, например). | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/mirror.py Зеркало] | ||
+ | [http://prog.school.ioffe.ru/python_as_2nd/remove_red.py Убираем красный] | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/test_img.jpg Картинка] | ||
+ | |||
+ | |||
+ | Более сложные примеры: нормализация изображения (правим экспозицию) и баланс белого. | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/img_process/normalize.py Экспозиция] | ||
+ | [http://prog.school.ioffe.ru/python_as_2nd/img_process/while_bal.py Баланс белого] | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/img_process/c1.jpg Экспозиция, тест картинка 1] | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/img_process/c2.jpg Экспозиция, тест картинка 2] | ||
+ | |||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/img_process/d1.jpg Баланс белого, тест картинка 1] | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/img_process/d2.jpg Баланс белого, тест картинка 2] | ||
+ | |||
+ | === Ещё про изображения — размытие (14.04.2021) === | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/img_process/blurring.py Размытие (простой алгоритм — усреднение по соседям)] | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/img_process/nat_pic.jpg Тестовая картинка] | ||
+ | |||
+ | === Работа с API (urllib.request, JSON, Pandas) (14.04.2021) === | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/api/earthquakes.py Сбор статистики землетрясений] | ||
+ | |||
+ | === Классы и модули в Python (28.04.2021) === | ||
+ | |||
+ | Наверное, ничего лучше, чем чтение [https://docs.python.org/3/tutorial/modules.html Python tutorial] я не могу посоветовать. Для начала — ровно то, что нужно. | ||
+ | |||
+ | [http://prog.school.ioffe.ru/python_as_2nd/fraction_example.py Пример] описания класса Fraction. |
Текущая версия на 13:21, 28 июня 2021
Здесь будут необходимые ссылки (установка, настройка, книжки)
Где брать инсталлятор Python |
Официальная документация Python3 |
Справочник по Python3 |
Среда программирования на Python |
Вердикты тестирующей системы и их описание |
Python: стандартный PEP-8 (Python Enhancement Proposal) официальная страница (англ.), один из урезанных переводов, если англ. совсем никак |
Сдать тренировочные задачи
Тема | Ссылка для входа | Критерии оценивания и замечания
|
---|---|---|
Целочисленная арифметика | Вход в тестирующую систему (контест 203) | любые 7 задач |
Условия | Вход в тестирующую систему (контест 204) | любые 7 задач |
Цикл for | Вход в тестирующую систему (контест 205) | любые 7 задач |
Цикл while | Вход в тестирующую систему (контест 206) | любые 7 задач |
Строки, срезы и некоторые методы работы со строками | Вход в тестирующую систему (контест 207) | любые 7 задач |
Строки и циклы | Вход в тестирующую систему (контест 208) | любые 7 задач |
Массивы | Вход в тестирующую систему (контест 209) | любые 7 задач |
Функции и рекурсия | Вход в тестирующую систему (контест 210) | любые 7 задач |
Множества | Вход в тестирующую систему (контест 211) | любые 7 задач |
Словари | Вход в тестирующую систему (контест 212) | любые 7 задач |
Файлы | Вход в тестирующую систему (контест 213) | любые 7 задач |
Numpy | Вход в тестирующую систему (контест 214) | Решите штук 10 первых задач и смотрите в конец листка на задачи с изображениями.
|
Материалы некоторых занятий
Начало — бегло про python (27.01.2021)
a = 34
b = 5
print(a + b, a - b, a * b, a // b, a / b, a % b, a ** b)
a = 15.8
b = 3.7
print(a // b, a % b)
a = int(input())
b = int(input())
print(f'a = {a}, b = {b}, a + b = {a + b:10}')
a = True
b = False
x = int(input())
d = 2
while d * d <= x:
if x % d == 0:
print('composite')
break
d += 1
else:
print('prime')
for k in range(5):
print(k, end = ' ')
# print('Hello!')
print()
s = "dlkjh gqerg!$"
for ch in s:
print(ch.upper(), end = ' ')
s = "Ax" * 0
print(s)
s = 'R'
print(ord(s), chr(109))
s1 = input()
s2 = input()
print(s1 > s2)
s[0] = '4' # так нельзя
t = list()
x = []
x = [4444, 3, 4, 5, 99]
print(x)
a = x.pop()
print(a, x)
x.append(3546)
print(x)
x.sort()
print(x)
t = tuple()
x = (4, 5, 6, 7)
y = (67, )
x = set()
x = {4, 6, 2, 5, 8, 9}
for elem in x:
print(elem)
print(x)
mutable
immutable
d = {'Vova': 5, 'Anya': 5, 'Roma': 2}
print(d)
d['Vova'] = 4
print(d)
d['Masha'] = 4
print(d)
print(d['Vasya'])
name = input()
surname = input()
print(name + ' ' + surname)
def factorial(n):
if n <= 1:
return 1
return n * factorial(n - 1)
print(factorial(0))
Работа с файлами (10.02.2021)
# читаем файл целиком (в строку)
with open('input_data.in') as f_in, open('input_data.copy', 'w') as f_out:
# f_out.write(f_in.read())
print(f_in.read(), file=f_out)
# читаем файл целиком (в массив строк)
with open('input_data.in') as f_in, open('input_data.copy', 'w') as f_out:
x = f_in.readlines()
print(x)
for line in f_in.readlines():
print(sum(map(int, line.split())), file=f_out)
# читаем файл построчно — 1 вариант
with open('input_data.in') as f_in, open('input_data.copy', 'w') as f_out:
for line in f_in:
print(sum(map(int, line.split())), file=f_out)
# читаем файл построчно — 2 вариант
with open('input_data.in') as f_in:
line = f_in.readline()
line_num = 1
s = sum(map(int, line.split()))
print(s, line_num)
while line != '' and s < 4000:
line_num += 1
s += sum(map(int, line.split()))
print(s, line_num)
line = f_in.readline()
# читаем файл посимвольно
char_2_search = input()
with open('pg5396.txt') as f_in:
found = False
ch = f_in.read(2)
while ch != '':
if ch == char_2_search:
found = True
break
ch = f_in.read(1)
print('YES' if found else 'NO')
# последовательно читаем разными методами
with open('partly_read.txt') as f_in:
s = f_in.read(5)
# print(f_in.readline())
# for row in f_in:
# print(row)
# break
print(f_in.readlines())
# print(f_in.read())
Как писать telegram-bot (17.02.2021)
Документация telegram — что такое bot, как он устроен и что нужно сделать, чтобы его написать
API для написания telegram-bot на Python (telegram.ext)
Домашка:
- Сделать себе токен, пообщавшись в Botfather. И никому его не показывать.
- Написать бота, который только стартует. Можно поменять строку приветствия, это хотите.
Пример минимального бота и обработка URL-запросов (24.02.2021)
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
# import logging
def start(update, context):
context.bot.send_message(chat_id=update.effective_chat.id, text="I'm a bot, please talk to me!")
def help_(update, context):
msg = '''This simple bot written just to check the basic environment'''
context.bot.send_message(chat_id=update.effective_chat.id, text=msg)
def test_(update, context):
msg = '''test message'''
context.bot.send_message(chat_id=update.effective_chat.id, text=msg)
def unknown(update, context):
context.bot.send_message(chat_id=update.effective_chat.id, text="Sorry, I didn't understand that command.")
# тут вместо многоточия надо вставить ваш токен, который вы получили, пообщавшись с FatherBot
updater = Updater(token='...', use_context=True)
dispatcher = updater.dispatcher
start_handler = CommandHandler('start', start)
dispatcher.add_handler(start_handler)
help_handler = CommandHandler('help', help_)
dispatcher.add_handler(help_handler)
test_handler = CommandHandler('test', test_)
dispatcher.add_handler(test_handler)
unknown_handler = MessageHandler(Filters.command, unknown)
dispatcher.add_handler(unknown_handler)
updater.start_polling()
import urllib.request
url = "https://ocw.mit.edu/courses/most-visited-courses/"
response = urllib.request.urlopen(url)
x = response.read().decode().split('\n')[:20]
print(x)Находим скрытый текст (10.03.2021)
Вам дан текст (text.txt), который был написан одним писателем вскоре после Великой Отечественной войны. Обстоятельства написания книги были довольно сложные, даже драматические. Дело в том, что книгу заставил его написать рецидивист, чтобы затем присвоить авторство книги себе. Автору пришлось скрыть в тексте книги один "секрет", чтобы потом доказать, что именно он её написал.
Секрет устроен так: начиная с какого-то места в этом тексте надо смотреть на первые буквы каждого N-го слова. Число N при этом нам неизвестно. Если угадать место и число N, то всё получится.
Вам дан словарь слов русского языка, в котором есть все те слова (all_words.txt), которые содержатся в секретном послании писателя.
Текст книги Словарик с большим количеством слов, для справки.
Обрабатываем изображения (numpy, PIL) 31.03.2021
Чтобы работали все примеры, надо, чтобы были установлены следующие библиотеки: numpy, pillow, scikit-image, matplotlib.
Ниже приведены ссылки на программы, с которыми можно немного поиграться. Тут же есть и изображение, но можете использовать любое своё.
Подумайте, как сделать зеркало относительно горизонтальной оси (поменять верх/низ). Если непонятно, найдите и почитайте документацию на метод, который использован в коде.
В другом файле показывается, как можно работать с отдельными каналами (выкинуть красный, например).
Более сложные примеры: нормализация изображения (правим экспозицию) и баланс белого.
Баланс белого, тест картинка 1Баланс белого, тест картинка 2
Ещё про изображения — размытие (14.04.2021)
Размытие (простой алгоритм — усреднение по соседям)
Работа с API (urllib.request, JSON, Pandas) (14.04.2021)
Классы и модули в Python (28.04.2021)
Наверное, ничего лучше, чем чтение Python tutorial я не могу посоветовать. Для начала — ровно то, что нужно.
Пример описания класса Fraction.