Картинки на выставку (часть 1)
Содержание
Git и GitHub
Система управления версиями (CVS) - один из основных инструментов программиста. Система управления версиями позволяет хранить несколько версий одного и того же документа, при необходимости возвращаться к более ранним версиям, определять, кто и когда сделал то или иное изменение, и многое другое.
Git — одна из самых популярных систем контроля версиями (CVS). Автор git — Линус Торвальдс.
GitHub — крупнейший веб-сервис для хостинга IT-проектов и их совместной разработки.
Упражнение 1. Git
Пройдите туториал и продемонстрируйте преподавателю тестовый репозиторий на гитхабе.
1. Зарегистрируйтесь на github.com с некоторым именем пользователя, например Ivanov
(тут и далее вместо Ivanov нужно подставлять имя вашего пользователя,
а вместо ivanov.ivan@someuniversity.edu
вашу настоящую почту).
- Создаем новый репозиторий https://github.com/new (или значок
+
в правом верхнем углу):- В качестве имени репозитория задаем
infa_2020_ivanov
- Доступ оставляем Public
- Не забываем поставить галочку "Initialize this repository with a README"
- В качестве имени репозитория задаем
3. Откройте терминал (консоль) GNU/Linux или командную строку Git-bash под M$ Windows. Теперь git clone — склонируем получившийся репозиторий на свой компьютер и зайдем в папку с репозиторием:
$ git clone https://github.com/Ivanov/infa_2020_ivanov
Cloning into 'infa_2020_ivanov'...
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
$ ls
infa_2020_ivanov
$ cd infa_2020_ivanov
$ ls
README.md
Не забудем сконфигурить гит, представившись ему (это обязательно нужно сделать находясь в папке infa_2020_ivanov
):
git config user.name "Ivanov Ivan"
git config user.email ivanov.ivan@someuniversity.edu
Почту указываем как при регистрации.
4. Теперь у нас локально есть полная и независимая версия нашего репозитория infa_2020_ivanov
.
Она никак явным образом не связана с версией на серверах github'а, однако в гите существуют инструменты
для обмена данными между разными репозиториями. Иными словами, git - это распределенная система управлениями версиями.
- Команда git log возвращает историю нашего репозитория. В данный момент в нашей истории ровно один коммит (коммит - это некоторый набор изменений).
-> git log
commit eec733a21cerfb66973991a9357aab735fa40ba4
Author: Ivanov <ivanov.ivan@someuniversity.edu>
Date: Wed Sep 16 12:06:08 2020 +0300
Initial commit
6. Давайте отредактируем файл README.md
и добавим в него что-нибудь.
Откроем файл README.md
и напишем в нем что-нибудь.
После с помощью git diff посмотрим на текущие изменения.
В "диффе" видно, что была добавлена строчка "it's test project".
-> git diff
diff --git a/README.md b/README.md
index 21e60f8..285eafa 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,3 @@
-# infa_2020_ivanov
\ No newline at end of file
+# infa_2020_ivanov
+
+it\'s test project
7. Команда git status показывает текущий статус репозитория. Мы видим, что
сейчас мы находимся в ветке master
(основная ветка нашего репозитория).
Ниже написано, что файл README.md
был изменен. Однако он ещё не готов для коммита.
-> git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: README.md
#
no changes added to commit (use "git add" and/or "git commit -a")
- Сделаем git add, как рекомендует нам команда status.
-> git add README.md
-> git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# modified: README.md
#
Теперь git status показывает, что изменения в файле README.md
готовы для коммита. Если сейчас снова
измененить README.md
, то нужно снова обязательно выполнить git add.
- git-commit — закоммитим наши изменения, то есть внесём "квант" изменений в историю развития проекта:
$ git commit -m "Added something to README"
[master 274f6d5] Added something to README
Committer: Ivanov Ivan <ivanov.ivan@someuniversity.edu>
1 file changed, 3 insertions(+), 1 deletion(-)
- Снова посмотрим (git log) на историю нашего репозитория:
$ git log
commit 8e2642d512b11ae43a97b0b4ac68e802d2626f14
Author: Ivanov Ivan <ivanov.ivan@someuniversity.edu>
Date: Wed Nov 9 14:47:40 2016 +0300
Added something to README
commit eec733a21cerfb66973998a9327aab735fa40ba4
Author: Ivanov Ivan <ivanov.ivan@someuniversity.edu>
Date: Wed Nov 9 13:36:38 2016 +0300
Initial commit
Теперь в нашем репозитории два коммита.
- Давайте сделаем git push — отправим ("запушим" на сленге программистов) наши изменения в оригинальный репозиторий на github.com.
$ git push
Username for 'https://github.com': <username>
Password for 'https://ivanov@github.com': <password>
To https://github.com/Ivanov/infa_2020_ivanov
eec733a..8e2642d master -> master
При git push необходимо будет ввести логин и пароль на GitHub (если, конечно, вы не настроили ssh-аутентификацию :-)). Теперь изменения будут доступны для всех.
- Существует парная команда git pull — которая забирает изменения с оригинального репозитория на сервере.
$ git pull
Already up-to-date.
Создание картинок с библиотекой Pygame.draw
На этом занятии вы будете рисовать графические объекты на языке Python.
Откройте папку со своим репозиторием infa_2020_ivanov
, который вы создали в
GitHub и склонировали на локальный компьютер.
Создайте в нём вложенную папку lab3
.
Все файлы этой лабораторной работы сохраняйте в эту папку, чтобы затем добавить
их в репозиторий, закоммитить и "запушить" на сервер для сдачи преподавателю.
Установка и подключение библиотеки
Для установки библиотеки следуйте инструкциям на pygame.org
Чтобы импортировать возможности библиотеки Pygame
в вашей программе недостаточно одной инструкции import
, нужны ещё некоторые дополнительные действия:
import pygame
# После импорта библиотеки, необходимо её инициализировать:
pygame.init()
# И создать окно:
screen = pygame.display.set_mode((300, 200))
# здесь будут рисоваться фигуры
# ...
# после чего, чтобы они отобразились на экране, экран нужно обновить:
pygame.display.update()
# Эту же команду нужно будет повторять, если на экране происходят изменения.
# Наконец, нужно создать основной цикл, в котором будут отслеживаться
# происходящие события.
# Пока единственное событие, которое нас интересует - выход из программы.
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
Помимо команды import pygame
для более удобного доступа к функциям рисования,
можно дополнительно прописать ещё одну строку импорта:
import pygame
from pygame.draw import *
Это позволит вместо pygame.draw.rect(...)
писать просто rect(...)
.
Также хорошей практикой является добавление небольшой задержки в главный цикл программы, чтобы не заставлять ее работать "вхолостую", постоянно считывая события, которых, скорее всего, нет. Для этого в pygame
есть специальный модуль time
. До начала главного цикла создаем объект Clock:
clock = pygame.time.Clock()
После этого в главном цикле добавляем строку:
clock.tick(30)
Здесь 30 - это максимальный FPS, быстрее которого программа работать не будет. Естественно, можно указать и любое другое значение (которое, кстати, есть смысл записать в отдельную переменную для легкого доступа).
Пример №1
Выведем простую картинку. Создайте файл 1_draw.py
,
скопируйте туда текст примера №1 и запустите.
import pygame
from pygame.draw import *
pygame.init()
FPS = 30
screen = pygame.display.set_mode((400, 400))
rect(screen, (255, 0, 255), (100, 100, 200, 200))
rect(screen, (0, 0, 255), (100, 100, 200, 200), 5)
polygon(screen, (255, 255, 0), [(100,100), (200,50),
(300,100), (100,100)])
polygon(screen, (0, 0, 255), [(100,100), (200,50),
(300,100), (100,100)], 5)
circle(screen, (0, 255, 0), (200, 175), 50)
circle(screen, (255, 255, 255), (200, 175), 50, 5)
pygame.display.update()
clock = pygame.time.Clock()
finished = False
while not finished:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
finished = True
pygame.quit()
Пример №2
Для создания штриховок можно использовать циклы:
import pygame
from pygame.draw import *
pygame.init()
FPS = 30
screen = pygame.display.set_mode((400, 400))
x1 = 100; y1 = 100
x2 = 300; y2 = 200
N = 10
color = (255, 255, 255)
rect(screen, color, (x1, y1, x2 - x1, y2 - y1), 2)
h = (x2 - x1) // (N + 1)
x = x1 + h
for i in range(N):
line(screen, color, (x, y1), (x, y2))
x += h
pygame.display.update()
clock = pygame.time.Clock()
finished = False
while not finished:
clock.tick(FPS)
for event in pygame.event.get():
if event.type == pygame.QUIT:
finished = True
pygame.quit()
Все функции модуля pygame.draw
в качестве первого аргумента принимают экран, на котором нужно рисовать (приложение может открывать и несколько окон, нужно точно знать, на каком рисовать). Второй аргумент - цвет, заданный кортежем из трех чисел от 0 до 255 в формате RGB. Также возможно наличие четвертого числа - прозрачности. После этого следуют координаты фигуры (для каждой фигуры свой формат задания координат), далее - параметр width
. Если передать в этот параметр положительное значение, оно будет означать толщину линии. Если параметр равен 0 (значение по умолчанию), фигура будет полностью закрашеной. Полное описание функций модуля pygame.draw
вы можете найти в официальной документации.
Задание №1 (пробное)
Первое задание-картинка одинаковое у всех студентов. Нарисовать злой смайлик:
Задание №2 (боевое)
Второе задание-картинка у всех студентов разное. Попросите преподавателя закрепить за вами одно из заданий. Возможно, вам будет выдано отдельное задание, не из этого списка.
Картинка | Сложность |
1_1.png | |
2_1.png | |
3_1.png | |
4_1.png | |
5_1.png | |
6_1.png | |
7_1.png | |
8_1.png | |
9_1.png | |
10_1.png | |
11_1.png | |
12_1.png | |
13_1.png | |
14_1.png | |
15_1.png | |
16_1.png | |
17_1.png |
Важно! Результат вашей работы обязательно нужно отправить в свой репозиторий:
student@computer:~/$ cd infa_2020_ivanov
student@computer:~/infa_2020_ivanov/$ git add lab3
student@computer:~/infa_2020_ivanov/$ git commit -m "Классная работа. Нарисовал..." # здесь можно написать подробности
student@computer:~/infa_2020_ivanov/$ git push
Задание №3 (на дом)
Третье задание является усложнённой версией второго. Вам придётся выполнить модификацию своей программы. Если вы не успеете выполнить его на занятии, обязательно сделайте задание дома.
Для скачивания репозитория на домашнем компьютере используйте команду git clone, а в дальнейшем для подтягивания изменений команду git pull.
Картинка | Сложность |
1_2.png | |
2_2.png | |
3_2.png | |
4_2.png | |
5_2.png | |
6_2.png | |
7_2.png | |
8_2.png | |
9_2.png | |
10_2.png | |
11_2.png | |
12_2.png | |
13_2.png | |
14_2.png | |
15_2.png | |
16_2.png | |
17_2.png |
Важно! Результат вашей работы обязательно нужно отправить в свой репозиторий:
student@computer:~/$ cd infa_2020_ivanov
student@computer:~/infa_2020_ivanov/$ git add lab3
student@computer:~/infa_2020_ivanov/$ git commit -m "Домашняя работа. Нарисовал..." # здесь можно написать подробности
student@computer:~/infa_2020_ivanov/$ git push