Advertisement
Guest User

Untitled

a guest
May 22nd, 2019
407
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.60 KB | None | 0 0
  1. Задача:
  2. Мы долго писали функции, и настало время пустить их в ход. В этом задании мы постараемся ответить на вопрос: влияет ли жанр на какие-либо параметры фильма?
  3. Сначала добавьте к исходной таблице два дополнительных столбца: ROI и бюджет одной минуты. Для этого у вас уже есть функции add_roi() и add_price_per_minute().
  4. Затем для каждого жанра посчитайте средние величины: рейтинг, длину, ROI и бюджет минуты. Для этого воспользуйтесь уже написанной функцией column_mean(). Сведите информацию вот в такую таблицу:
  5. Жанр | Рейтинг | Длина | ROI | Бюджет за минуту
  6. -------------------------------------------------------
  7. история | ... | ... | ... | ...
  8. ...
  9. Сохраните её в переменной genres_means (англ. genres means, «средние значения для каждого жанра») и выведите на экран. Числа печатайте с двумя знаками после запятой и выравнивайте по правому краю, а названия — по левому. В прекоде вывод уже описан.
  10.  
  11. КОД:
  12.  
  13. oscar_data = [
  14. ['Форма воды', 2017, 6.914, 123, ['фантастика', 'драма'], 19.4, 195.243464],
  15. ['Лунный свет', 2016, 6.151, 110, ['драма'], 1.5, 65.046687],
  16. ['В центре внимания', 2015, 7.489, 129, ['драма', 'криминал', 'история'], 20.0, 88.346473],
  17. ['Бёрдмэн', 2014, 7.604, 119, ['драма', 'комедия'], 18.0, 103.215094],
  18. ['12 лет рабства', 2013, 7.71, 133, ['драма', 'биография', 'история'], 20.0, 178.371993],
  19. ['Операция "Арго"', 2012, 7.517, 120, ['триллер', 'драма', 'биография'], 44.5, 232.324128],
  20. ['Артист', 2011, 7.942, 96, ['драма', 'мелодрама', 'комедия'], 15.0, 133.432856],
  21. ['Король говорит!', 2010, 7.977, 118, ['драма', 'биография', 'история'], 15.0, 414.211549],
  22. ['Повелитель бури', 2008, 7.298, 126, ['триллер', 'драма', 'военный', 'история'], 15.0, 49.230772],
  23. ['Миллионер из трущоб', 2008, 7.724, 120, ['драма', 'мелодрама'], 15.0, 377.910544],
  24. ['Старикам тут не место', 2007, 7.726, 122, ['триллер', 'драма', 'криминал'], 25.0, 171.627166],
  25. ['Отступники', 2006, 8.456, 151, ['триллер', 'драма', 'криминал'], 90.0, 289.847354],
  26. ['Столкновение', 2004, 7.896, 108, ['триллер', 'драма', 'криминал'], 6.5, 98.410061],
  27. ['Малышка на миллион', 2004, 8.075, 132, ['драма', 'спорт'], 30.0, 216.763646],
  28. ['Властелин колец: Возвращение Короля', 2003, 8.617, 201, ['фэнтези', 'драма', 'приключения'], 94.0, 1119.110941],
  29. ['Чикаго', 2002, 7.669, 113, ['мюзикл', 'комедия', 'криминал'], 45.0, 306.776732],
  30. ['Игры разума', 2001, 8.557, 135, ['драма', 'биография', 'мелодрама'], 58.0, 313.542341],
  31. ['Гладиатор', 2000, 8.585, 155, ['боевик', 'драма', 'приключения'], 103.0, 457.640427],
  32. ['Красота по-американски', 1999, 7.965, 122, ['драма'], 15.0, 356.296601],
  33. ['Влюбленный Шекспир', 1998, 7.452, 123, ['драма', 'мелодрама', 'комедия', 'история'], 25.0, 289.317794],
  34. ['Титаник', 1997, 8.369, 194, ['драма', 'мелодрама'], 200.0, 2185.372302],
  35. ['Английский пациент', 1996, 7.849, 155, ['драма', 'мелодрама', 'военный'], 27.0, 231.976425],
  36. ['Храброе сердце', 1995, 8.283, 178, ['драма', 'военный', 'биография', 'история'], 72.0, 210.409945],
  37. ['Форрест Гамп', 1994, 8.915, 142, ['драма', 'мелодрама'], 55.0, 677.386686],
  38. ['Список Шиндлера', 1993, 8.819, 195, ['драма', 'биография', 'история'], 22.0, 321.265768],
  39. ['Непрощенный', 1992, 7.858, 131, ['драма', 'вестерн'], 14.4, 159.157447],
  40. ['Молчание ягнят', 1990, 8.335, 114, ['триллер', 'криминал', 'детектив', 'драма', 'ужасы'], 19.0, 272.742922],
  41. ['Танцующий с волками', 1990, 8.112, 181, ['драма', 'приключения', 'вестерн'], 22.0, 424.208848],
  42. ['Шофёр мисс Дэйзи', 1989, 7.645, 99, ['драма'], 7.5, 145.793296],
  43. ['Человек дождя', 1988, 8.25, 133, ['драма'], 25.0, 354.825435],
  44. ]
  45.  
  46. def filter_by_genre(data, genre):
  47. result = []
  48. for row in data:
  49. genres = row[4]
  50. if genre in genres:
  51. result.append(row)
  52. return result
  53.  
  54. def column_sum(data, column):
  55. result = 0
  56. for row in data:
  57. result += row[column]
  58. return result
  59.  
  60. def column_mean(data, column):
  61. total = column_sum(data, column)
  62. mean = total / len(data)
  63. return mean
  64.  
  65. def add_roi(data):
  66. for i in range(len(data)):
  67. budget = data[i][5]
  68. gross = data[i][6]
  69. roi = (gross - budget) / budget
  70. data[i].append(roi)
  71.  
  72. def add_price_per_minute(data):
  73. for i in range(len(data)):
  74. length = data[i][3]
  75. budget = data[i][5]
  76. price_per_minute = budget / length
  77. data[i].append(price_per_minute)
  78.  
  79. # переменная с выбранными жанрами (англ. selected genres, "избранные жанры")
  80. selected_genres = ['история', 'мелодрама', 'криминал', 'биография', 'триллер']
  81.  
  82. # добавьте в таблицу столбцы с ROI и стоимостью одной минуты фильма
  83. add_roi(oscar_data)
  84. add_price_per_minute(oscar_data)
  85.  
  86.  
  87. genres_means = []
  88. for genre in selected_genres:
  89. # отфильтруйте таблицу по жанру
  90. filt_data = filter_by_genre(oscar_data, genre)
  91.  
  92. # посчитайте средние значения по отфильтрованной таблице
  93. mean_score = column_mean(filt_data, 2)
  94. mean_length = column_mean(filt_data, 3)
  95. mean_roi = column_mean(filt_data, 4)
  96. mean_ppm = column_mean(filt_data, 5)
  97. # добавьте очередную строку в таблицу
  98. genres_means.append([genre, mean_score, mean_length, mean_roi, mean_ppm])
  99.  
  100. print('Жанр | Рейтинг | Длина | ROI | Бюджет за минуту')
  101. print('-------------------------------------------------------')
  102. for row in genres_means:
  103. print('{: <9} | {: >7.2f} | {: >5.2f} | {: >5.2f} | {: >16.2f}'.format(
  104. row[0], row[1], row[2], row[3], row[4]))
  105.  
  106. ОШИБКА:
  107.  
  108. Traceback (most recent call last):
  109. File "main.py", line 83, in <module>
  110. mean_roi = column_mean(filt_data, 4)
  111. File "main.py", line 49, in column_mean
  112. total = column_sum(data, column)
  113. File "main.py", line 45, in column_sum
  114. result += row[column]
  115. TypeError: unsupported operand type(s) for +=: 'int' and 'list'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement