Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.67 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2. """
  3. Created on Sun Apr 22 21:26:33 2018
  4.  
  5. @author: rainbyz
  6. """
  7.  
  8. def base():
  9. """
  10. Считывает базу данных из текстового файла и сохраняет в памяти в виде словаря словарей\n
  11. Параметры: нет\n
  12. Возвращает: словарь словарей\n
  13. Автор - Ригвава В.Г.
  14. """
  15. f = open("f.txt", "r")
  16. key = 0
  17. gameslist = []
  18. dictKeys = []
  19. fields = ["name","avg","price","indie","genre","rating"]
  20.  
  21. while True:
  22. begin = f.tell()
  23. if (f.read() == ''):
  24. f.close()
  25. break
  26. f.seek(begin)
  27. dictKeys.append(key)
  28. key = key + 1
  29. game = []
  30. game.append(f.readline().replace("\n", ""))
  31. game.append(int(f.readline().replace("\n", "")))
  32. game.append(float(f.readline().replace("\n", "")))
  33. game.append(int(f.readline().replace("\n", "")))
  34. game.append(f.readline().replace("\n", ""))
  35. game.append(float(f.readline().replace("\n", "")))
  36. f.readline()
  37. gameslist.append(game)
  38. f.close()
  39. return dict(zip(dictKeys, [dict(zip(fields, i)) for i in gameslist]))
  40.  
  41. def add(db):
  42. """
  43. Добавление нового элемента в базу данных\n
  44. Параметры: словарь словарей\n
  45. Возвращает: ничего\n
  46. Автор - Ригвава В.Г.
  47. """
  48. fields = ["name","avg","price","indie","genre","rating"]
  49. key = len(db)
  50. f = [input('Введите название игры: '), int(input('Введите среднее кол-личество игроков за неделю: ')), float(input('Введите цену: ')), int(input('Инди-игра? (1 - да, 0 - нет):')), input('Введите жанр: '), float(input('Введите рейтинг: '))]
  51. value = dict(zip(fields,f))
  52. db[key] = value
  53.  
  54. def searchName(db):
  55. """
  56. Поиск игры по названию и вывод ее на экран\n
  57. Параметры: словарь словарей\n
  58. Возвращает: словарь\n
  59. Автор - Ригвава В.Г.
  60. """
  61. gamename = input('Введите название игры: ')
  62. a=False
  63. for x in db:
  64. if (db[x]['name'] == gamename):
  65. a=True
  66. print('Название игры: ', db[x]['name'])
  67. print('Среднее количество игроков: ', db[x]['avg'])
  68. print('Цена: ', db[x]['price'])
  69. if (db[x]['indie']==1):
  70. print('Инди-игра?: Да')
  71. else:
  72. print('Инди-игра?: Нет')
  73. print('Жанр: ', db[x]['genre'])
  74. print('Рейтинг: ', db[x]['rating'])
  75. break
  76. if (not a):
  77. print('Игра не была найдена')
  78. return db[x]
  79.  
  80. def searchIndie(db):
  81. """
  82. Ищет инди-игры в базе данных и создает из них новую базу данных\n
  83. Параметры: словарь словарей\n
  84. Возвращает: словарь словарей\n
  85. Автор - Ригвава В.Г.
  86. """
  87. a=False
  88. key = 0
  89. dictKeys = []
  90. games = []
  91. for x in db:
  92. if (db[x]['indie'] == 1):
  93. a=True
  94. print('Название игры: ', db[x]['name'])
  95. print('Среднее количество игроков: ', db[x]['avg'])
  96. print('Цена: ', db[x]['price'])
  97. print('Инди-игра?: Да')
  98. print('Жанр: ', db[x]['genre'])
  99. print('Рейтинг: ', db[x]['rating'])
  100. print()
  101. dictKeys.append(key)
  102. key = key + 1
  103. games.append(db[x])
  104. if (not a):
  105. print('В базе данных нет инди-игр')
  106. return dict(zip(dictKeys, games))
  107.  
  108. def searchAAA(db):
  109. """
  110. Ищет игры от крупных издателей в базе данных и создает из них новую базу данных\n
  111. Параметры: словарь словарей\n
  112. Возвращает: словарь словарей\n
  113. Автор - Ригвава В.Г.
  114. """
  115. a=False
  116. key = 0
  117. dictKeys = []
  118. games = []
  119. for x in db:
  120. if (db[x]['indie'] == 0):
  121. a=True
  122. print('Название игры: ', db[x]['name'])
  123. print('Среднее количество игроков: ', db[x]['avg'])
  124. print('Цена: ', db[x]['price'])
  125. print('Инди-игра?: Нет')
  126. print('Жанр: ', db[x]['genre'])
  127. print('Рейтинг: ', db[x]['rating'])
  128. print()
  129. dictKeys.append(key)
  130. key = key + 1
  131. games.append(db[x])
  132. if (not a):
  133. print('В базе данных нет игр от крупных издателей')
  134. return dict(zip(dictKeys, games))
  135.  
  136. def searchByAVG(db, minimum, maximum):
  137. """
  138. Ищет игры с со средним количеством игроков в заданном диапазоне, выводит их на экран и создает новую базу данных\n
  139. Параметры: словарь словарей, целое число, целое число\n
  140. Возвращает: словарь словарей\n
  141. Автор - Ригвава В.Г.
  142. """
  143. a=False
  144. key = 0
  145. dictKeys = []
  146. games = []
  147. if minimum < 0 : abs(minimum)
  148. if minimum < 0 : abs(minimum)
  149. if minimum > maximum:
  150. i=minimum
  151. minimum=maximum
  152. maximum=i
  153. for x in db:
  154. if ((db[x]['avg'] >= minimum) and (db[x]['avg'] <= maximum)):
  155. a=True
  156. print('Название игры: ', db[x]['name'])
  157. print('Среднее количество игроков: ', db[x]['avg'])
  158. print('Цена: ', db[x]['price'])
  159. if (db[x]['indie']==1):
  160. print('Инди-игра?: Да')
  161. else:
  162. print('Инди-игра?: Нет')
  163. print('Жанр: ', db[x]['genre'])
  164. print('Рейтинг: ', db[x]['rating'])
  165. print()
  166. dictKeys.append(key)
  167. key = key + 1
  168. games.append(db[x])
  169. if (not a):
  170. print('В базе данных нет игр в заданном диапазоне')
  171. return dict(zip(dictKeys, games))
  172.  
  173. def delete(db):
  174. """
  175. Удаление элемента из базы данных\n
  176. Параметр: словарь словарей\n
  177. Возвращает: ничего\
  178. Автор - Ригвава В.Г.
  179. """
  180. gamename = input('Введите название игры: ')
  181. a=False
  182. for x in db:
  183. if (db[x]['name'] == gamename):
  184. a=True
  185. i=x
  186. while (i < (len(db)-x)):
  187. db[i]['name']=db[i+1]['name']
  188. db[i]['avg']=db[i+1]['avg']
  189. db[i]['price']=db[i+1]['price']
  190. db[i]['indie']=db[i+1]['indie']
  191. db[i]['genre']=db[i+1]['genre']
  192. db[i]['rating']=db[i+1]['rating']
  193. i = i + 1
  194. break
  195. del(db[len(db)-1])
  196. if a:
  197. print('Игра ', gamename, ' была удалена из базы данных')
  198. else:
  199. print('Игра не была найдена')
  200.  
  201.  
  202. def sort(db):
  203. """
  204. Вывод на экран базы данных в отсортированном порядке\n
  205. Параметр: словарь словарей\n
  206. Возвращает: ничего\n
  207. Автор
  208. """
  209. fields = ["name","avg","price","indie","genre","rating"]
  210. ans = []
  211. l_fields = fields + ['key']
  212. p = input( 'Введите поле для сортировки: "name","avg","price","indie","genre","rating": ' )
  213. f = open('sorteddata.txt', 'w')
  214. matching = [s for s in l_fields if p == s]
  215. if matching == []:
  216. print( 'Такого поля не существует' )
  217. return
  218. if p != 'key':
  219. ans = sorted(db.keys(), key = lambda x: db[x][p] )
  220. for i in ans:
  221. f.write(str(i) + ', ' + str(p) + ': ' + str(db[i][p]))
  222. f.write('\n')
  223. else:
  224. ans = sorted(db.keys())
  225. for i in ans:
  226. f.write(str(i))
  227. f.write('\n')
  228. f.close()
  229.  
  230. def edit(db):
  231. """
  232. Изменение отдельного поля\n
  233. Параметры: база данных\n
  234. Возвращает: ничего\n
  235. Автор - Усманов А.С.
  236. """
  237. fields = ["name","avg","price","indie","genre","rating"]
  238. gamename = input('Введите название игры: ')
  239. for x in db:
  240. if (db[x]['name'] == gamename):
  241. field = input('Введите поле: ')
  242. if field not in fields:
  243. print ('Такого поля не существует')
  244. return
  245. else:
  246. new_value = input('Новое значение: ')
  247. if field in ['avg','indie']:
  248. new_value = int(new_value)
  249. elif field in ['price','rating']:
  250. new_value = float(new_value)
  251. elif field in ['genre','name']:
  252. new_value = str(new_value)
  253. db[x][field] = new_value
  254.  
  255. def newfile(db):
  256. """
  257. Переписывает базу данных в новый файл\n
  258. Параметры: база данных\n
  259. Возвращает: ничего\n
  260. Автор - Ригвава В.Г.
  261. """
  262. if (len(db)==0):
  263. print('База данных пуста, файл не был создан')
  264. else:
  265. f=open('newdata.txt', 'w')
  266. for x in db:
  267. f.write(db[x]['name']+'\n')
  268. f.write(str(db[x]['avg'])+'\n')
  269. f.write(str(db[x]['price'])+'\n')
  270. f.write(str(db[x]['indie'])+'\n')
  271. f.write(db[x]['genre']+'\n')
  272. f.write(str(db[x]['rating'])+'\n')
  273. f.write('\n')
  274. f.close()
  275. print('Новый файл имеет название newdata.txt')
  276.  
  277. db = base()
  278. #sort(db)
  279. edit(db)
  280. #sl = searchName(db)
  281. #indie = searchIndie(db)
  282. #AAA = searchAAA(db)
  283. #newdb = searchByAVG(db, 30000, 10000000)
  284. newfile(db)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement