Генераторы и итераторы · 8 из 17
Семечки по спирали
На хлебозаводе запускают круглый каравай с семечками, и Сан Саныч хочет, чтобы автомат клал их, как подсолнух: плотно, без дыр и без рядов. Тамара нашла, как это делает сам подсолнух. Каждое следующее семечко поворачивается от предыдущего на золотой угол — около 137,5° — и отходит от центра чуть дальше: на корень из своего номера. Автомат берёт точки по одной, по мере того как кладёт семечки, — значит, точки нужно отдавать по одной.
Что сделать
Отдавайте точки семечек по одной: каждое повёрнуто на золотой угол от предыдущего и отходит от центра на корень из своего номера.
Что приходит
n— сколько семечекshag— масштаб: на каком расстоянии от центра лежит семечко номер 1
Что вернуть
Генератор пар (x, y) — по одной на семечко, номера от 0 до n − 1.
Допишите функцию semechki в редакторе справа.
Результат верните через return — то, что
напечатано, на проверку не влияет.
с графикой когда тесты пройдут, ответ вашей функции нарисуется · все задачи с графикой
Четыре семечка с масштабом 1. Нулевое — в центре, (0.0, 0.0). Первое — на расстоянии 1 под углом 137,5°, примерно (-0.74, 0.68). Второе — на расстоянии √2 ≈ 1,41 под углом 275°, третье — на √3 под углом 412,5°, то есть 52,5°. В проверке точки округлены до сотых.
[(round(x, 2) + 0, round(y, 2) + 0) for x, y in semechki(4, 1)]
[(0.0, 0.0), (-0.74, 0.68), (0.12, -1.41), (1.05, 1.37)]
Семечко номер k (от 0 до n − 1):
- расстояние от центра
r = shag * math.sqrt(k); - угол
k * ZOLOTOYрадиан, гдеZOLOTOY = math.pi * (3 - math.sqrt(5))— это золотой угол, ≈ 2,39996 радиана ≈ 137,5°; - точка
(r * math.cos(ugol), r * math.sin(ugol)).
Функция — генератор (yield): точки считаются по одной, по мере того как их забирают, а не списком заранее. Проверка смотрит и на это: type(semechki(3, 1)).__name__ должно быть 'generator'.
Обсуждение
Вопросов пока нет.
Войдите, чтобы спросить.