Git: ключи и слияние. Python: зависимости

Авторизация на удалённом хранилище

Отступление про SSH

Подробнее про SSH в прошлогодней лекции

Процедура слияния в GIT

Применение веток для параллельной разработки

Слияние:

Если «чистое» слияние невозможно (изменения в разных ветках затрагивают один и тот же контекст, и изменения неравны), конфликты следует устранить вручную, закоммитить и проложить слияние. Об этом в следующей лекции

Процедура перебазирования в GIT

Ту же задачу — объединение двух вариантов истории — можно решить путём её переписывания (rebase). Как если бы ту же самую работу выполнили после совсем другого коммита.

Сравнение с merge

Пример: неадекватный апстрим и набор фиксов в одной ветке

Зависимости при разработке на Python

Какие-то инструменты для выявления зависиммостей?

Замечание про зачаточное состояние и непростую задачу учёта зависимостей в Python

Д/З

  1. Изучить модуль textdistance

  2. Найти в нём метрики, позволяющие вычислить количество «быков» и «коров» в игре Быки и коровы (или количество зелёных и оливковых клеток в игре Wordle)

  3. Написать модуль bullscows, предоставляющий две функции:

    • bullscows(guess: str, secret: str) -> (int, int) — возвращает количество «быков» и «коров» из guess в secret

      • «быки» — это одинаковые буквы, которые в словах стоят в одинаковых местах, «коровы» — сколько букв догадки использовано в загадке

        • Например, bullscows("ропот", "полип") -> (1, 2) («о» — бык, «о» и «п» — коровы)

      • Подсчёт «быков» и «коров» реализовывать вручную нельзя, только textdistance (однако допустимо вычитать или складывать метрики, если это необходимо)

    • gameplay(ask: callable, inform: callable, words: list[str]) -> int — функция-приложение, обеспечивающая геймплей:

      1. Задумывает случайное слово из списка слов words: list[str]

      2. Спрашивает у пользователя слово с помощью функции ask("Введите слово: ", words)

      3. Выводит пользователю результат с помощью функции inform("Быки: {}, Коровы: {}", b, c)

      4. Если слово не отгадано, переходит к п. 1
      5. Если слово отгадано, возвращает количество попыток — вызовов ask()

    • Свойства функции ask():

      • ask(prompt: str, valid: list[str] = None) -> str

      • Если необязательный параметр valid не пуст, допустим только ввод слова из valid, иначе спрашивает повторно

    • Функция inform:

      • inform(format_string: str, bulls: int, cows: int) -> None

  4. Вызов python -m bullscows словарь длина должен запускать референс-реализацию игры:

    • словарь — это имя файла или URL (в этом случае необходимо его скачать, например, с помощью urllib)

    • длина — необязательный параметр, указывающий длину используемых слов (по умолчанию 5)

    • Реализация ask() — обычный input() (если нужно, в цикле с проверкой валидности)

    • Реализация inform() — обычный print()

    • В конце выводится количество попыток
    • Замечание: игра не совпадает с Wordle, потому что неизвестны позиции быков и коров, только количество
  5. Создать в каталоге с решениями подкаталог 03_MergeRequirements (совпадающий с URL этой страницы) и положить каталог с решением туда

    • Соблюдать дисциплину оформления коммитов (одно изменение ­— один коммит, описание в commit message и т. п.)

LecturesCMC/PythonDevelopment2022/03_MergeRequirements (последним исправлял пользователь FrBrGeorge 2022-03-30 09:12:02)