Kodomo

Пользователь

ДЗ 4

Если в задании вы нашли незнакомые слова или непонятную математику, обязательно напишите нам! Мы объясним это понятие и/или поправим задание так, чтобы такой трудности в нём не было.

В начале задачи в скобках даны задачи, которые нужно решить перед ней. Если творческий кризис мешает вам взяться за ДЗ с одного конца, попробуйте взяться за него с другой задачи, которая ни от чего не зависит.

Полезные ссылки

Задачи

Играем в виселицу

DON'T PANIC

То, что описания заданий длинные значит то, что в них много подсказок, а не то, что они сложные :)

0) human

(). Напишите программу, которая рисует человека и виселицу из линий и овалов.

1) human_parts

(после 0). Разделите программу, которая рисует человека и виселицу на функции таким образом, чтобы каждая часть, которая должна в игре появляться по отдельности, рисовалась отдельной функцией. В том числе, должна быть функция, которая рисует состояние, которое видно перед началом игры.

2) obscure_word

(). Дано слово word и набор букв letters (тоже в виде строки). Напишите функцию obscure_word, которая каждую букву в слове word заменяет на '_', если её нет в letters. Результирующее слово функция возвращает. Теперь для проверки того, что функция работает правильно, напишите программу, которая запускает функцию obscure_word для десятка разных комбинаицй word и letters и выводит на экран слова, поданные на вход функции и результат её исполнения. Постарайтесь подобрать как можно более различающиеся аргументы. (То одно пустое, то другое, то оба, то одно короче, то другое, то они равной длины, то общие буквы все, то ни одной и т.п.).

3) count_misses

(). Дано слово word и набор букв letters (тоже в виде строки). Напишите функцию count_misses, которая для каждой буквы из letters проверяет, есть ли она в word и считает число промахов. Функция возвращает число букв из letters, которые не встретились в word. Теперь для проверки того, что функция работает правильно, напишите программу, которая запускает функцию count_misses для десятка разных комбинаицй word и letters и выводит на экран слова, поданные на вход функции и результат её исполнения. Постарайтесь подобрать как можно более различающиеся аргументы. (То одно пустое, то другое, то оба, то одно короче, то другое, то они равной длины, то общие буквы все, то ни одной и т.п.).

4) random_stage

(после 1). Напишите программу, которая рисует случайную стадию повешения человечка. Для этого возмите все функции из задачи 1; напишите функцию draw_stage, которая получает на вход число n и рисует n-ую стадию повешения; и вызовите эту функцию со случайным числом в качестве аргумента. Для того, чтобы сделать функцию draw_stage выберите один из двух вариантов решения:

муторный

много-много if'ов, которые для данного значения n вызывают соответствюущую функцию, рисующую очередную часть человечка

хитроумный

сделайте список stages, в который положите все описанные перед этим функции рисования1; в функции draw_stage осталось взять соответствующую функцию из списка f = steps[n], и вызвать её f().2

5) hangman_stage

(после 4). Напишите программу, которая рисует стадию повешения, соответствующую числу букв в поле ввода. Программа рисует холст, поле ввода и кнопку. По нажатию на кнопку программа считает число букв в поле ввода и рисует соответствующую стадию повешения.3

6) hangman

(после 2, 3, 5) Напишите игру в виселицу. (Ради простоты мы не удаляем введённые буквы из поля ввода и просим пользователя дописывать новые буквы в конец поля ввода, не стирая. Тогда содержимое поля ввода будет давать нам те самые letters, о которых говорили большеви в задачах 2 и 3)

Дополнительные задачи

7) sierpinsky_ifs

нарисуйте треугольник Серпинского, используя случайный выбор одного из трёх преобразований вида x' = ax + by + c, y' = dx + ey + f, где значения a, b, c, d, e, f, для каждого преобразования заданы строкой в таблице ниже.

a

b

c

d

e

f

transformation1

-1/4

√3/4

1/4

-√3/4

-1/4

√3/4

transformation2

1/2

0

1/4

0

1/2

√3/4

transformation3

-1/4

-√3/4

1

√3/4

-1/4

0

8) sierpinsky_recursion

нарисуйте треугольник Серпинского следующим образом: определите функцию sierpinsky, которая принимает три аргумента: x, y, side. Если side маленький, функция возвращает None сразу, ничего не делая. В противном случае, она рисует треугольник с "центром" в точке x, y и "размером" side, и вызывает функцию sierpinsky для того, чтобы нарисовать три треугольника, каждый из которых будет вдвое меньше, и расположен так, чтобы иметь один общий угол с внешним треугольником и два общих угла с соседними меньшими треугольниками.4

  1. Точно так же, как мы передавали функцию change_text аргументом при создании кнопки. Т.е. мы просто упоминаем имя функции без скобочек. (1)

  2. Правда ли? Возможно, мы не учли какие-то значения n, для которых хорошо бы, чтобы функция вела себя по-другому? (2)

  3. Как удачно, что мы не умеем стирать с холста. "Фарш невозможно провернуть назад", а повешенного воскресить... Но если для тестирования решения очень хочется всё стирать, то для этого есть метод: canvas.delete("all") (3)

  4. Описать это русским языком гораздо труднее, чем на питоне... (4)