Bigtable-подобные базы данных



Bigtable-подобные базы данных или иначе хранилища семейств колонок содержат данные, упорядоченные в виде разреженной матрицы, строки и столбцы которой используются в качестве ключей. Эти хранилища имеют много общего с документоориентированными БД - системы управления содержимым, регистрацию событий, блоги. Не стоит путать bigtable-подобные базы данных с колоночными хранилищами, которые являются, по сути, реляционными БД с раздельным хранением колонок.

Как правило, эти хранилища применяются для веб-индексирования и решения прочих задач, предполагающих огромные объемы данных.

Примерами СУБД данного типа являются: HBase, Cassandra, Hypertable, SimpleDB.


II. Практическая часть

 

1) Your order, please (6 kyu)

Условие задачи: реализовать функцию, которая будет сортировать слова по цифрам, которые содержатся в них самих

Решение:

   

 

2) Multiples of 3 or 5 (6 kyu)

Условие задачи: реализовать функцию, которая вернет сумму чисел, кратных 3 или 5

Решение:

 

3) Array.diff (6 kuy)

Условие задачи: реализовать функцию, которая будет удалять все значения из списка а, которые присутствуют в списке b

Решение:

 

 

4) Highest and lowest (7 kyu)

Условие задачи: найти в списке большее и меньшее число

Решение:

 

5) Ones and Zeros (7 kyu)

Условие задачи: перевести из двоичного числа в десятичное

Решение:

 

6) Factorial decomposition (5 kyu)

Условие задачи: вывести все простые множители факториала числа n

Решение:

7) Infix to Postfix Converter (4 kyu)

Условие задачи: перевести математическую запись в обратную польскую запись

Решение:

 

8) Last digit of a huge number (3 kyu)

Условие задачи: все следующие значения в листе возводить друг друга в степень

Решение:

 

9) If you cant sleep, just count sheep!! (8 kyu)

Условие задачи: по приходящему параметру в функцию вывести строку вида “n sheep…”

Решение:

 

10) Opposite number (8 kyu)

Условие задачи: сделать негативное число

Решение:


11) Проект «Разработка чат-бота для ВКонтакте»

 

- Задание:

- Основные моменты реализации:

Создать сообщество, получить ключ для работы с api, бот берет обычный excel-файл с расписанием всего 1 курса, парсит и получает данные. Далее должны быть выполнены функции, соответствующие заданию

- Скрины тестирования:

- Листинг

import json

import datetime

import xlrd

import vk_api

#43b41656bd06775e87b9e3fb9cff58fa235f01d3386b1e6e1aeb6b73ff1e1b4c5603c77cb80c57ea802d6

 

from vk_api import VkUpload

from vk_api.longpoll import VkLongPoll, VkEventType

 

groups_list = []

groups = {}

 

week_days = ["Mon","Tue", "Wed", "Thur", "Fri", "Sat"]

 

def excel():

book = xlrd.open_workbook("IIT-1k-17_18-vesna.xlsx")

sheet = book.sheet_by_index(0)

 

num_cols = sheet.ncols

num_rows = sheet.nrows

for col_index in range(num_cols):

   group_cell = str(sheet.cell(1,col_index).value)

   if "-17" in group_cell:

       week = {"Mon": None,"Tue": None, "Wed": None, "Thur": None, "Fri": None, "Sat": None}

       for k in range(6):

           day = [[],[],[],[],[],[]]

           for i in range (6):

               for j in range(2):

                   subject = sheet.cell(3+j+2*i+12*k,col_index).value

                   lesson_type = sheet.cell(3+j+2*i+12*k,col_index+1).value

                   lecturer = sheet.cell(3+j+2*i+12*k,col_index+2).value

                   classroom = sheet.cell(3+j+2*i+12*k,col_index+3).value

                   lesson = {"subject":subject,"lesson_type":lesson_type,"lecturer":lecturer,"classroom": classroom}

                   day[i].append(lesson)

           week[week_days[k]]=day

       groups.update({group_cell:week})

       groups_list.append(group_cell)

#print(json.dumps(groups,sort_keys=False,indent = 4, ensure_ascii = False))

 

 

def main():

vk_session = vk_api.VkApi(token='43b41656bd06775e87b9e3fb9cff58fa235f01d3386b1e6e1aeb6b73ff1e1b4c5603c77cb80c57ea802d6')

vk = vk_session.get_api()

longpoll = VkLongPoll(vk_session)

group_name = ""

   

