From 0e9d8dfbe112dabbc4fea7c4ebed4c5a3afc21de Mon Sep 17 00:00:00 2001 From: joker Date: Wed, 8 Nov 2023 07:42:05 +0300 Subject: [PATCH] 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 --- content/posts/informatics/python-pygames.mdx | 630 +++++++++ content/posts/informatics/python-turtle.mdx | 307 ++++ content/posts/textbook/python.mdx | 1333 +++++++++++++++++- public/sitemap-0.xml | 21 +- 4 files changed, 2276 insertions(+), 15 deletions(-) create mode 100644 content/posts/informatics/python-pygames.mdx create mode 100644 content/posts/informatics/python-turtle.mdx diff --git a/content/posts/informatics/python-pygames.mdx b/content/posts/informatics/python-pygames.mdx new file mode 100644 index 0000000..2808909 --- /dev/null +++ b/content/posts/informatics/python-pygames.mdx @@ -0,0 +1,630 @@ +--- +title: Библиотека Pygame Python +excerpt: Библиотека для разработки игр Pygame +date: '2023-11-08' +tags: + - Информатика + - Программирование + - Python + - Задачи + - Pygame +--- + + +- [Урок 1](#урок-1) +- [Урок 2](#урок-2) + + +# Урок 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.Нарисуйте оранжевую, красную, синию и фиолетовую звезды + + +- [Урок 1](#урок-1) +- [Урок 2](#урок-2) + + +# Урок №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. + + +- [Урок 1](#урок-1) +- [Урок 2](#урок-2) + \ No newline at end of file diff --git a/content/posts/informatics/python-turtle.mdx b/content/posts/informatics/python-turtle.mdx new file mode 100644 index 0000000..574fbd8 --- /dev/null +++ b/content/posts/informatics/python-turtle.mdx @@ -0,0 +1,307 @@ +--- +title: Библиотека Python Turtle +excerpt: Графическая библиотека turtle +date: '2023-11-08' +tags: + - Информатика + - Программирование + - Python + - Turtle +--- + + + +- [Урок 1](#урок-1) +- [Урок 2](#урок-2) + + + +# Урок 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. Творческое задание: напишите две-три программы использующие максимальное количество полученной от статьи информации. \ No newline at end of file diff --git a/content/posts/textbook/python.mdx b/content/posts/textbook/python.mdx index 2c2a08b..84d8c95 100644 --- a/content/posts/textbook/python.mdx +++ b/content/posts/textbook/python.mdx @@ -15,6 +15,11 @@ tags: - [2. Операторы в Python](#2-операторы-в-python) - [3. Условный оператор в Python](#3-условный-оператор-в-python) - [4. Цикл for в Python](#4-цикл-for-в-python) +- [5. Цикл while в Python](#5-цикл-while-в-python) +- [6. Списки в Python](#6-списки-в-python) +- [7. Методы работы со списками в Python](#7-методы-работы-со-списками-в-python) +- [8. Функции в python](#8-функции-в-python) +- [9. Словари в python](#9-словари-в-python) @@ -336,7 +341,11 @@ n школьников делят k яблок поровну, неделящи - [2. Операторы в Python](#2-операторы-в-python) - [3. Условный оператор в Python](#3-условный-оператор-в-python) - [4. Цикл for в Python](#4-цикл-for-в-python) - +- [5. Цикл while в Python](#5-цикл-while-в-python) +- [6. Списки в Python](#6-списки-в-python) +- [7. Методы работы со списками в Python](#7-методы-работы-со-списками-в-python) +- [8. Функции в python](#8-функции-в-python) +- [9. Словари в python](#9-словари-в-python) @@ -697,6 +706,11 @@ print(not 1 == 0 or 2 == 0) # True, значение первого услови - [2. Операторы в Python](#2-операторы-в-python) - [3. Условный оператор в Python](#3-условный-оператор-в-python) - [4. Цикл for в Python](#4-цикл-for-в-python) +- [5. Цикл while в Python](#5-цикл-while-в-python) +- [6. Списки в Python](#6-списки-в-python) +- [7. Методы работы со списками в Python](#7-методы-работы-со-списками-в-python) +- [8. Функции в python](#8-функции-в-python) +- [9. Словари в python](#9-словари-в-python) @@ -986,9 +1000,13 @@ else: - [2. Операторы в Python](#2-операторы-в-python) - [3. Условный оператор в Python](#3-условный-оператор-в-python) - [4. Цикл for в Python](#4-цикл-for-в-python) +- [5. Цикл while в Python](#5-цикл-while-в-python) +- [6. Списки в Python](#6-списки-в-python) +- [7. Методы работы со списками в Python](#7-методы-работы-со-списками-в-python) +- [8. Функции в python](#8-функции-в-python) +- [9. Словари в python](#9-словари-в-python) - ## 4. Цикл for в Python Цикл в любом языке программирования - это многократное выполнение одного и то же действия. @@ -1192,11 +1210,28 @@ for x in range(10, 20, 3): # range(10, 20, 3) -> 10, 13, 16, 19 # Вывод: >> 2.283 ``` -Цикл while в Python -Назад в начало + + + +- [1. Ввод и вывод данных в Python](#1-ввод-и-вывод-данных-в-python) +- [2. Операторы в Python](#2-операторы-в-python) +- [3. Условный оператор в Python](#3-условный-оператор-в-python) +- [4. Цикл for в Python](#4-цикл-for-в-python) +- [5. Цикл while в Python](#5-цикл-while-в-python) +- [6. Списки в Python](#6-списки-в-python) +- [7. Методы работы со списками в Python](#7-методы-работы-со-списками-в-python) +- [8. Функции в python](#8-функции-в-python) +- [9. Словари в python](#9-словари-в-python) + + + + +## 5. Цикл while в Python + Цикл while ("пока") позволяет выполнить одну и ту же последовательность действий, пока проверяемое условие истинно. Условие записывается после ключевого слова while и проверяется до выполнения тела цикла. Цикл while используется, когда невозможно определить точное количество повторений цикла. + ```python i = 0 # объявление переменной i для условия цикла while i < 5: # ключевое слово 'while' и условие выполнение цикла @@ -1470,4 +1505,1292 @@ print(f'Наименьший делитель равен {div}') >> 8 # Вывод: >> 21 -``` \ No newline at end of file +``` + + + +- [1. Ввод и вывод данных в Python](#1-ввод-и-вывод-данных-в-python) +- [2. Операторы в Python](#2-операторы-в-python) +- [3. Условный оператор в Python](#3-условный-оператор-в-python) +- [4. Цикл for в Python](#4-цикл-for-в-python) +- [5. Цикл while в Python](#5-цикл-while-в-python) +- [6. Списки в Python](#6-списки-в-python) +- [7. Методы работы со списками в Python](#7-методы-работы-со-списками-в-python) +- [8. Функции в python](#8-функции-в-python) +- [9. Словари в python](#9-словари-в-python) + + + +## 6. Списки в Python + +Список - это непрерывная динамическая коллекция элементов. Каждому элементу списка присваивается порядковый номер - его индекс. Первый индекс равен нулю, второй - единице и так далее. Основные операции для работы со списками - это индексирование, срезы, добавление и удаление элементов, а также проверка на наличие элемента в последовательности. + +Создание пустого списка выглядит так: +```python +empty_list = [] +``` +Создадим список, состоящий из нескольких чисел: +```python +numbers = [40, 20, 90, 11, 5] +``` +Настало время строковых переменных: +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +``` +Не будем забывать и о дробях: +```python +fractions = [3.14, 2.72, 1.41, 1.73, 17.9] +``` +Мы можем создать список, состоящий из различных типов данных: +```python +values = [3.14, 10, 'Hello world!', False, 'Python is the best'] +``` +И такое возможно (⊙_⊙) +```python +list_of_lists = [[2, 4, 0], [11, 2, 10], [0, 19, 27]] +``` +Индексирование +Что же такое индексирование? Это загадочное слово обозначает операцию обращения к элементу по его порядковому номеру ( ( ・ω・)ア напоминаю, что нумерация начинается с нуля). Проиллюстрируем это на примере: +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +print(fruits[0]) +print(fruits[1]) +print(fruits[4]) +``` +```python +>>> Apple +>>> Grape +>>> Orange +``` +Списки в Python являются изме­няемым типом данных. Мы можем изменять содер­жимое каждой из ячеек: +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +fruits[0] = 'Watermelon' +fruits[3] = 'Lemon' +print(fruits) +``` +```python +>>> ['Watermelon', 'Grape', 'Peach', 'Lemon', 'Orange'] +``` +Индексирование работает и в обратную сторону. Как такое возможно? Всё просто, мы обра­щаемся к элементу списка по отрица­тельному индексу. Индекс с номе­ром -1 дает нам доступ к после­днему элементу, -2 к предпоследнему и так далее. +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +print(fruits[-1]) +print(fruits[-2]) +print(fruits[-3]) +print(fruits[-4]) +``` +```python +>>> Orange +>>> Banan +>>> Peach +>>> Grape +``` +Создание списка с помощью list() +Переходим к способам создания списка. Самый простой из них был приведен выше. Еще раз для закрепления: +```python +smiles = ['(ಠ_ಠ)', '( ̄﹃ ̄)', '( ͡° ͜ʖ ͡°)', '(╮°-°)╮'] +``` +А есть еще способы? Да, есть. Один из них — создание списка с помощью функции list() В неё мы можем передать любой итерируемый объект (да-да, тот самый по которому можно запустить цикл (• ᵕ •) ) + +Рассмотрим несколько примеров: +```python +letters = list('abcdef') +numbers = list(range(10)) +even_numbers = list(range(0, 10, 2)) +print(letters) +print(numbers) +print(even_numbers) +``` + +```python +>>> ['a', 'b', 'c', 'd', 'e', 'f'] +>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +>>> [0, 2, 4, 6, 8] +``` +Длина списка +С созданием списка вроде ра­зобрались. Следующий вопрос: как узнать длину списка? Можно, конечно, просто посчитать количество элементов... (⊙_⊙) Но есть способ получше! Функция len() возвращает длину любой итерируемой переменной, переменной, по которой можно запустить цикл. Рассмотрим пример: + +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +print(len(fruits)) +``` + +```python +>>> 5 +``` +```python +numbers = [40, 20, 90] +print(len(numbers)) +``` +```python +>>> 3 +``` +"...любой итерируемой", а это значит: +```python +string = 'Hello world' +print(len(string)) +# 11 +``` +```python +>>> 11 +``` + +```python +print(len(range(10))) +``` +```python +>>> 10 +``` +Срезы +В начале статьи что-то гово­рилось о "срезах". Давайте разберем подробнее, что это такое. Срезом называется неко­торая подпос­ледователь­ность. Принцип действия срезов очень прост: мы "отре­заем" кусок от исходной последова­тель­ности элемента, не меняя её при этом. Я сказал "последо­вательность", а не "спи­сок", потому что срезы работают и с другими итерируемыми типами данных, например, со строками. +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +part_of_fruits = fruits[0:3] +print(part_of_fruits) +``` +```python +>>> ['Apple', 'Grape', 'Peach'] +``` +Детально рассмотрим синтаксис срезов: + +итерируемая_переменная[начальный_индекс:конечный_индекс - 1:длина_шага] + +Обращаю ваше внимание, что мы делаем срез от начального индекса до конечного индекса - 1. То есть i = начальный_индекс и i < конечный индекс + +Больше примеров! +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +print(fruits[0:1]) +# Если начальный индекс равен 0, то его можно опустить +print(fruits[:2]) +print(fruits[:3]) +print(fruits[:4]) +print(fruits[:5]) +# Если конечный индекс равен длине списка, то его тоже можно опустить +print(fruits[:len(fruits)]) +print(fruits[::]) +``` +```python +>>> ['Apple'] +>>> ['Apple', 'Grape'] +>>> ['Apple', 'Grape', 'Peach'] +>>> ['Apple', 'Grape', 'Peach', 'Banan'] +>>> ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +>>> ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +>>> ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +``` +Самое время понять, что делает третий параметр среза - длина шага! +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +print(fruits[::2]) +print(fruits[::3]) +# Длина шага тоже может быть отрицательной! +print(fruits[::-1]) +print(fruits[4:2:-1]) +print(fruits[3:1:-1]) +``` +```python +>>> ['Apple', 'Peach', 'Orange'] +>>> ['Apple', 'Banan'] +>>> ['Orange', 'Banan', 'Peach', 'Grape', 'Apple'] +>>> ['Orange', 'Banan'] +>>> ['Banan', 'Peach'] +``` +А теперь вспоминаем всё, что мы знаем о циклах. В Python их целых два! Цикл for и цикл while Нас интересует цикл for, с его помощью мы можем перебирать зна­чения и индексы наших последовательностей. Начнем с перебора значений: +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +for fruit in fruits: + print(fruit, end=' ') +``` +```python +>>> Apple Grape Peach Banan Orange +``` +Выглядит несложно, правда? В переменную fruit объявлен­ную в цикле по очереди записываются значения всех элементов списка fruits + +А что там с перебором индексов? +```python +for index in range(len(fruits)): + print(fruits[index], end=' ') +``` +Этот пример гораздо интереснее предыдущего! Что же здесь происходит? Для начала разбе­ремся, что делает функция range(len(fruits)) + +Мы с вами знаем, что функция len() возвращает длину списка, а range() генерирует диапазон целых чисел от 0 до len()-1. + +Сложив 2+2, мы получим, что переменная index принимает значения в диапазоне от 0 до len()-1. Идем дальше, fruits[index] - это обращение по индексу к элементу с индексом index списка fruits. А так как переменная index принимает значения всех индексов списка fruits, то в цикле мы переберем значения всех элементов нашего списка! + +Операция in +С помощью in мы можем проверить наличие элемента в списке, строке и любой другой итерируемой переменной. +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +if 'Apple' in fruits: + print('В списке есть элемент Apple') +``` +```python +>>> В списке есть элемент Apple +``` +```python +fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +if 'Lemon' in fruits: + print('В списке есть элемент Lemon') +else:' + print('В списке НЕТ элемента Lemon') +``` +```python +>>> В списке НЕТ элемента Lemon +``` +Приведу более сложный пример: +```python +all_fruits = ['Apple', 'Grape', 'Peach', 'Banan', 'Orange'] +my_favorite_fruits = ['Apple', 'Banan', 'Orange'] +for item in all_fruits: + if item in my_favorite_fruits: + print(item + ' is my favorite fruit') + else: + print('I do not like ' + item) + +>>> Apple is my favorite fruit +>>> I do not like Grape +>>> I do not like Peach +>>> Banan is my favorite fruit +>>> Orange is my favorite fruit +``` +Методы для работы со списками +Начнем с метода append(), который добавляет элемент в конец списка: +```python +# Создаем список, состоящий из четных чисел от 0 до 8 включительно +numbers = list(range(0,10,2)) +# Добавляем число 200 в конец списка +numbers.append(200) +numbers.append(1) +numbers.append(2) +numbers.append(3) +print(numbers) +``` +```python +>>> [0, 2, 4, 6, 8, 200, 1, 2, 3] +``` +Мы можем передавать методу append() абсолютно любые значения: +```python +all_types = [10, 3.14, 'Python', ['I', 'am', 'list']] +all_types.append(1024) +all_types.append('Hello world!') +all_types.append([1, 2, 3]) +print(all_types) +``` +```python +>>> [10, 3.14, 'Python', ['I', 'am', 'list'], 1024, 'Hello world!', [1, 2, 3]] +``` +Метод append() отлично выпол­няет свою функцию. Но, что делать, если нам нужно добавить элемент в сере­дину списка? Это умеет метод insert(). Он добавляет элемент в список на произ­вольную позицию. insert() принимает в качестве первого аргу­мента позицию, на которую нужно вставить элемент, а вторым — сам элемент. +```python +# Создадим список чисел от 0 до 9 +numbers = list(range(10)) +# Добавление элемента 999 на позицию с индексом 0 +numbers.insert(0, 999) +print(numbers) # первый print +numbers.insert(2, 1024) +print(numbers) # второй print +numbers.insert(5, 'Засланная строка-шпион') +print(numbers) # третий print +``` +```python +>>> [999, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # первый print +>>> [999, 0, 1024, 1, 2, 3, 4, 5, 6, 7, 8, 9] # второй print +>>> [999, 0, 1024, 1, 2, 'Засланная строка-шпион', 3, 4, 5, 6, 7, 8, 9] # третий print +``` +Отлично! Добавлять элементы в список мы научи­лись, осталось понять, как их из него удалять. Метод pop() удаляет эле­мент из списка по его индексу: +```python +numbers = list(range(10)) +print(numbers) # 1 +# Удаляем первый элемент +numbers.pop(0) +print(numbers) # 2 +numbers.pop(0) +print(numbers) # 3 +numbers.pop(2) +print(numbers) # 4 +# Чтобы удалить последний элемент, вызовем метод pop без аргументов +numbers.pop() +print(numbers) # 5 +numbers.pop() +print(numbers) # 6 +``` +```python +>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 1 +>>> [1, 2, 3, 4, 5, 6, 7, 8, 9] # 2 +>>> [2, 3, 4, 5, 6, 7, 8, 9] # 3 +>>> [2, 3, 5, 6, 7, 8, 9] # 4 +>>> [2, 3, 5, 6, 7, 8] # 5 +>>> [2, 3, 5, 6, 7] # 6 +``` +Теперь мы знаем, как удалять элемент из списка по его инде­ксу. Но что, если мы не знаем индекса элемента, но знаем его значение? Для такого случая у нас есть метод remove(), кото­рый удаляет пер­вый найденный по значению элемент в списке. +```python +all_types = [10, 'Python', 10, 3.14, 'Python', ['I', 'am', 'list']] +all_types.remove(3.14) +print(all_types) # 1 +all_types.remove(10) +print(all_types) # 2 +all_types.remove('Python') +print(all_types) # 3 +``` +```python +>>> [10, 'Python', 10, 'Python', ['I', 'am', 'list']] # 1 +>>> ['Python', 10, 'Python', ['I', 'am', 'list']] # 2 +>>> [10, 'Python', ['I', 'am', 'list']] # 3 +``` +А сейчас немного посчитаем, посчитаем эле­менты списка с помощью метода count() +```python +numbers = [100, 100, 100, 200, 200, 500, 500, 500, 500, 500, 999] +print(numbers.count(100)) # 1 +print(numbers.count(200)) # 2 +print(numbers.count(500)) # 3 +print(numbers.count(999)) # 4 +``` +```python +>>> 3 # 1 +>>> 2 # 2 +>>> 5 # 3 +>>> 1 # 4 +``` +В программировании, как и в жизни, проще работать с упоря­доченными дан­ными, в них легче ори­енти­ро­ваться и что-либо искать. Метод sort() сорти­рует список по воз­раста­нию значений его элементов. +```python +numbers = [100, 2, 11, 9, 3, 1024, 567, 78] +numbers.sort() +print(numbers) # 1 +fruits = ['Orange', 'Grape', 'Peach', 'Banan', 'Apple'] +fruits.sort() +print(fruits) # 2 +``` +```python +>>> [2, 3, 9, 11, 78, 100, 567, 1024] # 1 +>>> ['Apple', 'Banan', 'Grape', 'Orange', 'Peach'] # 2 +``` +Мы можем изменять порядок сортировки с помощью пара­метра reverse. По умол­чанию этот параметр равен False +```python +fruits = ['Orange', 'Grape', 'Peach', 'Banan', 'Apple'] +fruits.sort() +print(fruits) # 1 +fruits.sort(reverse=True) +print(fruits) # 2 +``` +```python +>>> ['Apple', 'Banan', 'Grape', 'Orange', 'Peach'] # 1 +>>> ['Peach', 'Orange', 'Grape', 'Banan', 'Apple'] # 2 +``` +Иногда нам нужно перевернуть список, не спраши­вайте меня зачем... Для этого в самом лучшем языке прог­рам­миро­вания на этой планете JavaScr..­Python есть метод reverse(): +```python +numbers = [100, 2, 11, 9, 3, 1024, 567, 78] +numbers.reverse() +print(numbers) # 1 +fruits = ['Orange', 'Grape', 'Peach', 'Banan', 'Apple'] +fruits.reverse() +print(fruits) # 2 +``` +```python +>>> [78, 567, 1024, 3, 9, 11, 2, 100] # 1 +>>> ['Apple', 'Banan', 'Peach', 'Grape', 'Orange'] # 2 +``` +Допустим, у нас есть два списка и нам нужно их объединить. Програм­мисты на C++ cразу же кинулись писать циклы for, но мы пишем на python, а в python у спис­ков есть полез­ный метод extend(). Этот метод вызы­вается для одного списка, а в качестве аргу­мента ему пере­дается другой список, extend() запи­сывает в конец первого из них начало вто­рого: +```python +fruits = ['Banana', 'Apple', 'Grape'] +vegetables = ['Tomato', 'Cucumber', 'Potato', 'Carrot'] +fruits.extend(vegetables) +print(fruits) +``` +```python +>>> ['Banana', 'Apple', 'Grape', 'Tomato', 'Cucumber', 'Potato', 'Carrot'] +``` +В природе существует специ­аль­ный метод для очистки списка — clear() +```python +fruits = ['Banana', 'Apple', 'Grape'] +vegetables = ['Tomato', 'Cucumber', 'Potato', 'Carrot'] +fruits.clear() +vegetables.clear() +print(fruits) +print(vegetables) +``` +```python +>>> [] +>>> [] +``` +Осталось совсем чуть-чуть всего лишь пара мето­дов, так что делаем последний рывок! Метод index() возв­ращает индекс эле­мента. Рабо­тает это так: вы пере­даете в качестве аргу­мента в index() значение элемента, а метод возв­ращает его индекс: +```python +fruits = ['Banana', 'Apple', 'Grape'] +print(fruits.index('Apple')) +print(fruits.index('Banana')) +print(fruits.index('Grape')) +``` +```python +>>> 1 +>>> 0 +>>> 2 +``` +Финишная прямая! Метод copy(), только не падайте, копирует список и возвра­щает его брата-близнеца. Вообще, копи­ро­вание списков - это тема доста­точно инте­ресная, давай­те рас­смотрим её по-подробнее. + +Во-первых, если мы просто прис­воим уже сущест­вующий список новой пере­менной, то на первый взгляд всё выглядит неплохо: +```python +fruits = ['Banana', 'Apple', 'Grape'] +new_fruits = fruits +print(fruits) +print(new_fruits) +``` +```python +>>> ['Banana', 'Apple', 'Grape'] +>>> ['Banana', 'Apple', 'Grape'] +``` +Но есть одно маленькое "НО": +```python +fruits = ['Banana', 'Apple', 'Grape'] +new_fruits = fruits +fruits.pop() +print(fruits) +print(new_fruits) +``` +```python +# Внезапно, из списка new_fruits исчез последний элемент +>>> ['Banana', 'Apple'] +>>> ['Banana', 'Apple'] +``` +При прямом присваивании спис­ков копи­рования не проис­ходит. Обе пере­менные начи­нают ссылаться на один и тот же список! То есть если мы изме­ним один из них, то изме­нится и другой. Что же тогда делать? Пользоваться методом copy(), конечно: +```python +fruits = ['Banana', 'Apple', 'Grape'] +new_fruits = fruits.copy() +fruits.pop() +print(fruits) +print(new_fruits) +``` + +```python +>>> ['Banana', 'Apple'] +>>> ['Banana', 'Apple', 'Grape'] +``` +Отлично! Но что если у нас список в списке? Скопируется ли внутренний список с помощью метода copy() — нет: +```python +fruits = ['Banana', 'Apple', 'Grape', ['Orange','Peach']] +new_fruits = fruits.copy() +fruits[-1].pop() +print(fruits) # 1 +print(new_fruits) # 2 +``` + +```python +>>> ['Banana', 'Apple', 'Grape', ['Orange']] # 1 +>>> ['Banana', 'Apple', 'Grape', ['Orange']] # 2 +``` +Решение задач +1. Создайте список из 10 четных чисел и выведите его с помощью цикла for + +2. Создайте список из 5 элементов. Сделайте срез от второго индекса до четвертого + +3. Создайте пустой список и добавьте в него 10 случайных чисел и выведите их. В данной задаче нужно использовать функцию randint. + +```python +from random import randint +n = randint(1, 10) # Случайное число от 1 до 10 +``` + +4.Удалите все элементы из списка, созданного в задании 3 + +5.Создайте список из введенной пользователем строки и удалите из него символы 'a', 'e', 'o' + +6.Даны два списка, удалите все элементы первого списка из второго + +```python +a = [1, 3, 4, 5] +b = [4, 5, 6, 7] +# Вывод +>>> [6, 7] +``` + +7.Создайте список из случайных чисел и найдите наибольший элемент в нем. + +8.Найдите наименьший элемент в списке из задания 7 + +9.Найдите сумму элементов списка из задания 7 + +10.Найдите среднее арифметическое элементов списка из задания 7 + +Сложные задачи +1.Создайте список из случайных чисел. Найдите номер его последнего локального максимума (локальный максимум — это элемент, который больше любого из своих соседей). + +2.Создайте список из случайных чисел. Найдите максимальное количество его одинаковых элементов. + +3.Создайте список из случайных чисел. Найдите второй максимум. + +```python +a = [1, 2, 3] # Первый максимум == 3, второй == 2 +``` +4.Создайте список из случайных чисел. Найдите количество различных элементов в нем. + + + +- [1. Ввод и вывод данных в Python](#1-ввод-и-вывод-данных-в-python) +- [2. Операторы в Python](#2-операторы-в-python) +- [3. Условный оператор в Python](#3-условный-оператор-в-python) +- [4. Цикл for в Python](#4-цикл-for-в-python) +- [5. Цикл while в Python](#5-цикл-while-в-python) +- [6. Списки в Python](#6-списки-в-python) +- [7. Методы работы со списками в Python](#7-методы-работы-со-списками-в-python) +- [8. Функции в python](#8-функции-в-python) +- [9. Словари в python](#9-словари-в-python) + + + +## 7. Методы работы со списками в Python + +Список - это изме­няемый и последовательный тип данных. Это значит, что мы можем добавлять, удалять и изменять любые элементы списка. + +Начнем с метода append(), который добавляет элемент в конец списка: + +```python +# Создаем список, состоящий из четных чисел от 0 до 8 включительно +numbers = list(range(0,10,2)) +# Добавляем число 200 в конец списка +numbers.append(200) +print(numbers) +# [0, 2, 4, 6, 8, 200] +numbers.append(1) +numbers.append(2) +numbers.append(3) +print(numbers) +# [0, 2, 4, 6, 8, 200, 1, 2, 3] +``` + +Мы можем передавать методу append() абсолютно любые значения: + +```python +all_types = [10, 3.14, 'Python', ['I', 'am', 'list']] +all_types.append(1024) +all_types.append('Hello world!') +all_types.append([1, 2, 3]) +print(all_types) +# [10, 3.14, 'Python', ['I', 'am', 'list'], 1024, 'Hello world!', [1, 2, 3]] +``` +Метод append() отлично выпол­няет свою функцию. Но, что делать, если нам нужно добавить элемент в сере­дину списка? Это умеет метод insert(). Он добавляет элемент в список на произ­вольную позицию. insert() принимает в качестве первого аргу­мента позицию, на которую нужно вставить элемент, а вторым — сам элемент. +```python +# Создадим список чисел от 0 до 9 +numbers = list(range(10)) +# Добавление элемента 999 на позицию с индексом 0 +numbers.insert(0, 999) +print(numbers) +# [999, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +numbers.insert(2, 1024) +print(numbers) +# [999, 0, 1024, 1, 2, 3, 4, 5, 6, 7, 8, 9] +numbers.insert(5, 'Засланная строка-шпион') +print(numbers) +# [999, 0, 1024, 1, 2, 'Засланная строка-шпион', 3, 4, 5, 6, 7, 8, 9] +``` + +Отлично! Добавлять элементы в список мы научи­лись, осталось понять, как их из него удалять. Метод pop() удаляет эле­мент из списка по его индексу: + +```python +numbers = list(range(10)) +print(numbers) +# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] +# Удаляем первый элемент +numbers.pop(0) +print(numbers) +# [1, 2, 3, 4, 5, 6, 7, 8, 9] +numbers.pop(0) +print(numbers) +# [2, 3, 4, 5, 6, 7, 8, 9] +numbers.pop(2) +print(numbers) +# [2, 3, 5, 6, 7, 8, 9] +# Чтобы удалить последний элемент, вызовем метод pop без аргументов +numbers.pop() +print(numbers) +# [2, 3, 5, 6, 7, 8] +numbers.pop() +print(numbers) +# [2, 3, 5, 6, 7] +``` +Теперь мы знаем, как удалять элемент из списка по его инде­ксу. Но что, если мы не знаем индекса элемента, но знаем его значение? Для такого случая у нас есть метод remove(), кото­рый удаляет пер­вый найденный по значению элемент в списке. + +```python +all_types = [10, 'Python', 10, 3.14, 'Python', ['I', 'am', 'list']] +all_types.remove(3.14) +print(all_types) +# [10, 'Python', 10, 'Python', ['I', 'am', 'list']] +all_types.remove(10) +print(all_types) +# ['Python', 10, 'Python', ['I', 'am', 'list']] +all_types.remove('Python') +print(all_types) # [10, 'Python', ['I', 'am', 'list']] +``` +А сейчас немного посчитаем, посчитаем эле­менты списка с помощью метода count() + +```python +numbers = [100, 100, 100, 200, 200, 500, 500, 500, 500, 500, 999] +print(numbers.count(100)) +# 3 +print(numbers.count(200)) +# 2 +print(numbers.count(500)) +# 5 +print(numbers.count(999)) +# 1 +``` + +В программировании, как и в жизни, проще работать с упоря­доченными дан­ными, в них легче ори­енти­ро­ваться и что-либо искать. Метод sort() сорти­рует список по воз­раста­нию значений его элементов. + +```python +numbers = [100, 2, 11, 9, 3, 1024, 567, 78] +numbers.sort() +print(numbers) +# [2, 3, 9, 11, 78, 100, 567, 1024] +fruits = ['Orange', 'Grape', 'Peach', 'Banan', 'Apple'] +fruits.sort() +print(fruits) +# ['Apple', 'Banan', 'Grape', 'Orange', 'Peach'] +``` + +Мы можем изменять порядок сортировки с помощью пара­метра reverse. По умол­чанию этот параметр равен False + +```python +fruits = ['Orange', 'Grape', 'Peach', 'Banan', 'Apple'] +fruits.sort() +print(fruits) +# ['Apple', 'Banan', 'Grape', 'Orange', 'Peach'] +fruits.sort(reverse=True) +print(fruits) +# ['Peach', 'Orange', 'Grape', 'Banan', 'Apple'] +``` + +Иногда нам нужно перевернуть список, не спраши­вайте меня зачем... Для этого в самом лучшем языке прог­рам­миро­вания на этой планете JavaScr..­Python есть метод reverse(): + +```python +numbers = [100, 2, 11, 9, 3, 1024, 567, 78] +numbers.reverse() +print(numbers) +# [78, 567, 1024, 3, 9, 11, 2, 100] +fruits = ['Orange', 'Grape', 'Peach', 'Banan', 'Apple'] +fruits.reverse() +print(fruits) +# ['Apple', 'Banan', 'Peach', 'Grape', 'Orange'] +``` +Допустим, у нас есть два списка и нам нужно их объединить. Програм­мисты на C++ cразу же кинулись писать циклы for, но мы пишем на python, а в python у спис­ков есть полез­ный метод extend(). Этот метод вызы­вается для одного списка, а в качестве аргу­мента ему пере­дается другой список, extend() запи­сывает в конец первого из них начало вто­рого: +```python +fruits = ['Banana', 'Apple', 'Grape'] +vegetables = ['Tomato', 'Cucumber', 'Potato', 'Carrot'] +fruits.extend(vegetables) +print(fruits) +# ['Banana', 'Apple', 'Grape', 'Tomato', 'Cucumber', 'Potato', 'Carrot'] +``` + +В природе существует специ­аль­ный метод для очистки списка — clear() + +```python +fruits = ['Banana', 'Apple', 'Grape'] +vegetables = ['Tomato', 'Cucumber', 'Potato', 'Carrot'] +fruits.clear() +vegetables.clear() +print(fruits) +# [] +print(vegetables) +# [] +``` + +Осталось совсем чуть-чуть всего лишь пара мето­дов, так что делаем последний рывок! Метод index() возв­ращает индекс эле­мента. Рабо­тает это так: вы пере­даете в качестве аргу­мента в index() значение элемента, а метод возв­ращает его индекс: +```python +fruits = ['Banana', 'Apple', 'Grape'] +print(fruits.index('Apple')) +# 1 +print(fruits.index('Banana')) +# 0 +print(fruits.index('Grape')) +# 2 +``` + +Финишная прямая! Метод copy(), только не падайте, копирует список и возвра­щает его брата-близнеца. Вообще, копи­ро­вание списков - это тема доста­точно инте­ресная, давай­те рас­смотрим её по-подробнее. + +Во-первых, если мы просто прис­воим уже сущест­вующий список новой пере­менной, то на первый взгляд всё выглядит неплохо: + +```python +fruits = ['Banana', 'Apple', 'Grape'] +new_fruits = fruits +print(fruits) +# ['Banana', 'Apple', 'Grape'] +print(new_fruits) +# ['Banana', 'Apple', 'Grape'] +Но есть одно маленькое "НО": + +fruits = ['Banana', 'Apple', 'Grape'] +new_fruits = fruits +fruits.pop() +print(fruits) +# ['Banana', 'Apple'] +print(new_fruits) +# Внезапно, из списка new_fruits исчез последний элемент +# ['Banana', 'Apple'] +``` + +При прямом присваивании спис­ков копи­рования не проис­ходит. Обе пере­менные начи­нают ссылаться на один и тот же список! То есть если мы изме­ним один из них, то изме­нится и другой. Что же тогда делать? Пользоваться методом copy(), конечно: + +```python +fruits = ['Banana', 'Apple', 'Grape'] +new_fruits = fruits.copy() +fruits.pop() +print(fruits) +# ['Banana', 'Apple'] +print(new_fruits) +# ['Banana', 'Apple', 'Grape'] +``` + +Отлично! Но что если у нас список в списке? Скопируется ли внутренний список с помощью метода copy() — нет: + +```python +fruits = ['Banana', 'Apple', 'Grape', ['Orange','Peach']] +new_fruits = fruits.copy() +fruits[-1].pop() +print(fruits) +# ['Banana', 'Apple', 'Grape', ['Orange']] +print(new_fruits) +# ['Banana', 'Apple', 'Grape', ['Orange']] +``` + + + +- [1. Ввод и вывод данных в Python](#1-ввод-и-вывод-данных-в-python) +- [2. Операторы в Python](#2-операторы-в-python) +- [3. Условный оператор в Python](#3-условный-оператор-в-python) +- [4. Цикл for в Python](#4-цикл-for-в-python) +- [5. Цикл while в Python](#5-цикл-while-в-python) +- [6. Списки в Python](#6-списки-в-python) +- [7. Методы работы со списками в Python](#7-методы-работы-со-списками-в-python) +- [8. Функции в python](#8-функции-в-python) +- [9. Словари в python](#9-словари-в-python) + + + +## 8. Функции в Python + +Функция - это именованный блок кода, к которому можно обратиться из лю­бого места программы. У функции есть имя и список входных парамет­ров, а также воз­вращаемое значение. + +Функция позволяет использо­вать в про­грамме один и тот же фрагмент кода нес­колько раз. + +Oбъявление функции в Python выглядит так: + +```python +def function_name(argument1, argument2, ...): + # код функции +# def - DEclare Function - "объявить функцию" +# function_name - имя функции +# (argument1, argument2, ...) - список аргументов, поступающих на вход функции при ее вызове +# тело функции - это весь код, который идет после двоеточия +``` +```python +# Объявление функции + +def hello(name): + print('Hello, ' + name) + +# Вызовы функции + +hello('Max') +hello('Ivan') +hello('Alex') +hello('Kate') +``` +```python +# Вывод + +>> Hello, Max +>> Hello, Ivan +>> Hello, Alex +>> Hello, Kate +``` + +Оператор return возвращает значение из функции. + +Представьте себе обычный калькулятор. Вы вводите первое число, операцию и второе число. Калькулятор возвращает нам результат операции над этими числами. Всё просто, не так ли? Функции точно так же умеют возвращать значение с помощью специального оператора return. + +```python +# Объявление функции + +def sum2(a, b): + return a + b + +# Вызовы функции + +s1 = sum2(10, 2) +s2 = sum2(108, 100) +s3 = sum2(3, 1) + +print(f's1 = {s1}') +print(f's2 = {s2}') +print(f's3 = {s3}') +``` +```python +>> s1 = 12 +>> s2 = 208 +>> s3 = 4 +``` +```python +# Функция умножения двух чисел + +def mult2(a, b): + return a * b + +# Вызовем нашу функцию + +m1 = mult2(10, 2) +m2 = mult2(108, 100) +m3 = mult2(3, 1) + +print(f'm1 = {m1}') +print(f'm2 = {m2}') +print(f'm3 = {m3}') +``` +```python +>> m1 = 20 +>> m2 = 10800 +>> m3 = 3 +``` +Для параметров функции можно указывать значения по умолчанию. Это дает возможность вызывать функцию с меньшим числом параметров. +```python +# Аргумент name по умолчанию равен 'world' + +def hello(name='world'): + print('Hello, ' + name) + +hello() +hello('Ivan') +``` +```python +>> Hello, world +>> Hello, Ivan +``` + +Примеры +1. Квадрат +# Написать функцию square(), вычисляющую квадрат числа. + +def square(number): + return number * number # Возвращаем результат работы функции обратно в программу + +a = square(2) +print(a) + +>> 4 + +2. Периметр +# Напишите функцию perimetr, вычисляющую периметр прямоугольника со сторонами a и b. +```python +def perimetr(a, b): + return 2 * (a + b) + +p = perimetr(4, 3) +print(p) +``` +```python +>> 14 +``` + +3. Четное число +# Напишите функцию isEven, возвращающую True, если число четное, и False, если - нечетное. +```python +def isEven(x): + return x % 2 == 0 + +print(isEven(10)) +print(isEven(11)) +``` +```python +>> True +>> False +``` +4. Сумма списка + +```python +# Напишите функцию amountList, которая возвращает сумму всех элементов списка. + +def amountList(lst): + amount = 0 + for x in lst: + amount += x + return amount + +print(amountList([1, 2, 3])) + +mylist = [1, 2, 4, 8, 16] +s = amountList(mylist) + +print(f'Сумма списка {mylist} равна {s}') +``` +```python +>> 6 +>> Сумма списка [1, 2, 4, 8, 16] равна 31 +``` + +5. Фибоначчи +```python +# Напишите функцию fib, которая возвращает n-ное число Фибоначчи. +# Последовательность Фибоначчи выглядит так: 1 1 2 3 5 8 13 21 34 + +def fib(n): + a, b = 0, 1 + if n == 0: return 0 + for i in range(1, n): + a, b = b, a + b + return b + +print(fib(2)) +print(fib(3)) +print(fib(4)) +print(fib(5)) +print(fib(10)) +``` +```python +>> 1 +>> 2 +>> 3 +>> 5 +>> 55 +``` +6. Факториал +```python +# Напишите функцию fact, вычисляющую значение факториала числа N. +# Факториал числа - это произведение всех чисел от 1 до N. +# Например, факториал числа 5 равен 120 (5! = 120). + +def fact(n): + result = 1 + while n > 1: + result *= n + n -= 1 + return result + +print(fact(2)) +print(fact(3)) +print(fact(4)) +print(fact(5)) +``` +```python +>> 2 +>> 6 +>> 24 +>> 120 +``` +Решение задач +1. Площадь круга +Напишите функцию, которая получает в качестве аргумента радиус круга и находит его площадь. +```python +# Не забудьте написать функцию circle... + +print(circle(4)) +print(circle(1)) +``` +```python +# Вывод: +>> 50.24 +>> 3.14 +``` + +2. На три +Напишите функцию, которая возвращает True, если число делится на 3, и False, если - нет. +```python +# Не забудьте написать функцию three... + +print(three(4)) +print(three(3)) +``` +```python +# Вывод: +>> False +>> True +``` +3. Максимум в списке +Напишите функцию, которая возвращает максимальный элемент из переданного в нее списка. +```python +# Напишите функцию maxList... +mylist = [1, 3, 2] +print(maxList(mylist)) +``` +```python +# Вывод: +>> 3 +``` +4. Сколько четных +Напишите функцию, которая возвращает количество четных элементов в списке. +```python +# Напишите функцию evenCounter... +mylist = [1, 10, 2, 4, 6] +evens = evenCounter(mylist) +print(even) +``` +```python +# Вывод: +>> 4 +``` +5. Уникальные +Напишите функцию, которая возвращает список с уникальными (неповторяющихся) элементам. +```python +# Напишите функцию unique... +mylist = [1, 1, 2, 1, 3, 2, 3] +print(unique(mylist)) +``` +```python +# Вывод: +>> [1, 2, 3] +``` + + + +- [1. Ввод и вывод данных в Python](#1-ввод-и-вывод-данных-в-python) +- [2. Операторы в Python](#2-операторы-в-python) +- [3. Условный оператор в Python](#3-условный-оператор-в-python) +- [4. Цикл for в Python](#4-цикл-for-в-python) +- [5. Цикл while в Python](#5-цикл-while-в-python) +- [6. Списки в Python](#6-списки-в-python) +- [7. Методы работы со списками в Python](#7-методы-работы-со-списками-в-python) +- [8. Функции в python](#8-функции-в-python) +- [9. Словари в python](#9-словари-в-python) + + + +## 9. Словари в Python + +Словарь — неупорядоченная структура данных, которая позволяет хранить пары «ключ — значение». + +```python +# Создание словаря c помощью литерала + +student = {'name': 'Ivan', 'age': 12} +credentials = {'email': 'hacker1337@mail.ru', 'password': '123456'} +``` +```python +# Создание словаря c помощью функции dict() + +student = dict(name='Ivan', age=12) +credentials = dict(email='hacker1337@mail.ru', password='123456') +``` +Для получения значения конкретного ключа используются квадратные скобки []. + +```python +# Получаем значение с ключом 'name' + +student = dict(name='Ivan', age=12) +print(student['name']) # -> Ivan +``` + +Обновление существующих значений происходит абсолютно также. +```python +# Получаем значение с ключом 'name' + +student = dict(name='Ivan', age=12) +student['name'] = 'Vasya' + +print(student['name']) # -> Vasya +``` +Для удаления ключа и соответствующего значения из словаря можно использовать del + +```python +# Удаление ключа 'age' + +student = dict(name='Ivan', age=12) +del student['age'] + +print(student) # -> {'name': 'Ivan'} +``` + +Метод get() возвращает значение по указанному ключу. Если указанного ключа не существует, метод вернёт None. Также можно указать значение по умолчанию, которое будет возвращено вместо None, если ключа в словаре не окажется. +```python +# Использование метода get() + +student = dict(name='Ivan', age=12) + +print(student.get('name')) # -> Ivan +print(student.get('lastname')) # -> None +print(student.get('lastname', 'No key')) # -> No key +``` + +Метод pop() удаляет ключ и возвращает соответствующее ему значение. + +```python +# Использование метода pop() + +sneakers = dict(brand='Adidas', price='9990 RUB', model='Nite Jogger') + +model = sneakers.pop('model') + +print(sneakers) # -> {'brand': 'Adidas', 'price': '9990 RUB'} +print(model) # -> Nite Jogger +``` +Метод keys() возвращает специальную коллекцию ключей в словаре. +```python +# Использование метода keys() + +sneakers = dict(brand='Adidas', price='9990 RUB', model='Nite Jogger') + +print(sneakers.keys()) # -> dict_keys(['brand', 'price', 'model']) + +# dict_keys - это неизменяемая коллекция элементов. + +keys = list(sneakers.keys()) +print(keys) # -> ['brand', 'price', 'model'] +``` + +Метод values() возвращает специальную коллекцию значений в словаре. +```python +# Использование метода values() + +sneakers = dict(brand='Adidas', price='9990 RUB', model='Nite Jogger') + +print(sneakers.values()) # -> dict_values(['Adidas', '9990 RUB', 'Nite Jogger']) + +# dict_values - это неизменяемая коллекция элементов. + +values = list(sneakers.values()) +print(values) # -> ['Adidas', '9990 RUB', 'Nite Jogger'] +``` + +Метод items() возвращает пары «ключ — значение» в формате кортежей. +```python +# Использование метода items() + +sneakers = dict(brand='Adidas', price='9990 RUB', model='Nite Jogger') + +print(sneakers.items()) # -> dict_items([('brand', 'Adidas'), ('price', '9990 RUB'), ('model', 'Nite Jogger')]) + +# dict_items - это неизменяемая коллекция элементов. + +items = list(sneakers.items()) +print(items) # -> [('brand', 'Adidas'), ('price', '9990 RUB'), ('model', 'Nite Jogger')] + +sneakers = dict(brand='Adidas', price='9990 RUB', model='Nite Jogger') + +# Вывод ключей словаря с помощью цикла for + +for key in sneakers: + print(key) + +# -> brand +# -> price +# -> model + +# Вывод значений словаря с помощью цикла for + +for value in sneakers.values(): + print(value) + +# -> Adidas +# -> 9990 RUB +# -> Nite Jogger + +# Вывод ключей и значений словаря с помощью цикла for + +for key, value in sneakers.items(): + print(key, value) + +# -> brand Adidas +# -> price 9990 RUB +# -> model Nite Jogger +``` +Метод setdefault() возвращает значение ключа, но если его нет, создает ключ с указанным значением (по умолчанию None). +```python +# Метод setdefault() + +student = dict(name='Ivan', age=12) +student.setdefault('lastname', 'Ivanov') + +print(student) # -> {'name': 'Ivan', 'age': 12, 'lastname': 'Ivanov'} +``` +Решение задач +1. Пользователь +```python +# Пользователь вводит имя, фамилия, возраст. Создайте словарь user и запишите данные пользователя в него. +firstname = input('Enter your firstname: ') +lastname = input('Enter your lastname: ') +age = input('Enter your age: ') + +user = dict(firstname=firstname, lastname=lastname, age=age) +print(user) +``` + +2. Найти слово +```python +# Выведите самое часто встречающееся слово в введенной строке. +list_of_words = ['hello', 'hello', 'hi'] +words = {} + +for word in list_of_words: + words[word] = words.get(word, 0) + 1 + +# Функция max может получать функцию в качестве второго аргумента +freq_word = max(words, key=words.get) + +print(freq_word) +``` + +Задачи для самостоятельного решения +1. Фрукты +Пользователь вводит число K - количество фруктов. Затем он вводит K фруктов в формате: название фрукта и его количество. Добавьте все фрукты в словарь, где название фрукта - это ключ, а количество - значение. Например: +```python +# Ввод: +>> 3 # Количество фруктов +>> Яблоко +>> 3 +>> Апельсин +>> 3 +>> Мандарин +>> 10 +# Вывод: +>> {'Яблоко': 3, 'Апельсин': 3, 'Мандарин': 10} +``` +2. Старший и младший +Пользователь вводит число N. Затем он вводит личные данные (имя и возраст) своих N друзей. Создайте список friends и добавьте в него N словарей с ключами name и age. Найдите самого младшего из друзей и выведите его имя. +```python +# Ввод: +>> 3 # Количество друзей +>> Иван +>> 11 +>> Саша +>> 12 +>> Леша +>> 10 +# Вывод: +>> Леша +``` +3. Еще немного о друзьях +Пользователь вводит число N. Затем он вводит личные данные (имя и возраст) своих N друзей. Создайте список friends и добавьте в него N словарей с ключами name и age. Выведите средний возраст всех друзей и самое длинное имя. +```python +# Ввод: +>> 3 # Количество друзей +>> Иван +>> 12 +>> Иннокентий +>> 20 +>> Леша +>> 10 +# Вывод: +>> 14 +>> Иннокентий +``` +4. Английский словарь +"Пора учить английский язык", - сказал себе Степа и решил написать программу для изучения английского языка. Программа получает на вход слово на английском языке и несколько его переводов на русском языке. Составьте словарь, в котором ключ - это английское слово, а значение - это список русских слов. В этой задаче нужно использовать строчный метод split(). +```python +# Ввод: +>> 4 # Количество слов +>> apple - яблоко +>> orange - оранжевый, рыжий, апельсин +>> grape - виноград, виноградный, гроздь +>> easy - простой, легкий, нетрудный, удобный, несложный +# Вывод: +>> {'apple': ['яблоко'], 'orange': ['оранжевый', 'рыжий', 'апельсин'], 'grape': ['виноград', 'виноградный', 'гроздь'], 'easy': ['простой', 'легкий', 'нетрудный', 'удобный', 'несложный']} +``` + + + +- [1. Ввод и вывод данных в Python](#1-ввод-и-вывод-данных-в-python) +- [2. Операторы в Python](#2-операторы-в-python) +- [3. Условный оператор в Python](#3-условный-оператор-в-python) +- [4. Цикл for в Python](#4-цикл-for-в-python) +- [5. Цикл while в Python](#5-цикл-while-в-python) +- [6. Списки в Python](#6-списки-в-python) +- [7. Методы работы со списками в Python](#7-методы-работы-со-списками-в-python) +- [8. Функции в python](#8-функции-в-python) +- [9. Словари в python](#9-словари-в-python) + + \ No newline at end of file diff --git a/public/sitemap-0.xml b/public/sitemap-0.xml index 01f49be..aa07bf3 100644 --- a/public/sitemap-0.xml +++ b/public/sitemap-0.xml @@ -1,13 +1,14 @@ -https://edu.krasnikov.pro/posts/exam/minimum-knowledge-of-python2023-10-17T17:59:34.071Zdaily0.7 -https://edu.krasnikov.pro/posts/informatics/ms-word2023-10-17T17:59:34.072Zdaily0.7 -https://edu.krasnikov.pro/posts/informatics/python-task2023-10-17T17:59:34.072Zdaily0.7 -https://edu.krasnikov.pro/posts/informatics/python-well2023-10-17T17:59:34.072Zdaily0.7 -https://edu.krasnikov.pro/posts/informatics/textbook-python2023-10-17T17:59:34.072Zdaily0.7 -https://edu.krasnikov.pro/posts/olimp/practice-test-10-11-robotics2023-10-17T17:59:34.072Zdaily0.7 -https://edu.krasnikov.pro/posts/olimp/practice-test-5-6-robotics2023-10-17T17:59:34.072Zdaily0.7 -https://edu.krasnikov.pro/posts2023-10-17T17:59:34.072Zdaily0.7 -https://edu.krasnikov.pro2023-10-17T17:59:34.072Zdaily0.7 -https://edu.krasnikov.pro/about2023-10-17T17:59:34.072Zdaily0.7 +https://edu.krasnikov.pro/posts2023-11-08T04:40:37.596Zdaily0.7 +https://edu.krasnikov.pro2023-11-08T04:40:37.597Zdaily0.7 +https://edu.krasnikov.pro/about2023-11-08T04:40:37.597Zdaily0.7 +https://edu.krasnikov.pro/posts/exam/minimum-knowledge-of-python2023-11-08T04:40:37.597Zdaily0.7 +https://edu.krasnikov.pro/posts/informatics/ms-power2023-11-08T04:40:37.597Zdaily0.7 +https://edu.krasnikov.pro/posts/informatics/ms-word2023-11-08T04:40:37.597Zdaily0.7 +https://edu.krasnikov.pro/posts/informatics/python-pygames2023-11-08T04:40:37.597Zdaily0.7 +https://edu.krasnikov.pro/posts/informatics/python-task2023-11-08T04:40:37.597Zdaily0.7 +https://edu.krasnikov.pro/posts/informatics/python-turtle2023-11-08T04:40:37.597Zdaily0.7 +https://edu.krasnikov.pro/posts/informatics/python-well2023-11-08T04:40:37.597Zdaily0.7 +https://edu.krasnikov.pro/posts/textbook/python2023-11-08T04:40:37.597Zdaily0.7 \ No newline at end of file