new file: content/posts/informatics/python-pygames.mdx

new file:   content/posts/informatics/python-turtle.mdx
	modified:   content/posts/textbook/python.mdx
	modified:   public/sitemap-0.xml
main
joker 2 years ago
parent 2ac412e0ee
commit 0e9d8dfbe1
  1. 630
      content/posts/informatics/python-pygames.mdx
  2. 307
      content/posts/informatics/python-turtle.mdx
  3. 1333
      content/posts/textbook/python.mdx
  4. 21
      public/sitemap-0.xml

@ -0,0 +1,630 @@
---
title: Библиотека Pygame Python
excerpt: Библиотека для разработки игр Pygame
date: '2023-11-08'
tags:
- Информатика
- Программирование
- Python
- Задачи
- Pygame
---
<TableOfContents>
- [Урок 1](#урок-1)
- [Урок 2](#урок-2)
</TableOfContents>
# Урок 1
pygame - это библиотека модулей для языка Python, созданная для разработки 2D игр.
Для того чтобы установить pygame на свой компьютер необходимо открыть командную строку или терминал и написать команду
```python
pip3 install pygame
```
После установки необходимо создать новый файл и импортировать модуль pygame и написать шаблон игры
```python
# Импортируем библиотеку pygame
import pygame
# Импортируем системную функцию exit
from sys import exit
# Инициализируем pygame
pygame.init()
# Создаем окошко 800 пикселей шириной
# и 600 пикселей высотой и записываем его
# в переменную display.
# Переменную display называют поверхностью.
display = pygame.display.set_mode( (800, 600) )
# Основной цикл игры
while True:
# Ждем события (действия пользователя)
for event in pygame.event.get():
# Если нажали на крестик,
# то закрываем окно
if event.type == pygame.QUIT:
pygame.quit()
exit()
# Обновляем поверхность игры
# на каждом шаге основного цикла игры
pygame.display.update()
```
Пользователь может взаимодействовать с нашей игрой. Каждое действие пользователя - это некоторое событие, которое мы можем обработать. Выражение pygame.event.get() - это список событий, произошедших в нашей игре.
Цикл for просто перебирает необработанные события. Каждое событие он присваивает переменной event (можно написать любую другую).
Поговорим о цикле while, основном цикле игры. Как часто он выполняется? Очень и очень часто, это зависит от мощности компьютера. Для обновления экрана в играх часто используют 60 кадров в секунду.
Ограничим количество выполнений цикла.
```python
import pygame
from sys import exit
pygame.init()
display = pygame.display.set_mode( (800, 600) )
FPS = 60 # Создаем переменную FPS
clock = pg.time.Clock() # Создаем счетчик для FPS
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
clock.tick(FPS) # Замедляем цикл до 60 выполнений в секунду
```
Методу tick() передается желаемое количество кадров в секунду. Задержку он вычисляет сам. На каждой итерации основного цикла игры секунда делится на 60 и на вычисленную величину выполняется задержка.
Рисование фигур
В библиотеке pygame существует множество функций для рисования различных фигур.
Функция polygon() рисует произвольную фигуру. Она принимает 3 обязательных параметра (поверхность, цвет и кортеж координат) и 1 необязательный (толщину линий).
```python
import pygame
from sys import exit
pygame.init()
display = pygame.display.set_mode( (800, 600) )
# Рисуем полигон (да, получится квадратик)
pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) )
FPS = 60
clock = pg.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
clock.tick(FPS)
```
display - наша поверхность
(255, 0, 0) - красный цвет, почитайте про rgb
( (0, 0), (100, 0), (100, 100), (0, 100) ) - координаты вершин квадрата. Возьмите листочек и нарисуйте его координатах (замените сотню на единицу).
Давайте нарисуем треугольник
```python
import pygame
from sys import exit
pygame.init()
display = pygame.display.set_mode( (800, 600) )
# Рисуем квадратик
pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) )
# Рисуем синий треугольник
pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) )
FPS = 60 # Создаем переменную FPS
clock = pg.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
clock.tick(FPS)
display - поверхность
```
(0, 0, 255) - синий цвет
((100, 100), (200, 200), (100, 200)) - координаты вершин нашего треугольник.
Самостоятельно нарисуйте пятиугольник (вам помогут карандаш и лист бумаги)
Рисование окружностей
Чтобы нарисовать окружность нужно вызвать метод circle из модуля draw. Команда выглядит так: pygame.draw.circle(display, color, position, radius).
display - поверхность, на которой рисуем
color - цвет, записанный в кортеже из трех чисел. (еще раз про rgb)
position - координаты точки центра окружности (кортеж из двух чисел (x, y))
radius - радиус окружности в пикселях
```python
import pygame
from sys import exit
pygame.init()
display = pygame.display.set_mode( (800, 600) )
# Рисуем квадратик
pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) )
# Рисуем синию линию
pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) )
# Рисуем желтую окружность с радиусом 100 пикселей
pygame.draw.circle( display, (255, 255, 0) , (400,200), 100)
FPS = 60
clock = pg.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
clock.tick(FPS)
```
display - наша поверхнотсть для рисования
(255, 255, 0) - желтый цвет
(400, 200) - координаты точки центра (в нашем случае 400 пикселей от верхнего левого угла по горизонтали и 200 пикселей по вертикали)
100 - радиус нашей окружности в пикселях
Объявления переменных для цветов
Для нашего с вами удобства давайте объявим несколько переменных, в которые сохраним используемые нами цвета
```python
import pygame
from sys import exit
pygame.init()
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
PURPLE = (156, 39, 176)
INDIGO = (63, 81, 181)
BLUE = (33, 150, 243)
GREEN = (76, 175, 80)
YELLOW = (255, 235, 59)
ORANGE = (255, 152, 0)
GREY = (158, 158, 158)
display = pygame.display.set_mode( (800, 600) )
# Рисуем квадратик
pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) )
# Рисуем синию линию
pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) )
# Рисуем желтую окружность с радиусом 100 пикселей
pygame.draw.circle( display, (255, 255, 0) , (400,200), 100)
FPS = 60
clock = pg.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
clock.tick(FPS)
```
Рисование прямоугольников
Для отрисовки прямоугольников можно использовать метод rect.
pygame.draw.rect(display, color, (x, y, width, height) )
color - цвет (теперь можно просто написать имя переменную)
(x, y, width, height) - кортеж из четырех значений. Первые два значения - это координаты верхнего левого угла прямоугольника, а два последних - это ширина и высота.
```python
import pygame
from sys import exit
pygame.init()
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
PURPLE = (156, 39, 176)
INDIGO = (63, 81, 181)
BLUE = (33, 150, 243)
GREEN = (76, 175, 80)
YELLOW = (255, 235, 59)
ORANGE = (255, 152, 0)
GREY = (158, 158, 158)
display = pygame.display.set_mode( (800, 600) )
# Рисуем квадратик
pygame.draw.polygon( display, (255, 0, 0) , ( (0, 0), (100, 0), (100, 100), (0, 100) ) )
# Рисуем синию линию
pygame.draw.polygon( display, (0, 0, 255) , ( (100, 100), (200, 200), (100, 200) ) )
# Рисуем желтую окружность с радиусом 100 пикселей
pygame.draw.circle( display, (255, 255, 0) , (400,200), 100)
# Рисуем фиолетовый прямоугольник 200х300
pygame.draw.rect( display, PURPLE , (600, 300, 200, 300))
FPS = 60
clock = pg.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
clock.tick(FPS)
```
Если ваша творческая натура требует большего, то вот ссылка на документацию модулю draw
Там можно найти рисование линий, дуг, эллипсов.
Большой пример запусти его на компьтере:
```python
import pygame
from sys import exit
from random import randint
# Функция, возвращающая случайный оттенок зеленого цвета
def randomGreen():
return randint(0, 100), randint(100, 255), randint(0,100)
# Функция, возвращающая случайный оттенок красного цвета
def randomRed():
return randint(100, 255), randint(0, 100), randint(0,100)
pygame.init()
display = pygame.display.set_mode( (600, 600) )
display.fill((255,255,255))
x = 100 # начальная позиция по оси X
y = 100 # начальная позиция по оси Y
while y < 500: # Пока мы не достигли точки с координатой y == 500
# Вложенный цикл для рисования линии из квадратиков
while x < 500: # Пока мы не достигли точки с координатой x == 500
# Рисуем квадратик с координатами x, y
pygame.draw.rect(display, randomGreen(), (x, y, 25, 25))
x += 25 # Смещаем позицию квадратика по оси X
# По завершению вложенного цикла увеличиваем переменную y
# для перехода на новую строчку
y += 25
x = 100 # Возвращаем позицию по оси X в начало строчки
# Рисуем "мордочку" крипера
pygame.draw.rect(display, (0,0,0), (150, 200, 100, 100))
pygame.draw.rect(display, (0,0,0), (350, 200, 100, 100))
pygame.draw.rect(display, (0,0,0), (250, 300, 100, 100))
pygame.draw.rect(display, (0,0,0), (200, 350, 50, 100))
pygame.draw.rect(display, (0,0,0), (350, 350, 50, 100))
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
```
Задания:
1.Нарисуйте дерево из minecraft, используя полученные знания
2.Нарисуйте оранжевую, красную, синию и фиолетовую звезды
<TableOfContents>
- [Урок 1](#урок-1)
- [Урок 2](#урок-2)
</TableOfContents>
# Урок №2
Обработка нажатий клавиш клавиатуры
Создадим базовый шаблон для нашей игры
```python
import pygame
from sys import exit
pygame.init()
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
PURPLE = (156, 39, 176)
INDIGO = (63, 81, 181)
BLUE = (33, 150, 243)
GREEN = (76, 175, 80)
YELLOW = (255, 235, 59)
ORANGE = (255, 152, 0)
GREY = (158, 158, 158)
display = pygame.display.set_mode( (800, 600) )
FPS = 60
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
pygame.display.update()
clock.tick(FPS)
```
pygame отслеживает все происходящие в игре события и позволяет нам их обрабатывать. При возникновении события создается экземпляр класса Event. Каждый экземпляр этого класса имеет определенный список свойств. Одно из этих свойств - это свойство type. Именно оно позволяет нам понять, какое событие произошло.
События клавиатуры имеют тип KEYDOWN.
Еще одно важное свойство - это свойство key. Для нас оно представляет интерес, когда мы обнаружили событие с типом KEYDOWN. С помощью свойства key мы можем узнать, какая клавиша была нажата.
```python
import pygame
from sys import exit
pygame.init()
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
PURPLE = (156, 39, 176)
INDIGO = (63, 81, 181)
BLUE = (33, 150, 243)
GREEN = (76, 175, 80)
YELLOW = (255, 235, 59)
ORANGE = (255, 152, 0)
GREY = (158, 158, 158)
display = pygame.display.set_mode( (800, 600) )
FPS = 60
clock = pygame.time.Clock()
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
print('Левая стрелка')
elif event.key == pygame.K_RIGHT:
print('Правая стрелка')
elif event.key ==pygame.K_UP:
print('Стрелка вверх')
elif event.key ==pygame.K_DOWN:
print('Стрелка вниз')
pygame.display.update()
clock.tick(FPS)
```
После запуска скрипта при нажатии стрелок на клавиатуре в стандартный вывод будут выводится строки с информацией о нажатой клавише.
Напишем код, который будет рисовать кружок
```python
pygame.draw.circle(display, BLUE, (400, 300), 5)
# Добавьте этот скрипт после цикла while
```
Заставим кружок двигаться. Нужно объявить две переменные - x и y. Эти переменные будут координатами нашего кружка. При нажатии клавиши мы будем изменять эти переменные. Если нажата стрелка вправо, увеличим переменную x на 10. Если - стрелка влево, уменьшим переменную x на 10. Проделаем то же самое с переменной y.
```python
import pygame
from sys import exit
pygame.init()
WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
PURPLE = (156, 39, 176)
INDIGO = (63, 81, 181)
BLUE = (33, 150, 243)
GREEN = (76, 175, 80)
YELLOW = (255, 235, 59)
ORANGE = (255, 152, 0)
GREY = (158, 158, 158)
display = pygame.display.set_mode( (800, 600) )
FPS = 60
clock = pygame.time.Clock()
x = 400 # начальная координата по оси X
y = 300 # начальная координата по оси Y
while True:
# Рисуем кружок в точке с координатами x,y
pygame.draw.circle(display, BLUE, (x, y), 5)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.KEYDOWN:
if event.key == pygame.K_LEFT:
print('Левая стрелка')
x -= 10
elif event.key == pygame.K_RIGHT:
print('Правая стрелка')
x += 10
elif event.key == pygame.K_UP:
print('Стрелка вверх')
y -= 10
elif event.key == pygame.K_DOWN:
print('Стрелка вниз')
y += 10
pygame.display.update()
clock.tick(FPS)
```
Есть один нюанс. Шарик перемещается только один раз при зажатии одной из клавиш. Немного изменим наш код для того, чтобы он обратывал зажатые клавиш.
```python
# ... Код выше без изменений
while True:
pygame.draw.circle(display, BLUE, (x, y), 5)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
# Найдите 10 отличий
# Удаляем elif с KEYDOWN
keys = pygame.key.get_pressed() # Словарь всех нажатых клавиш
# Обрабатываем каждую клавишу по отдельности
if keys[pygame.K_LEFT]:
x -= 10
if keys[pygame.K_RIGHT]:
x += 10
if keys[pygame.K_UP]:
y -= 10
if keys[pygame.K_DOWN]:
y += 10
pygame.display.update()
clock.tick(FPS)
```
События мыши
В pygame обрабатываются три типа событий мыши: нажатие кнопки (значение свойства type события соответствует MOUSEBUTTONDOWN), отпускание кнопки (MOUSEBUTTONUP), перемещение мыши (MOUSEMOTION). Какая именно кнопка была нажата, записывается в другое свойство события - button. Для левой кнопки это число 1, для средней - 2, для правой - 3, для прокручивания вперед - 4, для прокручивания назад - 5.
Другим атрибутом мышиных типов событий является свойство pos, в которое записываются координаты нажатия (кортеж из двух чисел).
При нажатии левой кнопки мыши будем рисовать оранжевый кружок
```python
# Код выше без изменений...
while True:
display.fill(BLACK)
pygame.draw.circle(display, BLUE, (x, y), 5)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
pygame.draw.circle(display, ORANGE, (event.pos[0], event.pos[1]), 30)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
print('Левая стрелка')
x -= 10
if keys[pygame.K_RIGHT]:
print('Правая стрелка')
x += 10
if keys[pygame.K_UP]:
print('Стрелка вверх')
y -= 10
if keys[pygame.K_DOWN]:
print('Стрелка вниз')
y += 10
pygame.display.update()
clock.tick(FPS)
```
Добавим появление белых кружков по нажатию правой кнопки мыши.
```python
# Код выше без изменений...
while True:
display.fill(BLACK)
pygame.draw.circle(display, BLUE, (x, y), 5)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
pygame.draw.circle(display, ORANGE, (event.pos[0], event.pos[1]), 30)
elif event.button == 3:
pygame.draw.circle(display, WHITE, (event.pos[0], event.pos[1]), 30)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
print('Левая стрелка')
x -= 10
if keys[pygame.K_RIGHT]:
print('Правая стрелка')
x += 10
if keys[pygame.K_UP]:
print('Стрелка вверх')
y -= 10
if keys[pygame.K_DOWN]:
print('Стрелка вниз')
y += 10
pygame.display.update()
clock.tick(FPS)
```
Добавим очищение поверхности при скролле колесика мыши
```python
# Код выше без изменений...
while True:
display.fill(BLACK)
pygame.draw.circle(display, BLUE, (x, y), 5)
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
exit()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 1:
pygame.draw.circle(display, ORANGE, (event.pos[0], event.pos[1]), 30)
elif event.button == 3:
pygame.draw.circle(display, WHITE, (event.pos[0], event.pos[1]), 30)
elif event.button == 5:
display.fill(BLACK)
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
print('Левая стрелка')
x -= 10
if keys[pygame.K_RIGHT]:
print('Правая стрелка')
x += 10
if keys[pygame.K_UP]:
print('Стрелка вверх')
y -= 10
if keys[pygame.K_DOWN]:
print('Стрелка вниз')
y += 10
pygame.display.update()
clock.tick(FPS)
```
Задание:
Создайте еще один перемещающийся объект, назначьте клавиши WASD для его перемещения. Ключи клавиш: W == K_w, A == K_a, D == K_d, S == K_s. Обратите внимание, что вам понадобятся новые переменные для координат, например, x1 и y1.
<TableOfContents>
- [Урок 1](#урок-1)
- [Урок 2](#урок-2)
</TableOfContents>

@ -0,0 +1,307 @@
---
title: Библиотека Python Turtle
excerpt: Графическая библиотека turtle
date: '2023-11-08'
tags:
- Информатика
- Программирование
- Python
- Turtle
---
<TableOfContents>
- [Урок 1](#урок-1)
- [Урок 2](#урок-2)
</TableOfContents>
# Урок 1
Модуль turtle - это графическая библиотека для работы с 2D-графикой в Python. Сначала его нужно подключить к скрипту.
```python
import turtle
```
После этого необходимо создать "перо" и записать ссылку на него в переменную
```python
import turtle
pen = turtle.Pen()
turtle.exitonclick() #Выход при нажатии мышкой в окне Turtle
```
Команда forward() чертит прямую линию. Она принимает в качестве аргумента длину линии в пикселях.
```python
import turtle
pen = turtle.Pen()
pen.forward(100) # Прямая линия длиной в 100 пикселей
```
Команда left() и right() поворачивает курсор. Они принимают в качестве аргумента угол поворота.
```python
import turtle
pen = turtle.Pen()
pen.forward(200) # Прямая линия длиной в 200 пикселей
pen.left(135) # Поворачиваем на 135 градусов влево
pen.forward(200) # Прямая линия длиной в 200 пикселей
pen.right(135) # Поворачиваем на 135 градусов вправо
pen.forward(200) # Прямая линия длиной в 200 пикселей
```
Мы можем перемещать перо без начертания линий. Для этого нужно сначала поднять перо с помощью команды penup(), затем переместить его в нужную точку с помощью команды setpos(x, y), где x и y - это координаты точки, в которую мы перемещаем наше перо. После всех проделанных манипуляций необходимо опустить перо с помощью команды pendown().
Подведем итог. Для того чтобы переместить перо в другую точку нужно:
1. Поднять перо с помощью команды penup()
2. Переместить перо в точку x, y (x и y - координаты в пикселях, вместо них подставляем числа) командой setpos(x, y)
3. Опустить перо в нужно точке с помощью команды pendown()
```python
import turtle
pen = turtle.Pen()
# Первая линия
pen.forward(200)
pen.penup()
pen.setpos(0, 20)
pen.pendown()
# Вторая линия
pen.forward(200)
pen.penup()
pen.setpos(0, 40)
pen.pendown()
# Третья линия
pen.forward(200)
pen.penup()
pen.setpos(0, 60)
pen.pendown()
```
Код, приведенный выше рисует три параллельных линии друг над другом.
С помощью команды color() мы можем изменить цвет линий
В команду color() нужно передать цвет
```python
import turtle
pen = turtle.Pen()
pen.color('red')
pen.forward(200)
pen.penup()
pen.setpos(0, 20)
pen.pendown()
pen.color('blue')
pen.forward(200)
```
Экспериментируйте! Вот доступные цвета:
* red
* blue
* green
* yellow
* orange
* purple
* pink
* violet
И еще много других цветов
Задачи
1. Нарисуйте квадрат
2. Нарисуйте квадрат, у которого каждая сторона имеет свой цвет
3. Нарисуйте треугольник
4. Разноцветный треугольник
5. Много-много параллельных линий
6. Проявите фантазию, создайте свое неповторимое произведение
# Урок 2
Несколько полезных методов для изменения внешнего вида:
Метод bgcolor получает в качестве аргумента строковую переменную и изменяет цвет фона окна
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold') # Цвет фона будет золотым
```
Метод width изменяет толщину пера. Он принимает в качестве аргумента целое число.
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5) # Толщина линий станет 5 пикселей
```
Методы pu и pd позволяют поднять и опустить перо. Они используются, когда нам нужно переместить перо с помощью метода setpos.
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.forward(100)
p.pu() # Подняли перо
p.setpos(-100, -100) # Переместили перо в точку с координатами (-100, -100)
p.pd() # Опустили перо
```
Метод cirle рисует окружность. Он принимает в качестве аргумента целое число - радиус окружности в пикселях.
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
p.circle(100) # Окружность с радиусом 100 пикселей
```
Циклы и рисование фигур
В прошлой статье мы рисовали квадрат с помощью последовательного перечисления операций. Это совсем неудобно. Есть способ сократить этот код. Для полного понимания прочтите статью про цикл for.
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
for i in range(4): # ОБРАТИТЕ ВНИМАНИЕ, КОМАНДА НА СЛЕДУЮЩЕЙ СТРОЧКЕ ПОСЛЕ
p.forward(100) # ДВОЕТОЧИЯ ИМЕЕТ ОТСТУП В ЧЕТЫРЕ ПРОБЕЛА
p.left(90)
```
В примере, приведенном выше я использовал цикл for для повторения двух команд четыре раза. Давайте нарисуем пятиугольник. Я добавлю дополнительную переменную в наш код, в которой буду сохранять количество сторон
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = 5 # Количество сторон
for i in range(number_sides): # Повторяем 5 раз
p.forward(100)
p.left(360 / number_sides) # Делаем поворот черепашки на 72 градуса
```
Таким образом, мы можем нарисовать пятиугольник. Изменив всего одну переменную, получаем шестиугольник
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = 6 # Поменяли на 6
for i in range(number_sides):
p.forward(100)
p.left(360 / number_sides)
```
Поэкспериментируйте
Вложенные циклы
Мы можем выполнять один цикл в другом, например, нарисовать треугольник с тремя внешними треугольниками:
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = 3 # Поменяли на 6
for i in range(number_sides):
p.forward(100)
p.left(360 / number_sides)
for i in range(number_sides): # ОБРАТИТЕ ВНИМАНИЕ, КОМАНДА НА СЛЕДУЮЩЕЙ СТРОЧКЕ ИМЕЕТ
p.forward(50) # ОТСТУП В ЧЕТЫРЕ ПРОБЕЛА
p.right(360 / number_sides)
```
Треугольник с квадратами:
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = 3 # Поменяли на 6
for i in range(number_sides):
p.forward(100)
p.right(360 / number_sides)
for i in range(4): # Меняем number_sides на 4
p.forward(50)
p.right(360 / 4) # Меняем number_sides на 4
```
Больше вложенных циклов!!!!
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = 3 # Поменяли на 6
for i in range(number_sides):
p.forward(100)
p.left(360 / number_sides)
for i in range(number_sides):
p.forward(50)
p.right(360 / number_sides)
for i in range(number_sides):
p.forward(20)
p.right(360 / number_sides)
```
Прием количества сторон от пользователя:
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
number_sides = int(input()) # Приняли число от пользователя
for i in range(number_sides): # ОБРАТИТЕ ВНИМАНИЕ, КОМАНДА НА СЛЕДУЮЩЕЙ СТРОЧКЕ ПОСЛЕ
p.forward(100) # ДВОЕТОЧИЯ ИМЕЕТ ОТСТУП В ЧЕТЫРЕ ПРОБЕЛА
p.left(360 / number_sides)
```
Задаем позиции для квадратиков:
```python
import turtle
p = turtle.Pen()
turtle.bgcolor('gold')
p.width(5)
p.color('dodgerblue')
squares = int(input('Введите количество квадратиков: ')) # Приняли число от пользователя
for i in range(squares): # Делаем цикл для рисования каждого квадрата
x = int(input('Введите координату х: '))
y = int(input('Введите координату y: '))
p.pu()
p.setpos(x,y)
p.pd()
for k in range(4): # ОБРАТИТЕ ВНИМАНИЕ, КОМАНДА НА СЛЕДУЮЩЕЙ СТРОЧКЕ ПОСЛЕ
p.forward(100) # ДВОЕТОЧИЯ ИМЕЕТ ОТСТУП В ЧЕТЫРЕ ПРОБЕЛА
p.left(90)
```
Задачи
1. Напишите программу, которая принимает от пользователя длину стороны квадрата и рисует его
2. Напишите программу, которая рисует 5 разноцветных треугольников в различных местах окна (использовать перенос пера с помощью pu, setpos, pd)
3. Напишите программу, которая принимает от пользователя количество кругов для отрисовки и рисует эти круги в разных местах окна
4. Напишите программу, которая принимает количество сторон многоугольника, длину стороны многоугольника и рисует его.
5. Напишите программу, которая принимает количество сторон многоугольника, длину стороны многоугольника и его позицию и рисует его.
6. Творческое задание: напишите две-три программы использующие максимальное количество полученной от статьи информации.

File diff suppressed because it is too large Load Diff

@ -1,13 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:mobile="http://www.google.com/schemas/sitemap-mobile/1.0" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
<url><loc>https://edu.krasnikov.pro/posts/exam/minimum-knowledge-of-python</loc><lastmod>2023-10-17T17:59:34.071Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/informatics/ms-word</loc><lastmod>2023-10-17T17:59:34.072Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/informatics/python-task</loc><lastmod>2023-10-17T17:59:34.072Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/informatics/python-well</loc><lastmod>2023-10-17T17:59:34.072Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/informatics/textbook-python</loc><lastmod>2023-10-17T17:59:34.072Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/olimp/practice-test-10-11-robotics</loc><lastmod>2023-10-17T17:59:34.072Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/olimp/practice-test-5-6-robotics</loc><lastmod>2023-10-17T17:59:34.072Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts</loc><lastmod>2023-10-17T17:59:34.072Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro</loc><lastmod>2023-10-17T17:59:34.072Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/about</loc><lastmod>2023-10-17T17:59:34.072Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts</loc><lastmod>2023-11-08T04:40:37.596Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro</loc><lastmod>2023-11-08T04:40:37.597Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/about</loc><lastmod>2023-11-08T04:40:37.597Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/exam/minimum-knowledge-of-python</loc><lastmod>2023-11-08T04:40:37.597Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/informatics/ms-power</loc><lastmod>2023-11-08T04:40:37.597Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/informatics/ms-word</loc><lastmod>2023-11-08T04:40:37.597Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/informatics/python-pygames</loc><lastmod>2023-11-08T04:40:37.597Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/informatics/python-task</loc><lastmod>2023-11-08T04:40:37.597Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/informatics/python-turtle</loc><lastmod>2023-11-08T04:40:37.597Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/informatics/python-well</loc><lastmod>2023-11-08T04:40:37.597Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
<url><loc>https://edu.krasnikov.pro/posts/textbook/python</loc><lastmod>2023-11-08T04:40:37.597Z</lastmod><changefreq>daily</changefreq><priority>0.7</priority></url>
</urlset>
Loading…
Cancel
Save