Python, как второй язык программирования

Материал из PTHSWiki
(Различия между версиями)
Перейти к: навигация, поиск
(Находим скрытый текст (10.03.2021))
 
(не показаны 44 промежуточные версии 1 участника)
Строка 48: Строка 48:
 
|-
 
|-
 
| [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/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 первых задач и смотрите в конец листка на задачи с изображениями.
 +
  
 
|}
 
|}
Строка 55: Строка 74:
 
=== Начало — бегло про python (27.01.2021) ===
 
=== Начало — бегло про python (27.01.2021) ===
  
[http://prog.school.ioffe.ru/python_as_2nd/all_in_one.py Код с первого урока]
+
<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 Размытие (простой алгоритм &mdash; усреднение по соседям)]
 +
 
 +
[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


    Баланс белого, тест картинка 1

    Баланс белого, тест картинка 2

    Ещё про изображения — размытие (14.04.2021)

    Размытие (простой алгоритм — усреднение по соседям)

    Тестовая картинка

    Работа с API (urllib.request, JSON, Pandas) (14.04.2021)

    Сбор статистики землетрясений

    Классы и модули в Python (28.04.2021)

    Наверное, ничего лучше, чем чтение Python tutorial я не могу посоветовать. Для начала — ровно то, что нужно.

    Пример описания класса Fraction.
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты