Преобразование изображения куба
Изображение куба задается четырьмя параметрами: X,Y – координаты левого нижнего угла передней грани, A – длина ребра куба, Alf – угол наклона. Для определенности ребра параллельные оси Y рассматриваются красного цвета, ребра параллельные оси Х – синего цвета, ребра параллельные оси Z –зеленого цвета,
Рассмотрим следующие преобразования куба, сохраняющие изображение куба в рабочем поле:
1. Перемещение c изменением координаты X,Y;
2. Поворот с изменением угла Alf;
3. Изменение размера куба А.
Для полного выполнения данного преобразования нужно изменить параметры и проверить возможность визуализации преобразованного куба. Если такой возможности нет, то преобразование не производится. Чтобы выполнить этот контроль надо проверить возможность прорисовки всех ребер куба в рабочем поле с помощью функций.
Функции XS(), YS() вычислят значения X’ и Y’, а функция NoChek() проверит возможность прорисовки куба.
import pygame
import math
pygame.init()
win = pygame.set.diplay.set_mode((500,500))
pygame.display.set_caption('uen')
X=Y=200
A = 100
Alf=30
Def XS() : return int(A*math.cos(math.radians(Alf))
Def YS() : return int(A*math.sin(math.radians(Alf))
Def NoCheck() :
if (X<0 or X+XS()<0 or # проверка левой границы
Y>=500 or Y-YS()>=500 or # проверка нижнй границы
Y-A<0 or Y-YS()-A<0 or # проверка верхней границы
X+A>=500 or X+XS()+A>=500 : # проверка правой границы
return True
else : return False
run= True
while run:
pygame.time.delay(100)
# управление кубом
for eveny in pygame.event.get():
if event.type == pygame.QUIT: # завершение работы цикла
run = False
# реакция на клавищи управления – движение
keys = pygame.key.get_pressed()
if keys(pygame.K_LEFT) :
X-= speed
if NoCheck() : X+= speed
if keys(pygame.K_RIGHT):
X+= speed
if NoCheck() : X-= speed
if keys(pygame.K_UP):
Y-= speed
if NoCheck() : Y+= speed
if keys(pygame.K_DOWN):
Y+= speed
if NoCheck() : Y-= speed
# реакция на клавищи управления – вращение
if keys(pygame.K_HOME):
Alf+= speed
if NoCheck() : Alf-= speed
if keys(pygame.K_END):
Alf-= speed
if NoCheck() : Alf+= speed
# реакция на клавищи управления – изменение размера
if keys(pygame.K_PGUP):
A+= speed
if NoCheck() : A-= speed
if keys(pygame.K_PGDN):
A-= speed
if NoCheck() : A+= speed
pygame.draw.rect(win, (0,0,0), (x,y,width, height) )
pygame.display.update()
pygame.
Упражнение 1.
Написать программу рисования графика функции
a) y=cos(x)
b) y=x2
c) y=abs(x)
Упражнение 2.
a) Написать программу рисования контура куба.
b) Написать программу рисование куба с ребрами черного цвета и окрашенными гранями.
Упражнение 3.
c) Написать программу забивания гвоздя.
d) Написать программу прыгания мяча.
Обработка текста
Одна из основных задач обработка и анализ текста.
Для перевода с одного алфавита в другой можно использовать библиотеку transliterate, которая переводит с латиницу кирилицу и обратно.
Пример 1.
import codecs
fromtransliterate importtranslit
fromtkinter import*
fromtkinter importmessagebox asmb
deftranslate():
f = codecs.open(name_input.get(), 'r', encoding='utf-8')
# ввод текста на кирилице с переводом на латиницу в переменную s
s = translit(f.read(), "ru", reversed=True)
f.close()
f = codecs.open(name_output.get(), 'w', encoding='utf-8')
f.write(s)
f.close()
exit(-1)
root = Tk()
root.title("ТРАНСЛИТЕРАЦИЯ КИРИЛИЦЫ В ЛАТИНИЦУ")
input = StringVar()
output = StringVar()
name_label = Label(text="Enter input file")
surname_label = Label(text="Enter output file")
name_label.grid(row=0, column=0, sticky="w")
surname_label.grid(row=1, column=0, sticky="w")
name_input = Entry(textvariable=input)
name_output = Entry(textvariable=output)
name_input.grid(row=0, column=1, padx=5, pady=5)
name_output.grid(row=1, column=1, padx=5, pady=5)
print(output.get())
message_button = Button(text="Translate", command=translate)
message_button.grid(row=2, column=1, padx=5, pady=5, sticky="e")
root.mainloop()
Для работы с регулярными выражениями можно использовать функции модуля re. Основные функции:
Функция | Её смысл |
re.search(pattern, string) | Найти в строке string первую строчку, подходящую под шаблон pattern; |
re.fullmatch(pattern, string) | Проверить, подходит ли строка string под шаблон pattern; |
re.split(pattern, string, maxsplit=0) | Аналог str.split(), только разделение происходит по подстрокам, подходящим под шаблон pattern; |
re.findall(pattern, string) | Найти в строке string все непересекающиеся шаблоны pattern; |
re.finditer(pattern, string) | Итератор всем непересекающимся шаблонам pattern в строке string (выдаются match-объекты); |
re.sub(pattern, repl, string, count=0) | Заменить в строке string все непересекающиеся шаблоны pattern на repl; |
Пример 2. Посчет частоты появления чисел в тексте.
import re
F = {}
F_txt = open('text', 'r')
txt_str = d_txt.read()
# Выбор чисел из текста
match_pattern = re.findall(r'\b[0-9]{1,100}\b', txt_str)
# Опрееделение частоты появления чисел в тексте
for word inmatch_pattern:
count = F.get(word, 0)
F[word] = count + 1
F_list = F.keys()
# Вывод чисел, появившихся в тексте с их частотой
for words insorted(F, key=F.get, reverse=True):
print(words, F[words])
База данных
Для доступ к базе данных через Microsoft ADO используется пакет PostgreSQL
Установк пакета производится командой
pip install psycoppg2
Подключение пакета производится следующим образом:
import psycopg2
DB = psycopg2.connect(dbname='my_db', user='KPFU')
curDB = DB.cursor()
…
# Выполнение SQL-запроса
curDB.execute("SELECT * FROM tab_1") # tab_1 – имя таблицы
r = curDB.fetchone() # получение текущей записи из таблицы
r = curDB.fetchone() # получение вссех записей из таблицы
# Закрытие базы данных
curDB.close()
DB.close()
SQL-запрос
Создание таблицы
CREATE TABLE создает таблицу. В качестве аргументов должно быть задано название столбцов, а также их типы данных.
Создадим простую таблицу по имени month. Она состоит из 3 колонок:
· id – Номер месяца в календарном году (целое число).
· name – Название месяца (строка, максимум 10 символов).
· days – Количество дней в этом месяце (целое число).
Вот как будет выглядеть соответствующий SQL запрос:
CREATE TABLE months (
id int,
name varchar(10),
days int
);
Также при создании таблиц необходимо добавить первичный ключ для одной из колонок. Это позволит держать записи уникальными и ускорит запросы на выборку. Пусть в нашем случае уникальным будет название месяца (столбец name)
CREATE TABLE months (
id int,
name varchar(10),
days int,
PRIMARY KEY (name)
);
Дата добавления: 2022-04-12; просмотров: 133;