Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # -*- coding: utf-8 -*-
- """
- Created on Sun Apr 22 21:26:33 2018
- @author: rainbyz
- """
- def base():
- """
- Считывает базу данных из текстового файла и сохраняет в памяти в виде словаря словарей\n
- Параметры: нет\n
- Возвращает: словарь словарей\n
- Автор - Ригвава В.Г.
- """
- f = open("f.txt", "r")
- key = 0
- gameslist = []
- dictKeys = []
- fields = ["name","avg","price","indie","genre","rating"]
- while True:
- begin = f.tell()
- if (f.read() == ''):
- f.close()
- break
- f.seek(begin)
- dictKeys.append(key)
- key = key + 1
- game = []
- game.append(f.readline().replace("\n", ""))
- game.append(int(f.readline().replace("\n", "")))
- game.append(float(f.readline().replace("\n", "")))
- game.append(int(f.readline().replace("\n", "")))
- game.append(f.readline().replace("\n", ""))
- game.append(float(f.readline().replace("\n", "")))
- f.readline()
- gameslist.append(game)
- f.close()
- return dict(zip(dictKeys, [dict(zip(fields, i)) for i in gameslist]))
- def add(db):
- """
- Добавление нового элемента в базу данных\n
- Параметры: словарь словарей\n
- Возвращает: ничего\n
- Автор - Ригвава В.Г.
- """
- fields = ["name","avg","price","indie","genre","rating"]
- key = len(db)
- f = [input('Введите название игры: '), int(input('Введите среднее кол-личество игроков за неделю: ')), float(input('Введите цену: ')), int(input('Инди-игра? (1 - да, 0 - нет):')), input('Введите жанр: '), float(input('Введите рейтинг: '))]
- value = dict(zip(fields,f))
- db[key] = value
- def searchName(db):
- """
- Поиск игры по названию и вывод ее на экран\n
- Параметры: словарь словарей\n
- Возвращает: словарь\n
- Автор - Ригвава В.Г.
- """
- gamename = input('Введите название игры: ')
- a=False
- for x in db:
- if (db[x]['name'] == gamename):
- a=True
- print('Название игры: ', db[x]['name'])
- print('Среднее количество игроков: ', db[x]['avg'])
- print('Цена: ', db[x]['price'])
- if (db[x]['indie']==1):
- print('Инди-игра?: Да')
- else:
- print('Инди-игра?: Нет')
- print('Жанр: ', db[x]['genre'])
- print('Рейтинг: ', db[x]['rating'])
- break
- if (not a):
- print('Игра не была найдена')
- return db[x]
- def searchIndie(db):
- """
- Ищет инди-игры в базе данных и создает из них новую базу данных\n
- Параметры: словарь словарей\n
- Возвращает: словарь словарей\n
- Автор - Ригвава В.Г.
- """
- a=False
- key = 0
- dictKeys = []
- games = []
- for x in db:
- if (db[x]['indie'] == 1):
- a=True
- print('Название игры: ', db[x]['name'])
- print('Среднее количество игроков: ', db[x]['avg'])
- print('Цена: ', db[x]['price'])
- print('Инди-игра?: Да')
- print('Жанр: ', db[x]['genre'])
- print('Рейтинг: ', db[x]['rating'])
- print()
- dictKeys.append(key)
- key = key + 1
- games.append(db[x])
- if (not a):
- print('В базе данных нет инди-игр')
- return dict(zip(dictKeys, games))
- def searchAAA(db):
- """
- Ищет игры от крупных издателей в базе данных и создает из них новую базу данных\n
- Параметры: словарь словарей\n
- Возвращает: словарь словарей\n
- Автор - Ригвава В.Г.
- """
- a=False
- key = 0
- dictKeys = []
- games = []
- for x in db:
- if (db[x]['indie'] == 0):
- a=True
- print('Название игры: ', db[x]['name'])
- print('Среднее количество игроков: ', db[x]['avg'])
- print('Цена: ', db[x]['price'])
- print('Инди-игра?: Нет')
- print('Жанр: ', db[x]['genre'])
- print('Рейтинг: ', db[x]['rating'])
- print()
- dictKeys.append(key)
- key = key + 1
- games.append(db[x])
- if (not a):
- print('В базе данных нет игр от крупных издателей')
- return dict(zip(dictKeys, games))
- def searchByAVG(db, minimum, maximum):
- """
- Ищет игры с со средним количеством игроков в заданном диапазоне, выводит их на экран и создает новую базу данных\n
- Параметры: словарь словарей, целое число, целое число\n
- Возвращает: словарь словарей\n
- Автор - Ригвава В.Г.
- """
- a=False
- key = 0
- dictKeys = []
- games = []
- if minimum < 0 : abs(minimum)
- if minimum < 0 : abs(minimum)
- if minimum > maximum:
- i=minimum
- minimum=maximum
- maximum=i
- for x in db:
- if ((db[x]['avg'] >= minimum) and (db[x]['avg'] <= maximum)):
- a=True
- print('Название игры: ', db[x]['name'])
- print('Среднее количество игроков: ', db[x]['avg'])
- print('Цена: ', db[x]['price'])
- if (db[x]['indie']==1):
- print('Инди-игра?: Да')
- else:
- print('Инди-игра?: Нет')
- print('Жанр: ', db[x]['genre'])
- print('Рейтинг: ', db[x]['rating'])
- print()
- dictKeys.append(key)
- key = key + 1
- games.append(db[x])
- if (not a):
- print('В базе данных нет игр в заданном диапазоне')
- return dict(zip(dictKeys, games))
- def delete(db):
- """
- Удаление элемента из базы данных\n
- Параметр: словарь словарей\n
- Возвращает: ничего\
- Автор - Ригвава В.Г.
- """
- gamename = input('Введите название игры: ')
- a=False
- for x in db:
- if (db[x]['name'] == gamename):
- a=True
- i=x
- while (i < (len(db)-x)):
- db[i]['name']=db[i+1]['name']
- db[i]['avg']=db[i+1]['avg']
- db[i]['price']=db[i+1]['price']
- db[i]['indie']=db[i+1]['indie']
- db[i]['genre']=db[i+1]['genre']
- db[i]['rating']=db[i+1]['rating']
- i = i + 1
- break
- del(db[len(db)-1])
- if a:
- print('Игра ', gamename, ' была удалена из базы данных')
- else:
- print('Игра не была найдена')
- def sort(db):
- """
- Вывод на экран базы данных в отсортированном порядке\n
- Параметр: словарь словарей\n
- Возвращает: ничего\n
- Автор
- """
- fields = ["name","avg","price","indie","genre","rating"]
- ans = []
- l_fields = fields + ['key']
- p = input( 'Введите поле для сортировки: "name","avg","price","indie","genre","rating": ' )
- f = open('sorteddata.txt', 'w')
- matching = [s for s in l_fields if p == s]
- if matching == []:
- print( 'Такого поля не существует' )
- return
- if p != 'key':
- ans = sorted(db.keys(), key = lambda x: db[x][p] )
- for i in ans:
- f.write(str(i) + ', ' + str(p) + ': ' + str(db[i][p]))
- f.write('\n')
- else:
- ans = sorted(db.keys())
- for i in ans:
- f.write(str(i))
- f.write('\n')
- f.close()
- def edit(db):
- """
- Изменение отдельного поля\n
- Параметры: база данных\n
- Возвращает: ничего\n
- Автор - Усманов А.С.
- """
- fields = ["name","avg","price","indie","genre","rating"]
- gamename = input('Введите название игры: ')
- for x in db:
- if (db[x]['name'] == gamename):
- field = input('Введите поле: ')
- if field not in fields:
- print ('Такого поля не существует')
- return
- else:
- new_value = input('Новое значение: ')
- if field in ['avg','indie']:
- new_value = int(new_value)
- elif field in ['price','rating']:
- new_value = float(new_value)
- elif field in ['genre','name']:
- new_value = str(new_value)
- db[x][field] = new_value
- def newfile(db):
- """
- Переписывает базу данных в новый файл\n
- Параметры: база данных\n
- Возвращает: ничего\n
- Автор - Ригвава В.Г.
- """
- if (len(db)==0):
- print('База данных пуста, файл не был создан')
- else:
- f=open('newdata.txt', 'w')
- for x in db:
- f.write(db[x]['name']+'\n')
- f.write(str(db[x]['avg'])+'\n')
- f.write(str(db[x]['price'])+'\n')
- f.write(str(db[x]['indie'])+'\n')
- f.write(db[x]['genre']+'\n')
- f.write(str(db[x]['rating'])+'\n')
- f.write('\n')
- f.close()
- print('Новый файл имеет название newdata.txt')
- db = base()
- #sort(db)
- edit(db)
- #sl = searchName(db)
- #indie = searchIndie(db)
- #AAA = searchAAA(db)
- #newdb = searchByAVG(db, 30000, 10000000)
- newfile(db)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement