2. Во вкладке процедуры создадим новую программу, которую назовем дом
это дом конец
3. Нарисуем первый элемент нашего дома для этого в программе (между слова это дом иконец) напишем следующее.
по нц 9 нрп 1 (по - опускаем перо, нц 9 - задаём новый цвет, нрп - задаём новый размер пера) повтори 4 [вп 100 пр 90] (рисуем стены нашего дома, программа квадрата)
Посмотрим полученный результат. Для этого создадим черепашку, в поле команд напишем имя нашей программы дом, запустим её нажав клавишу Enter.
4. Далее рисуем крышу, для этого после команды квадрата пишем следующее.
вп 100 (передвигаем черепашку в левый верхний угол уже нарисованного квадрата) пр 30 (нам известно что сумма внешних углов правильного многоугольника равна 360 градусов следовательно внешний угол правильного треугольника равен 120=360/3, поворот будет равен 30 градусам т.к. 120-90=30) вп 100 (рисуем левую часть крыши) пр 120 (поворачиваем черепашку на 120 градусов) вп 100 (рисуем правую часть крыши)
Посмотрим полученный результат в поле команд напишем сг (стирание с экрана всей графики) дом (выполним программу дом).
5. Нарисуем окно дома. Для этого следует перевести черепашку в центр дома.
пр 30 (повернём черепашку так чтобы её голова смотрела вниз) вп 30 (передвинем её вниз на 30 шагов) пр 90 (относительного её движения повернём её на 90 градусов) пп (поднимем перо чтобы черепашка не оставляла за собой след) вп 30 (продвинем черепашку на 30 шагов) по (чтобы нарисовать окно следует опустить перо) повтори 4 [вп 40 лв 90] (рисуем квадрат размером в 40 шагов)
Посмотрим полученный результат в поле команд напишем сг (стирание с экрана всей графики) дом (выполним программу дом).
6. осталось только дом разукрасить для этого выполним следующие команды.
пп (поднять перо чтобы черепашка не оставляла за собой след) вп 10 лв 90 вп 10 (передвинемся во внутрь окна) нц 91 крась (закрасим окно голубым цветом) пр 180 вп 20 (передвинем черепаху на стену) нц 41 крась (закрасим стену светло-кремовым цветом) вп 40 (передвинем черепаху на крышу) нц 18 крась (закрасим крышу красным цветом)
Посмотрим полученный результат в поле команд напишем сг (стирание с экрана всей графики) дом (выполним программу дом). Любуемся.
# В комментариях я использовал слово итерация в значении запуска новой функции с данными spos/ppos большими на 1 (аналогично с циклом for
# Ввод данных
s = input("Слово: ")
p = input("Шаблон: ")
# match возвращает True, если подстрока s, начинающаяся с позиции spos,
# соответствует шаблону (подстрока p, которая начинается
# с позиции ppos)
def match(spos, ppos):
if (spos == len(s)) or (ppos == len(p)):
return (spos == len(s) and ppos == len(p)) #когда все символы слова либо шаблона пройдены возвращается True, если и шаблон и слово пройдены полностью, в другом случае возвращается False
elif p[ppos] == '?':
return match(spos + 1, ppos + 1) #когда встречается ? начинается новая итерация
elif p[ppos] == '*': #проверка если подстрока - *
for i in range(spos, len(s)): #обход всех оставшихся символов слова
if match(i, ppos + 1):
return True #если дочерняя функция (вызванная выше) выдала True, цикл for заканчивается до выдавая True
else: #выполняется когда не встретилось */?
return (s[spos] == p[ppos]) and (match(spos + 1, ppos + 1))# проверка на равентсво соответствующих (по индексу) символов слова и шаблона и запуск новой функции (итерации)
if match(0, 0):
print('YES') #если результат функции True в консоль выводится 'YES', иначе 'NO'
1. Открываем программу логомиры.
2. Во вкладке процедуры создадим новую программу, которую назовем дом
это дом
конец
3. Нарисуем первый элемент нашего дома для этого в программе (между слова это дом иконец) напишем следующее.
по нц 9 нрп 1 (по - опускаем перо, нц 9 - задаём новый цвет, нрп - задаём новый размер пера)
повтори 4 [вп 100 пр 90] (рисуем стены нашего дома, программа квадрата)
Посмотрим полученный результат. Для этого создадим черепашку, в поле команд напишем имя нашей программы дом, запустим её нажав клавишу Enter.
4. Далее рисуем крышу, для этого после команды квадрата пишем следующее.
вп 100 (передвигаем черепашку в левый верхний угол уже нарисованного квадрата)
пр 30 (нам известно что сумма внешних углов правильного многоугольника равна 360 градусов следовательно внешний угол правильного треугольника равен 120=360/3, поворот будет равен 30 градусам т.к. 120-90=30)
вп 100 (рисуем левую часть крыши)
пр 120 (поворачиваем черепашку на 120 градусов)
вп 100 (рисуем правую часть крыши)
Посмотрим полученный результат в поле команд напишем сг (стирание с экрана всей графики) дом (выполним программу дом).
5. Нарисуем окно дома. Для этого следует перевести черепашку в центр дома.
пр 30 (повернём черепашку так чтобы её голова смотрела вниз)
вп 30 (передвинем её вниз на 30 шагов)
пр 90 (относительного её движения повернём её на 90 градусов)
пп (поднимем перо чтобы черепашка не оставляла за собой след)
вп 30 (продвинем черепашку на 30 шагов)
по (чтобы нарисовать окно следует опустить перо)
повтори 4 [вп 40 лв 90] (рисуем квадрат размером в 40 шагов)
Посмотрим полученный результат в поле команд напишем сг (стирание с экрана всей графики) дом (выполним программу дом).
6. осталось только дом разукрасить для этого выполним следующие команды.
пп (поднять перо чтобы черепашка не оставляла за собой след)
вп 10 лв 90 вп 10 (передвинемся во внутрь окна)
нц 91 крась (закрасим окно голубым цветом)
пр 180 вп 20 (передвинем черепаху на стену)
нц 41 крась (закрасим стену светло-кремовым цветом)
вп 40 (передвинем черепаху на крышу)
нц 18 крась (закрасим крышу красным цветом)
Посмотрим полученный результат в поле команд напишем сг (стирание с экрана всей графики) дом (выполним программу дом). Любуемся.
Принцип работы рекурсивный
Объяснение:
# В комментариях я использовал слово итерация в значении запуска новой функции с данными spos/ppos большими на 1 (аналогично с циклом for
# Ввод данных
s = input("Слово: ")
p = input("Шаблон: ")
# match возвращает True, если подстрока s, начинающаяся с позиции spos,
# соответствует шаблону (подстрока p, которая начинается
# с позиции ppos)
def match(spos, ppos):
if (spos == len(s)) or (ppos == len(p)):
return (spos == len(s) and ppos == len(p)) #когда все символы слова либо шаблона пройдены возвращается True, если и шаблон и слово пройдены полностью, в другом случае возвращается False
elif p[ppos] == '?':
return match(spos + 1, ppos + 1) #когда встречается ? начинается новая итерация
elif p[ppos] == '*': #проверка если подстрока - *
for i in range(spos, len(s)): #обход всех оставшихся символов слова
if match(i, ppos + 1):
return True #если дочерняя функция (вызванная выше) выдала True, цикл for заканчивается до выдавая True
else: #выполняется когда не встретилось */?
return (s[spos] == p[ppos]) and (match(spos + 1, ppos + 1))# проверка на равентсво соответствующих (по индексу) символов слова и шаблона и запуск новой функции (итерации)
if match(0, 0):
print('YES') #если результат функции True в консоль выводится 'YES', иначе 'NO'
else:
print('NO')