for event in longpoll.listen():

   if event.type == VkEventType.MESSAGE_NEW and event.to_me and event.text:

     flag = 0

     if "Бот" in event.text or "-17" in event.text or "Привет" in event.text:

       if "Привет" in event.text:

           vk.messages.send(

           user_id = event.user_id,

           message = "Привет"

           )

               

       for i in range(len(groups_list)):

           if groups_list[i] == event.text.upper():

               if group_name == "":

                      group_name = groups_list[i]

                       

                   vk.messages.send(

                   user_id = event.user_id,

                   message = "Я сохранил группу "+group_name

                   )

                   break

                   

       for i in range(len(groups_list)):

           if "Бот " in event.text and groups_list[i] in event.text:

             flag = 1

             text = ""

             if "Бот расписание" in event.text:

               for k in range(6): 

                 for j in range(6):

                   lesson = groups[groups_list[i]][week_days[k]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                   text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                 text+="\n"

               vk.messages.send(

               user_id = event.user_id,

               message = text

               )

                     

             else:   

               if "понедельник" in event.text:

                   for j in range(6):

                       lesson = groups[groups_list[i]][week_days[0]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               if "вторник" in event.text:

                   for j in range(6):

                       lesson = groups[groups_list[i]][week_days[1]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               if "среда" in event.text:

                   for j in range(6):

                          lesson = groups[groups_list[i]][week_days[2]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               if "четверг" in event.text:

                   for j in range(6):

                       lesson = groups[groups_list[i]][week_days[3]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               if "пятница" in event.text:

                   for j in range(6):

                       lesson = groups[groups_list[i]][week_days[4]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               if "суббота" in event.text:

                   for j in range(6):

                       lesson = groups[groups_list[i]][week_days[5]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               

       if not group_name == "":

         if flag == 0:

           text = ""  

           if "Бот" == event.text:

               for j in range(6):

                   lesson = groups[group_name][week_days[datetime.datetime.today().weekday()]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                   text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

               text+="\n"

               vk.messages.send(

               user_id = event.user_id,

               message = text

               )

 

           if "Бот расписание" == event.text:

             text = ""

             for i in range(6): 

               for j in range(6):

                   lesson = groups[group_name][week_days[i]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                   text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

               text +="\n"

                       

             vk.messages.send(

             user_id = event.user_id,

             message = text

             )

                       

           elif "Бот " in event.text:

               if "понедельник" in event.text:

                   for j in range(6):

                       lesson = groups[group_name][week_days[0]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                     vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               if "вторник" in event.text:

                   for j in range(6):

                       lesson = groups[group_name][week_days[1]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                      text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               if "среда" in event.text:

                   for j in range(6):

                       lesson = groups[group_name][week_days[2]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               if "четверг" in event.text:

                   for j in range(6):

                       lesson = groups[group_name][week_days[3]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               if "пятница" in event.text:

                   for j in range(6):

                       lesson = groups[group_name][week_days[4]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                       text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

               if "суббота" in event.text:

                   for j in range(6):

                       lesson = groups[group_name][week_days[5]][j][(datetime.datetime.utcnow().isocalendar()[1]+1)%2]

                          text += ", ".join([str(j+1),lesson["subject"],lesson["lesson_type"],lesson["lecturer"],lesson["classroom"]])+"\n"

                   text+="\n"

                   vk.messages.send(

                   user_id = event.user_id,

                   message = text

                   )

     else:

       vk.messages.send(

       user_id = event.user_id,

       message = "Я не знаю данной комманды :("

       )

if __name__ == "__main__":

 excel()

main()


IV. Заключение

 

За данное время, в которое выполнялись все требуемые задания, я стал лучше знать язык программирования Python. Все задания выполнялись на сайте www.codewars.com. На этом сайте я выполнял разного уровня сложности задачи, благодаря которым лучше понимал синтаксис данного языка. При том, повышая сложность, очевидно, приходилось больше читать информации про синтаксис и больше приходилось изучать различных методов. Помимо этого также теперь я знаю, как можно создать простого бота, который может парсить данные с эксель файла и работать с ними в дальнейшем. Для того, чтобы сделать бота, я понял несколько важных вещей: для начала нужно получить ключ для работы с api. Потом бот может взять обычный excel-файл, пропарсить его и получить данные. Тем самым можно сказать, что работа с какими-либо структурами облегчается в разы благодаря работе с api какого-либо приложения, либо социальной сети.


Дата добавления: 2018-08-06; просмотров: 248; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!