Задачи на процедуры и функции

10 задач
Число у задачи — рейтинг сложности, слово рядом — насколько она трудна по сравнению с другими задачами такого же типа. Шкалы задач с ответом и задач с кодом между собой не сравниваются. Рядом — счётчики попыток: успешные, неуспешные.

Часть 1: Функция «Здание»

Напиши функцию building(width, height, floors, color), которая рисует здание с окнами.

Параметры функции:

  • width — ширина здания
  • height — высота здания
  • floors — количество этажей (рядов окон)
  • color — цвет здания

Как выглядит здание

    ┌────────────┐
    │  ■■    ■■  │  ← этаж 3
    │  ■■    ■■  │  ← этаж 2
    │  ■■    ■■  │  ← этаж 1
    └────────────┘
    ↑
    черепашка начинает тут (левый нижний угол)

Шаг 1: Запоминаем начальную позицию

Перед рисованием сохрани координаты черепашки:

base_x = xcor()
base_y = ycor()

Шаг 2: Рисуем здание

Закрашенный прямоугольник размером width × height цвета color.


Шаг 3: Вычисляем размер окон
window_width = width / 5
window_height = height / (floors * 2)

Шаг 4: Рисуем окна

На каждом этаже по 2 окна.  Используйте данный фрагмент для рисования окон, добавив нужные строки

# floor — номер этажа (0, 1, 2...), window — номер окна на этаже (0 или 1).
# Рисуем окна по этажам
for floor in range(floors):   # проходим по этажам
    for window in range(2):   # проходим по окошкам на этаже
        # Определяем позицию окна
        x = base_x + width / 6 + window * (width / 2)
        y = base_y + window_height / 2 + floor * (height / floors)
        
        # Переходим к окну (в точку (x, y))
        # Этот код напишите сами! 
        # не забудьте поднять перо перед переходом в точку и после перехода опустить

        # Рисуем жёлтое окно
        fillcolor("yellow")
        begin_fill()
        # напишите код рисования квадрата со стороной window_width
        
        end_fill()


В конце функции поднимите перо черепашки! Протестируйте функцию на одном здании! Затем приступайте к части 2.


### Схема расположения окон
    ┌─────────────────────────┐
    │                         │
    │   ■■            ■■      │  floor = 1
    │                         │
    │   ■■            ■■      │  floor = 0
    │   │             │       │
    └───│─────────────│───────┘
    ↑   │             │
 base_x │             └── base_x + width/6 + width/2
        │
        └── base_x + width/6

 


Часть 2: Рисуем улицу

После функции напиши основную программу, которая рисует улицу с  четырьмя зданиями в ряд.

Создай четыре списки по таблице ниже и используй их при рисовании улицы.

i widths[i] heights[i] floors_list[i] colors[i]
0 60 120 4 "gray"
1 100 80 2 "beige"
2 50 150 5 "lightblue"
3 80 100 3 "pink"


Первое здание начните рисовать с точки (-300, -200) 
После рисования одного здания изменяйте положение Черепашки по оси x:
x = x + widths[i] + 10

Часть 1

Напиши функцию lantern(size, c), которая рисует фонарик.

Параметры функции:

  • size — диаметр круга (число)
  • c — цвет фонарика (строка)

Порядок рисования

  1. Подвес — коричневый ("brown") закрашенный прямоугольник:
    • ширина: 10
    • высота: 20
  2. Круг — закрашенный круг под подвесом:
    • цвет: параметр c
    • диаметр: параметр size
    • круг рисуется так, чтобы он был по центру подвеса

Часть 2

После функции напиши основную программу, которая рисует гирлянду из 6 фонариков в ряд.
Должна получиться гирлянда из 6 разноцветных фонариков разного размера. Порядок следования фонариков следуюший:
красн жёлт  зелён красн жёлт  зелён
 40    35    45    35    40    35
Первый фонарик рисуется из точки (0, 0), каждый следующий сдвигается по оси х на 50 вправо. 

Пример вызова

lantern(50, "red")    # красный фонарик диаметром 50
lantern(30, "yellow") # жёлтый фонарик диаметром 30

Подсказки

  • Используй begin_fill() и end_fill() для заливки
  • Для круга используй circle(-size/2) — минус нужен, чтобы круг рисовался справа от черепашки
  • Не забудь поднимать и опускать перо (pu(), pd()) в нужных местах

Объявите класс Furniture (мебель), объекты которого создаются командой:

 f = Furniture(name, weight)

где name - название предмета (строка); weight - вес предмета (целое число).

В каждом объекте класса Furniture должны создаваться защищенные локальные атрибуты с именами __name и __weight. В самом классе Furniture нужно объявить приватные методы:

__verify_name() - для проверки корректности имени;
__verify_weight() - для проверки корректности веса.

Метод __verify_name() проверяет, что имя должно быть строкой, если это не так, то генерируется исключение командой:

 raise TypeError('название должно быть строкой')

Метод __verify_weight() проверяет, что вес должен быть положительным числом (строго больше нуля), если это не так, то генерируется исключение командой:

 raise TypeError('вес должен быть положительным числом')

Данные методы следует вызывать всякий раз при записи новых значений в атрибуты __name и __weight (а также при их создании).

Установка и считывание значений атрибутов должны происходить по их имени следующим образом (через соответствующие сеттеры и геттеры):
obj.name = value
obj.weight = value

На основе базового класса Furniture объявить следующие дочерние классы:

Closet - для представления шкафов;
Chair - для представления стульев;
Table - для представления столов.

Объекты этих классов должны создаваться командами:

obj = Closet(name, weight, tp, doors)   
# tp: True - шкаф-купе; False - обычный шкаф; doors - число дверей (целое число) 

obj = Chair(name, weight, height)       
# height - высота стула (любое положительное число) 

obj = Table(name, weight, height, square) 
# height - высота стола; square - площадь поверхности (любые положительные числа)


В каждом объекте этих классов должны создаваться соответствующие защищенные атрибуты:

- в объектах класса Closet: __name, __weight, __tp, __doors
- в объектах класса Chair: __name, __weight, __height
- в объектах класса Table: __name, __weight, __height, __square

Атрибуты __name и __weight должны инициализироваться через базовый класс. Все атрибуты должны быть приватными, считываться и устанавливаться через геттеры и сеттеры. Доступ ко всем атрибутам должен производиться по их имени (см описание в базовом классе)

В каждом классе (Closet, Chair, Table) объявить метод: get_attrs(), который возвращает кортеж из значений локальных защищенных атрибутов объектов этих классов.

При печати объекта каждого класса должна выводиться строка:
Объект: <перечисление значений всех атрибутов через запятую и один пробел>

Например: 
Table: стол, 34, 75, 10

В программе нужно объявить только классы. На экран выводить ничего не нужно.

Алиса решила, что нужно поставить код доступа к управлению кораблем. Она считает, что код доступа должен иметь вид a:b:c, где a, b и c - натуральные числа. Причем, число a должно быть простым, число b - являться палиндромом, а число c - чётным. Капитан Зелёный придумал код.

Вам поручили задание написать программу, которая бы выводила True, если придуманный код доступа соответствует правилам и False - если не соответствует. Чтобы вашу программу можно было применять для других проверок, капитан просит вас оформить программу, с использованием трех функций:
- isPrime(n) - функция, которая определяет является число n простым или нет;
- isPalindrome(n) - функция, которая определяет является ли число n палиндромом;
- isEven(n) - функция, которая определяет является ли число n четным.

Все проверки числа на простоту, палиндром и четность необходимо осуществлять только с использованием данных функций!

Входные данные
Программа получает на вход одну строку - код доступа, который придумал капитан Зелёный.

Выходные данные
Выведите True, если код доступа соответствует правилам Алисы, в противном случае выведите False.
 
Примеры
Входные данные Выходные данные
1 7:101:14 True
2 101:101:101 False
3 qwerty False
Напишите функцию vowels_count, которая принимает строку и подсчитывает количество английских гласных в ней.
Английские гласные буквы: a, e, i, o, u, y.

Используя данную функцию, определите две строки:
s1 - строку с самым большим числом гласных букв (если таких строк несколько, взять ту, которая встретится раньше).
s2 - строку с самым маленьким числом согласных букв (если таких строк несколько, взять ту, которая встретится раньше).


Входные данные
В первой строке подается натуральное число n (1 < n <= 10) - количество строк. Далее идут n строк. Каждая строка состоит из английских маленьких букв и пробелов.

Выходные данные
Выведите на экран две строки: сначала строку s1, затем, с новой строки - s2. Наименьшую из данных строк выровняйте по длине с наибольшей, добавив слева строки символы '*'.
 
Примеры
Входные данные Выходные данные
1 4
mama papa
doughter son
brother sister
grandmama grandpa
grandmama grandpa
********mama papa
 
1859#1859
Программа, предназначенная для решения какой-то конкретной частной задачи и к которой обращаются из другой программы называется
1) модуль
2) функция
3) подпрограмма
4) нет правильного ответа
1856#1856
Фактические параметры записываются
1) после описания типа переменной
2) в заголовке подпрограммы-функции
3) в заголовке подпрограммы-процедуры
4) в команде вызова подпрограммы
Поделиться
Класснуть