Одного аргумента функции часто не хватает для сложных задач. В этом уроке мы приведём пример такой задачи и покажем, как делать функции с несколькими аргументами. Начнём с того, что напишем функцию для печати на экране первых 5 элементов таблицы. def print_top5(data): print(‘Название | Год | Рейтинг | Длина | Бюджет | Сборы |’) print(‘———————————————————————————‘) for row in data[:5]: print(‘{: <35} | {} | {: >7.2f} | {: >5} | {: >6.1f} | {: >6.1f} |’.format( row[0], row[1], row[2], row[3], row[5], row[6])) Обратите внимание на отступы для цикла в коде функции. Мы вложили цикл в её тело, и поэтому тело такого цикла набирается с отступом уже не в 4 пробела, а в 8. Теперь вызовем нашу функцию: она печатает на экране топовые (по рейтингу и бюджету) фильмы. oscar_data = [ [‘Форма воды’, 2017, 6.914, 123, [‘фантастика’, ‘драма’], 19.4, 195.243464], [‘Лунный свет’, 2016, 6.151, 110, [‘драма’], 1.5, 65.046687], [‘В центре внимания’, 2015, 7.489, 129, [‘драма’, ‘криминал’, ‘история’], 20.0, 88.346473], [‘Бёрдмэн’, 2014, 7.604, 119, [‘драма’, ‘комедия’], 18.0, 103.215094], [’12 лет рабства’, 2013, 7.71, 133, [‘драма’, ‘биография’, ‘история’], 20.0, 178.371993], [‘Операция «Арго»‘, 2012, 7.517, 120, [‘триллер’, ‘драма’, ‘биография’], 44.5, 232.324128], [‘Артист’, 2011, 7.942, 96, [‘драма’, ‘мелодрама’, ‘комедия’], 15.0, 133.432856], [‘Король говорит!’, 2010, 7.977, 118, [‘драма’, ‘биография’, ‘история’], 15.0, 414.211549], [‘Повелитель бури’, 2008, 7.298, 126, [‘триллер’, ‘драма’, ‘военный’, ‘история’], 15.0, 49.230772], [‘Миллионер из трущоб’, 2008, 7.724, 120, [‘драма’, ‘мелодрама’], 15.0, 377.910544], [‘Старикам тут не место’, 2007, 7.726, 122, [‘триллер’, ‘драма’, ‘криминал’], 25.0, 171.627166], [‘Отступники’, 2006, 8.456, 151, [‘триллер’, ‘драма’, ‘криминал’], 90.0, 289.847354], [‘Столкновение’, 2004, 7.896, 108, [‘триллер’, ‘драма’, ‘криминал’], 6.5, 98.410061], [‘Малышка на миллион’, 2004, 8.075, 132, [‘драма’, ‘спорт’], 30.0, 216.763646], [‘Властелин колец: Возвращение Короля’, 2003, 8.617, 201, [‘фэнтези’, ‘драма’, ‘приключения’], 94.0, 1119.110941], [‘Чикаго’, 2002, 7.669, 113, [‘мюзикл’, ‘комедия’, ‘криминал’], 45.0, 306.776732], [‘Игры разума’, 2001, 8.557, 135, [‘драма’, ‘биография’, ‘мелодрама’], 58.0, 313.542341], [‘Гладиатор’, 2000, 8.585, 155, [‘боевик’, ‘драма’, ‘приключения’], 103.0, 457.640427], [‘Красота по-американски’, 1999, 7.965, 122, [‘драма’], 15.0, 356.296601], [‘Влюбленный Шекспир’, 1998, 7.452, 123, [‘драма’, ‘мелодрама’, ‘комедия’, ‘история’], 25.0, 289.317794], [‘Титаник’, 1997, 8.369, 194, [‘драма’, ‘мелодрама’], 200.0, 2185.372302], [‘Английский пациент’, 1996, 7.849, 155, [‘драма’, ‘мелодрама’, ‘военный’], 27.0, 231.976425], [‘Храброе сердце’, 1995, 8.283, 178, [‘драма’, ‘военный’, ‘биография’, ‘история’], 72.0, 210.409945], [‘Форрест Гамп’, 1994, 8.915, 142, [‘драма’, ‘мелодрама’], 55.0, 677.386686], [‘Список Шиндлера’, 1993, 8.819, 195, [‘драма’, ‘биография’, ‘история’], 22.0, 321.265768], [‘Непрощенный’, 1992, 7.858, 131, [‘драма’, ‘вестерн’], 14.4, 159.157447], [‘Молчание ягнят’, 1990, 8.335, 114, [‘триллер’, ‘криминал’, ‘детектив’, ‘драма’, ‘ужасы’], 19.0, 272.742922], [‘Танцующий с волками’, 1990, 8.112, 181, [‘драма’, ‘приключения’, ‘вестерн’], 22.0, 424.208848], [‘Шофёр мисс Дэйзи’, 1989, 7.645, 99, [‘драма’], 7.5, 145.793296], [‘Человек дождя’, 1988, 8.25, 133, [‘драма’], 25.0, 354.825435], ] print(‘# Самый высокий рейтинг’) print() oscar_data.sort(key=lambda row: row[2], reverse=True) print_top5(oscar_data) print() print() print(‘# Самый большой бюджет’) print() oscar_data.sort(key=lambda row: row[5], reverse=True) print_top5(oscar_data) print() print() # Самый высокий рейтинг Название | Год | Рейтинг | Длина | Бюджет | Сборы | ——————————————————————————— Форрест Гамп | 1994 | 8.91 | 142 | 55.0 | 677.4 | Список Шиндлера | 1993 | 8.82 | 195 | 22.0 | 321.3 | Властелин колец: Возвращение Короля | 2003 | 8.62 | 201 | 94.0 | 1119.1 | Гладиатор | 2000 | 8.59 | 155 | 103.0 | 457.6 | Игры разума | 2001 | 8.56 | 135 | 58.0 | 313.5 | # Самый большой бюджет Название | Год | Рейтинг | Длина | Бюджет | Сборы | ——————————————————————————— Титаник | 1997 | 8.37 | 194 | 200.0 | 2185.4 | Гладиатор | 2000 | 8.59 | 155 | 103.0 | 457.6 | Властелин колец: Возвращение Короля | 2003 | 8.62 | 201 | 94.0 | 1119.1 | Отступники | 2006 | 8.46 | 151 | 90.0 | 289.8 | Храброе сердце | 1995 | 8.28 | 178 | 72.0 | 210.4 | Улучшим нашу функцию: пусть она сама сортирует таблицу. Чтобы это сделать, пропишем в коде ещё один аргумент (количество теоретически не ограничено). Этим вторым аргументом станет индекс столбца, по которому мы хотим сортировать. Указывают его в скобках после первого аргумента. Пусть в объявлении функции этот параметр будет называться column: def print_top5_by_column(data, column): … Тогда для сортировки по столбцу с индексом 3 функцию нужно вызвать так: print_top5_by_column(oscar_data, 3) Обратите внимание: мы переименовали функцию в соответствии с её целью. Имена аргументов тоже понятно описывают, для чего те нужны. Напишем тело функции и обновим код печати таблицы: def print_top5_by_column(data, column): data.sort(key=lambda row: row[column], reverse=True) print(‘Название | Год | Рейтинг | Длина | Бюджет | Сборы |’) print(‘———————————————————————————‘) for row in data[:5]: print(‘{: <35} | {} | {: >7.2f} | {: >5} | {: >6.1f} | {: >6.1f} |’.format( row[0], row[1], row[2], row[3], row[5], row[6])) Используем её, чтобы вывести информацию и по другим столбцам: oscar_data = [ [‘Форма воды’, 2017, 6.914, 123, [‘фантастика’, ‘драма’], 19.4, 195.243464], [‘Лунный свет’, 2016, 6.151, 110, [‘драма’], 1.5, 65.046687], [‘В центре внимания’, 2015, 7.489, 129, [‘драма’, ‘криминал’, ‘история’], 20.0, 88.346473], [‘Бёрдмэн’, 2014, 7.604, 119, [‘драма’, ‘комедия’], 18.0, 103.215094], [’12 лет рабства’, 2013, 7.71, 133, [‘драма’, ‘биография’, ‘история’], 20.0, 178.371993], [‘Операция «Арго»‘, 2012, 7.517, 120, [‘триллер’, ‘драма’, ‘биография’], 44.5, 232.324128], [‘Артист’, 2011, 7.942, 96, [‘драма’, ‘мелодрама’, ‘комедия’], 15.0, 133.432856], [‘Король говорит!’, 2010, 7.977, 118, [‘драма’, ‘биография’, ‘история’], 15.0, 414.211549], [‘Повелитель бури’, 2008, 7.298, 126, [‘триллер’, ‘драма’, ‘военный’, ‘история’], 15.0, 49.230772], [‘Миллионер из трущоб’, 2008, 7.724, 120, [‘драма’, ‘мелодрама’], 15.0, 377.910544], [‘Старикам тут не место’, 2007, 7.726, 122, [‘триллер’, ‘драма’, ‘криминал’], 25.0, 171.627166], [‘Отступники’, 2006, 8.456, 151, [‘триллер’, ‘драма’, ‘криминал’], 90.0, 289.847354], [‘Столкновение’, 2004, 7.896, 108, [‘триллер’, ‘драма’, ‘криминал’], 6.5, 98.410061], [‘Малышка на миллион’, 2004, 8.075, 132, [‘драма’, ‘спорт’], 30.0, 216.763646], [‘Властелин колец: Возвращение Короля’, 2003, 8.617, 201, [‘фэнтези’, ‘драма’, ‘приключения’], 94.0, 1119.110941], [‘Чикаго’, 2002, 7.669, 113, [‘мюзикл’, ‘комедия’, ‘криминал’], 45.0, 306.776732], [‘Игры разума’, 2001, 8.557, 135, [‘драма’, ‘биография’, ‘мелодрама’], 58.0, 313.542341], [‘Гладиатор’, 2000, 8.585, 155, [‘боевик’, ‘драма’, ‘приключения’], 103.0, 457.640427], [‘Красота по-американски’, 1999, 7.965, 122, [‘драма’], 15.0, 356.296601], [‘Влюбленный Шекспир’, 1998, 7.452, 123, [‘драма’, ‘мелодрама’, ‘комедия’, ‘история’], 25.0, 289.317794], [‘Титаник’, 1997, 8.369, 194, [‘драма’, ‘мелодрама’], 200.0, 2185.372302], [‘Английский пациент’, 1996, 7.849, 155, [‘драма’, ‘мелодрама’, ‘военный’], 27.0, 231.976425], [‘Храброе сердце’, 1995, 8.283, 178, [‘драма’, ‘военный’, ‘биография’, ‘история’], 72.0, 210.409945], [‘Форрест Гамп’, 1994, 8.915, 142, [‘драма’, ‘мелодрама’], 55.0, 677.386686], [‘Список Шиндлера’, 1993, 8.819, 195, [‘драма’, ‘биография’, ‘история’], 22.0, 321.265768], [‘Непрощенный’, 1992, 7.858, 131, [‘драма’, ‘вестерн’], 14.4, 159.157447], [‘Молчание ягнят’, 1990, 8.335, 114, [‘триллер’, ‘криминал’, ‘детектив’, ‘драма’, ‘ужасы’], 19.0, 272.742922], [‘Танцующий с волками’, 1990, 8.112, 181, [‘драма’, ‘приключения’, ‘вестерн’], 22.0, 424.208848], [‘Шофёр мисс Дэйзи’, 1989, 7.645, 99, [‘драма’], 7.5, 145.793296], [‘Человек дождя’, 1988, 8.25, 133, [‘драма’], 25.0, 354.825435], ] print(‘# Самый высокий рейтинг’) print() print_top5_by_column(oscar_data, 2) print() print() print(‘# Самый большой бюджет’) print() print_top5_by_column(oscar_data, 5) print() print() print(‘# Самые большие сборы’) print() print_top5_by_column(oscar_data, 6) print() print() print(‘# Самая большая длина’) print() print_top5_by_column(oscar_data, 3) print() print() # Самый высокий рейтинг Название | Год | Рейтинг | Длина | Бюджет | Сборы | ——————————————————————————— Форрест Гамп | 1994 | 8.91 | 142 | 55.0 | 677.4 | Список Шиндлера | 1993 | 8.82 | 195 | 22.0 | 321.3 | Властелин колец: Возвращение Короля | 2003 | 8.62 | 201 | 94.0 | 1119.1 | Гладиатор | 2000 | 8.59 | 155 | 103.0 | 457.6 | Игры разума | 2001 | 8.56 | 135 | 58.0 | 313.5 | # Самый большой бюджет Название | Год | Рейтинг | Длина | Бюджет | Сборы | ——————————————————————————— Титаник | 1997 | 8.37 | 194 | 200.0 | 2185.4 | Гладиатор | 2000 | 8.59 | 155 | 103.0 | 457.6 | Властелин колец: Возвращение Короля | 2003 | 8.62 | 201 | 94.0 | 1119.1 | Отступники | 2006 | 8.46 | 151 | 90.0 | 289.8 | Храброе сердце | 1995 | 8.28 | 178 | 72.0 | 210.4 | # Самые большие сборы Название | Год | Рейтинг | Длина | Бюджет | Сборы | ——————————————————————————— Титаник | 1997 | 8.37 | 194 | 200.0 | 2185.4 | Властелин колец: Возвращение Короля | 2003 | 8.62 | 201 | 94.0 | 1119.1 | Форрест Гамп | 1994 | 8.91 | 142 | 55.0 | 677.4 | Гладиатор | 2000 | 8.59 | 155 | 103.0 | 457.6 | Танцующий с волками | 1990 | 8.11 | 181 | 22.0 | 424.2 | # Самая большая длина Название | Год | Рейтинг | Длина | Бюджет | Сборы | ——————————————————————————— Властелин колец: Возвращение Короля | 2003 | 8.62 | 201 | 94.0 | 1119.1 | Список Шиндлера | 1993 | 8.82 | 195 | 22.0 | 321.3 | Титаник | 1997 | 8.37 | 194 | 200.0 | 2185.4 | Танцующий с волками | 1990 | 8.11 | 181 | 22.0 | 424.2 | Храброе сердце | 1995 | 8.28 | 178 | 72.0 | 210.4 | TASK_1_3 Мы продолжили улучшать функцию print_top5_by_column() и добавили в неё возможность изменять порядок сортировки. Для этого мы дописали ещё один аргумент reverse. Он имеет такой же смысл, как аргумент reverse метода sort(): принимает значение False, если нужно сортировать в обычном порядке, и True — если в обратном. После добавления нового аргумента написанные ранее вызовы функций перестали работать. Проблема в том, что функция теперь принимает три аргумента, а мы передаём только два. Исправьте эти вызовы, передав им третий аргумент (он будет равен True, так как мы по-прежнему хотим видеть бо́льшие значения наверху). Затем выведите на экран 5 самых коротких фильмов из таблицы (третьим аргументом будет False, чтобы наверху были короткие фильмы, а не длинные). SOLUTION oscar_data = [ [‘Форма воды’, 2017, 6.914, 123, [‘фантастика’, ‘драма’], 19.4, 195.243464], [‘Лунный свет’, 2016, 6.151, 110, [‘драма’], 1.5, 65.046687], [‘В центре внимания’, 2015, 7.489, 129, [‘драма’, ‘криминал’, ‘история’], 20.0, 88.346473], [‘Бёрдмэн’, 2014, 7.604, 119, [‘драма’, ‘комедия’], 18.0, 103.215094], [’12 лет рабства’, 2013, 7.71, 133, [‘драма’, ‘биография’, ‘история’], 20.0, 178.371993], [‘Операция «Арго»‘, 2012, 7.517, 120, [‘триллер’, ‘драма’, ‘биография’], 44.5, 232.324128], [‘Артист’, 2011, 7.942, 96, [‘драма’, ‘мелодрама’, ‘комедия’], 15.0, 133.432856], [‘Король говорит!’, 2010, 7.977, 118, [‘драма’, ‘биография’, ‘история’], 15.0, 414.211549], [‘Повелитель бури’, 2008, 7.298, 126, [‘триллер’, ‘драма’, ‘военный’, ‘история’], 15.0, 49.230772], [‘Миллионер из трущоб’, 2008, 7.724, 120, [‘драма’, ‘мелодрама’], 15.0, 377.910544], [‘Старикам тут не место’, 2007, 7.726, 122, [‘триллер’, ‘драма’, ‘криминал’], 25.0, 171.627166], [‘Отступники’, 2006, 8.456, 151, [‘триллер’, ‘драма’, ‘криминал’], 90.0, 289.847354], [‘Столкновение’, 2004, 7.896, 108, [‘триллер’, ‘драма’, ‘криминал’], 6.5, 98.410061], [‘Малышка на миллион’, 2004, 8.075, 132, [‘драма’, ‘спорт’], 30.0, 216.763646], [‘Властелин колец: Возвращение Короля’, 2003, 8.617, 201, [‘фэнтези’, ‘драма’, ‘приключения’], 94.0, 1119.110941], [‘Чикаго’, 2002, 7.669, 113, [‘мюзикл’, ‘комедия’, ‘криминал’], 45.0, 306.776732], [‘Игры разума’, 2001, 8.557, 135, [‘драма’, ‘биография’, ‘мелодрама’], 58.0, 313.542341], [‘Гладиатор’, 2000, 8.585, 155, [‘боевик’, ‘драма’, ‘приключения’], 103.0, 457.640427], [‘Красота по-американски’, 1999, 7.965, 122, [‘драма’], 15.0, 356.296601], [‘Влюбленный Шекспир’, 1998, 7.452, 123, [‘драма’, ‘мелодрама’, ‘комедия’, ‘история’], 25.0, 289.317794], [‘Титаник’, 1997, 8.369, 194, [‘драма’, ‘мелодрама’], 200.0, 2185.372302], [‘Английский пациент’, 1996, 7.849, 155, [‘драма’, ‘мелодрама’, ‘военный’], 27.0, 231.976425], [‘Храброе сердце’, 1995, 8.283, 178, [‘драма’, ‘военный’, ‘биография’, ‘история’], 72.0, 210.409945], [‘Форрест Гамп’, 1994, 8.915, 142, [‘драма’, ‘мелодрама’], 55.0, 677.386686], [‘Список Шиндлера’, 1993, 8.819, 195, [‘драма’, ‘биография’, ‘история’], 22.0, 321.265768], [‘Непрощенный’, 1992, 7.858, 131, [‘драма’, ‘вестерн’], 14.4, 159.157447], [‘Молчание ягнят’, 1990, 8.335, 114, [‘триллер’, ‘криминал’, ‘детектив’, ‘драма’, ‘ужасы’], 19.0, 272.742922], [‘Танцующий с волками’, 1990, 8.112, 181, [‘драма’, ‘приключения’, ‘вестерн’], 22.0, 424.208848], [‘Шофёр мисс Дэйзи’, 1989, 7.645, 99, [‘драма’], 7.5, 145.793296], [‘Человек дождя’, 1988, 8.25, 133, [‘драма’], 25.0, 354.825435], ] def print_top5_by_column(data, column, reverse): data.sort(key=lambda row: row[column], reverse=reverse) print(‘Название | Год | Рейтинг | Длина | Бюджет | Сборы |’) print(‘———————————————————————————‘) for row in data[:5]: print(‘{: <35} | {} | {: >7.2f} | {: >5} | {: >6.1f} | {: >6.1f} |’.format( row[0], row[1], row[2], row[3], row[5], row[6])) # обновите код вывода топовых значений print(‘# Самый высокий рейтинг’) print() print_top5_by_column(oscar_data, 2, True) print() print() print(‘# Самый большой бюджет’) print() print_top5_by_column(oscar_data, 5, True) print() print() print(‘# Самые большие сборы’) print() print_top5_by_column(oscar_data, 6,True) print() print() print(‘# Самая большая длина’) print() print_top5_by_column(oscar_data, 3,True) print() print() # добавьте вывод самых коротких фильмов print(‘# Самая маленькая длина’) print() print_top5_by_column(oscar_data, 3,False) print() print() TASK_2_3 Напишите функцию print_profit(), которая вычисляет и выводит на экран прибыль, полученную от фильма. Прибыль вычисляется как разность сборов (выручки) и бюджета. Функция должна принимать значения бюджета и сборов как аргументы (первый аргумент — бюджет, второй аргумент — сборы). Названия для аргументов выберите самостоятельно. Результат должен печататься на экране с двумя знаками после запятой и без сопроводительного текста. В прекоде мы привели пример использования этой функции. SOLUTION def print_profit(budjet,revenue): profit=revenue-budjet print(«{:.2f}».format(profit)) print(«Прибыль от фильма «Титаник»:») print_profit(200.0, 2185.372302) TASK_3_3 Напишите функцию print_mean(), которая считает и выводит на экран среднее значение по заданному столбцу. Функция должна принимать два аргумента —data (таблицу) и column (номер столбца). Результат должен печататься на экране с двумя знаками после запятой и без сопроводительного текста. После создания функции можно посчитать средние значения по большинству столбцов. Мы уже сделали это в прекоде. SOLUTION oscar_data = [ [‘Форма воды’, 2017, 6.914, 123, [‘фантастика’, ‘драма’], 19.4, 195.243464], [‘Лунный свет’, 2016, 6.151, 110, [‘драма’], 1.5, 65.046687], [‘В центре внимания’, 2015, 7.489, 129, [‘драма’, ‘криминал’, ‘история’], 20.0, 88.346473], [‘Бёрдмэн’, 2014, 7.604, 119, [‘драма’, ‘комедия’], 18.0, 103.215094], [’12 лет рабства’, 2013, 7.71, 133, [‘драма’, ‘биография’, ‘история’], 20.0, 178.371993], [‘Операция «Арго»‘, 2012, 7.517, 120, [‘триллер’, ‘драма’, ‘биография’], 44.5, 232.324128], [‘Артист’, 2011, 7.942, 96, [‘драма’, ‘мелодрама’, ‘комедия’], 15.0, 133.432856], [‘Король говорит!’, 2010, 7.977, 118, [‘драма’, ‘биография’, ‘история’], 15.0, 414.211549], [‘Повелитель бури’, 2008, 7.298, 126, [‘триллер’, ‘драма’, ‘военный’, ‘история’], 15.0, 49.230772], [‘Миллионер из трущоб’, 2008, 7.724, 120, [‘драма’, ‘мелодрама’], 15.0, 377.910544], [‘Старикам тут не место’, 2007, 7.726, 122, [‘триллер’, ‘драма’, ‘криминал’], 25.0, 171.627166], [‘Отступники’, 2006, 8.456, 151, [‘триллер’, ‘драма’, ‘криминал’], 90.0, 289.847354], [‘Столкновение’, 2004, 7.896, 108, [‘триллер’, ‘драма’, ‘криминал’], 6.5, 98.410061], [‘Малышка на миллион’, 2004, 8.075, 132, [‘драма’, ‘спорт’], 30.0, 216.763646], [‘Властелин колец: Возвращение Короля’, 2003, 8.617, 201, [‘фэнтези’, ‘драма’, ‘приключения’], 94.0, 1119.110941], [‘Чикаго’, 2002, 7.669, 113, [‘мюзикл’, ‘комедия’, ‘криминал’], 45.0, 306.776732], [‘Игры разума’, 2001, 8.557, 135, [‘драма’, ‘биография’, ‘мелодрама’], 58.0, 313.542341], [‘Гладиатор’, 2000, 8.585, 155, [‘боевик’, ‘драма’, ‘приключения’], 103.0, 457.640427], [‘Красота по-американски’, 1999, 7.965, 122, [‘драма’], 15.0, 356.296601], [‘Влюбленный Шекспир’, 1998, 7.452, 123, [‘драма’, ‘мелодрама’, ‘комедия’, ‘история’], 25.0, 289.317794], [‘Титаник’, 1997, 8.369, 194, [‘драма’, ‘мелодрама’], 200.0, 2185.372302], [‘Английский пациент’, 1996, 7.849, 155, [‘драма’, ‘мелодрама’, ‘военный’], 27.0, 231.976425], [‘Храброе сердце’, 1995, 8.283, 178, [‘драма’, ‘военный’, ‘биография’, ‘история’], 72.0, 210.409945], [‘Форрест Гамп’, 1994, 8.915, 142, [‘драма’, ‘мелодрама’], 55.0, 677.386686], [‘Список Шиндлера’, 1993, 8.819, 195, [‘драма’, ‘биография’, ‘история’], 22.0, 321.265768], [‘Непрощенный’, 1992, 7.858, 131, [‘драма’, ‘вестерн’], 14.4, 159.157447], [‘Молчание ягнят’, 1990, 8.335, 114, [‘триллер’, ‘криминал’, ‘детектив’, ‘драма’, ‘ужасы’], 19.0, 272.742922], [‘Танцующий с волками’, 1990, 8.112, 181, [‘драма’, ‘приключения’, ‘вестерн’], 22.0, 424.208848], [‘Шофёр мисс Дэйзи’, 1989, 7.645, 99, [‘драма’], 7.5, 145.793296], [‘Человек дождя’, 1988, 8.25, 133, [‘драма’], 25.0, 354.825435], ] def print_mean(data, column): total = 0 for row in data: # чтобы получить нужное значение, напишите row[column] total += row[column] mean = total / len(data) print(‘{:.2f}’.format(mean)) print(‘Средний рейтинг: ‘, end=») print_mean(oscar_data, 2) print(‘Средняя длина: ‘, end=») print_mean(oscar_data, 3) print(‘Средний бюджет: ‘, end=») print_mean(oscar_data, 5) print(‘Средние сборы: ‘, end=») print_mean(oscar_data, 6)
я написал код к задаче на языке пайтон, в целом он работает но не совсем корректно нужно его подправить. я не знаю в чем ошибка
код:
price = int(input(‘Стоимость товара (0 — покупок больше нет):’))
total_price = 0
while price != 0:
total_price += price
price = int(input(‘Стоимость товара (0 — покупок больше нет):’))
print(‘Стоимость всех покупок:’, total_price)
Условие задачи:
Программа последовательно принимает стоимость каждого товара, пока не будет введён 0.
Затем она выводит сумму покупок на экран с текстом «Стоимость всех покупок:». Каждый запрос стоимости товара сопровождается подсказкой: «Стоимость товара (0 — покупок больше нет):».
Программа должна работать как на картинке.
какой должен быть результат:
Стоимость товара (0 — покупок больше нет):
250
Стоимость товара (0 — покупок больше нет):
320
Стоимость товара (0 — покупок больше нет):
0
Стоимость всех покупок: 570
I’ve written some Java code, as shown below, but it isn’t behaving as I expected. Right near the bottom, starting from the line if (upgrade == "Y"). I did a test, I entered Y but this line did not execute. Could you please help me figure out why this behaviour occurred?
import java.io.*;
class P4
{
public static int get_price(String day_of_week, String age_group)
{
int price=0;
if (day_of_week == "WD")
{
if (age_group == "adult")
price = 66;
else if (age_group == "child")
price=48;
else
price = 32;
}
else
{
if (age_group == "adult")
price = 72;
else if (age_group == "child")
price=52;
else
price = 36;
}
return price;
}
public static void main(String[] args)
{
String adult2=null;
String child2=null;
String senior2=null;
String day_of_week=null;
String upgrade=null;
System.out.println("Enter Number of Adult Ticket:");
BufferedReader adult1 = new BufferedReader(new InputStreamReader(System.in));
try
{
adult2 = adult1.readLine();
}
catch (IOException e) {
System.out.println("Error!");
System.exit(1);
}
System.out.println("Enter Number of Child Ticket:");
BufferedReader child1 = new BufferedReader(new InputStreamReader(System.in));
try
{
child2 = child1.readLine();
}
catch (IOException e) {
System.out.println("Error!");
System.exit(1);
}
System.out.println("Enter Number of Senior Ticket:");
BufferedReader senior1 = new BufferedReader(new InputStreamReader(System.in));
try
{
senior2 = senior1.readLine();
}
catch (IOException e) {
System.out.println("Error!");
System.exit(1);
}
System.out.println("Choose Weekday or Weekend Pass (WD/WE):");
BufferedReader day_of_week1 = new BufferedReader(new InputStreamReader(System.in));
try
{
day_of_week = day_of_week1.readLine();
}
catch (IOException e) {
System.out.println("Error!");
System.exit(1);
}
System.out.println("Upgrade to Express Pass (Y/N):");
BufferedReader upgrade1 = new BufferedReader(new InputStreamReader(System.in));
try
{
upgrade = upgrade1.readLine();
}
catch (IOException e) {
System.out.println("Error!");
System.exit(1);
}
int adult = Integer.parseInt(adult2);
int child = Integer.parseInt(child2);
int senior = Integer.parseInt(senior2);
int total_a = adult * get_price(day_of_week, "adult");
int total_c = child * get_price(day_of_week, "child");
int total_s = senior * get_price(day_of_week, "senior");
int total_price = total_a + total_c + total_s;
int total_people = adult + child + senior;
int upgrade_price = 0;
if (upgrade == "Y")
{
if (day_of_week == "WD")
{
upgrade_price = total_people * 30;
}
else
{
upgrade_price = total_people * 68;
}
}
else
upgrade_price = 0;
int price = upgrade_price + total_price;
System.out.println("The total price is $" + price);
}}
footy
5,78313 gold badges48 silver badges96 bronze badges
asked Jan 20, 2012 at 7:04
2
You cannot compare strings with ==, you need to use equals()
if("Y".equals(upgrade))
(I tend to put the constant first, to handle the case where upgrade == null)
answered Jan 20, 2012 at 7:07
Rolf RanderRolf Rander
3,22120 silver badges21 bronze badges
0
In java string comparison
String s = "something", t = "maybe something else"; if (s == t) // Legal, but usually WRONG. if (s.equals(t)) // RIGHT if (s > t) // ILLEGAL if (s.compareTo(t) > 0) // CORRECT>
So in your case, use:
if(upgrade.equals("Y")) {
//your codes
}
import java.io.*;
class P4
{
public static int get_price(String day_of_week, String age_group)
{
int price=0;
if (day_of_week.equals("WD"))
{
if (age_group.equals("adult"))
price = 66;
else if (age_group.equals("child"))
price=48;
else
price = 32;
}
else
{
if (age_group.equals("adult"))
price = 72;
else if (age_group.equals("child"))
price=52;
else
price = 36;
}
return price;
}
public static void main(String[] args)
{
String adult2=null;
String child2=null;
String senior2=null;
String day_of_week=null;
String upgrade=null;
System.out.println("Enter Number of Adult Ticket:");
BufferedReader adult1 = new BufferedReader(new InputStreamReader(System.in));
try
{
adult2 = adult1.readLine();
}
catch (IOException e) {
System.out.println("Error!");
System.exit(1);
}
System.out.println("Enter Number of Child Ticket:");
BufferedReader child1 = new BufferedReader(new InputStreamReader(System.in));
try
{
child2 = child1.readLine();
}
catch (IOException e) {
System.out.println("Error!");
System.exit(1);
}
System.out.println("Enter Number of Senior Ticket:");
BufferedReader senior1 = new BufferedReader(new InputStreamReader(System.in));
try
{
senior2 = senior1.readLine();
}
catch (IOException e) {
System.out.println("Error!");
System.exit(1);
}
System.out.println("Choose Weekday or Weekend Pass (WD/WE):");
BufferedReader day_of_week1 = new BufferedReader(new InputStreamReader(System.in));
try
{
day_of_week = day_of_week1.readLine();
}
catch (IOException e) {
System.out.println("Error!");
System.exit(1);
}
System.out.println("Upgrade to Express Pass (Y/N):");
BufferedReader upgrade1 = new BufferedReader(new InputStreamReader(System.in));
try
{
upgrade = upgrade1.readLine();
}
catch (IOException e) {
System.out.println("Error!");
System.exit(1);
}
int adult = Integer.parseInt(adult2);
int child = Integer.parseInt(child2);
int senior = Integer.parseInt(senior2);
int total_a = adult * get_price(day_of_week, "adult");
int total_c = child * get_price(day_of_week, "child");
int total_s = senior * get_price(day_of_week, "senior");
int total_price = total_a + total_c + total_s;
int total_people = adult + child + senior;
int upgrade_price = 0;
if (upgrade.equals("Y"))
{
if (day_of_week.equals("WD"))
{
upgrade_price = total_people * 30;
}
else
{
upgrade_price = total_people * 68;
}
}
else
upgrade_price = 0;
int price = upgrade_price + total_price;
System.out.println("The total price is $" + price);
}}
answered Jan 20, 2012 at 7:09
footyfooty
5,78313 gold badges48 silver badges96 bronze badges
for equality condition in string you need equal method.
use
"Y".equals(upgrade); //is a good idea
instead of
upgrade == "Y"
Since Strings are objects, the equals(Object) method will return true if two Strings have the same objects. The == operator will only be true if two String references point to the same underlying String object. Hence two Strings representing the same content will be equal when tested by the equals(Object) method, but will only by equal when tested with the == operator if they are actually the same object.
refer http://blog.enrii.com/2006/03/15/java-string-equality-common-mistake/
answered Jan 20, 2012 at 7:05
![]()
Hemant MetaliaHemant Metalia
29.5k18 gold badges72 silver badges91 bronze badges
3
I notised that your update variable is String, thus you should use:
if (upgrade.compareTo("Y") == 0) {
//your code
}
this is the correct way to compare Strings.
answered Jan 20, 2012 at 7:14
karlakarla
4,5065 gold badges34 silver badges39 bronze badges
1
Задание
Исследуйте список order: найдите общую стоимость всех пицц. Результат выведите на экран.
Результат выдает такую ошибку:
Traceback (most recent call last):
File «main.py», line 48, in <module>
print(dumps(filtered_order, indent=4, ensure_ascii=False)) # печатаем список с помощью dumps()
NameError: name ‘dumps’ is not defined
Python:
order = [
{
'item': 'Пицца Маргарита', # название позиции
'category': 'пицца', # категория товара
'quantity': 2, # количество в заказе
'comment': 'Побольше сыра, пожалуйста!', # комментарий к заказу
'price': 320 # стоимость одной единицы товара
},
{
'item': 'Пицца с ветчиной',
'category': 'пицца',
'quantity': 1,
'comment': '',
'price': 410
},
{
'item': 'Pepsi 1 л',
'category': 'напитки',
'quantity': 3,
'comment': '',
'price': 75
},
{
'item': 'Сок яблочный 0.5 л',
'category': 'напитки',
'quantity': 1,
'comment': '',
'price': 80
},
{
'item': 'Круассан с сыром',
'category': 'выпечка',
'quantity': 2,
'comment': '',
'price': 130
}
]
# напишите ваш код здесь
filtered_order = []
filtered_order = 0
for item in order:
if item['category'] == 'пицца':
filtered_order += item['price']
print('Результат:')
print(dumps(filtered_order, indent=4, ensure_ascii=False)) # печатаем список с помощью dumps()
|
polly00 0 / 0 / 0 Регистрация: 22.02.2022 Сообщений: 16 |
||||
|
1 |
||||
Рассчитать стоимость билетов13.11.2022, 00:22. Показов 1032. Ответов 5 Метки нет (Все метки)
Здравствуйте! Не знаю как реализовать данную задачу, буду благодарна за помощь! Во второй части программы необходимо реализовать вывод сообщения для кассира в зависимости от возраста группы и рассчитать общую стоимость билетов (ticket_sum)
0 |
|
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
13.11.2022, 00:22 |
|
Ответы с готовыми решениями:
Рассчитать стоимость одной страницы книги и стоимость всего тиража Определить стоимость билетов Билет на дневной сеанс в кинотеатр стоит 30 к., на вечерний – 60 к….
Определить суммарную стоимость билетов 5 |
|
Автоматизируй это!
7138 / 4434 / 1185 Регистрация: 30.03.2015 Сообщений: 12,899 Записей в блоге: 29 |
|
|
13.11.2022, 09:39 |
2 |
|
polly00, так приведите полный текст задачи, а то не ясно о какой группе речь, вроде 1 возраст спрашиваете
def info_about_visitor(): сюда надо надо аргументом передавать эйдж и не принтитить а возвращать строку остальное сможем помочь при понимании общей картины
0 |
|
0 / 0 / 0 Регистрация: 22.02.2022 Сообщений: 16 |
|
|
13.11.2022, 14:02 [ТС] |
3 |
|
Поняла, извиняюсь!
так приведите полный текст задачи, а то не ясно о какой группе речь, вроде 1 возраст спрашиваете Вот задача: В дельфинарии действуют правила расчета стоимости билетов: Во второй части программы необходимо реализовать вывод сообщения для кассира в зависимости от возраста группы и рассчитать общую стоимость билетов (ticket_sum)
0 |
|
Автоматизируй это!
7138 / 4434 / 1185 Регистрация: 30.03.2015 Сообщений: 12,899 Записей в блоге: 29 |
|
|
13.11.2022, 14:26 |
4 |
|
Во второй части программы а первая то где? о какой группе речь? нужно ввести количество человек, а потом их возраст?
0 |
|
polly00 0 / 0 / 0 Регистрация: 22.02.2022 Сообщений: 16 |
||||||||
|
13.11.2022, 14:30 [ТС] |
5 |
|||||||
|
так приведите полный текст задачи, а то не ясно о какой группе речь, вроде 1 возраст спрашиваете Написать программу для кассира в дельфинарии. Описание программы ниже: ЧАСТЬ 1.
4) В дельфинарии действуют правила расчета стоимости билетов:
0 |
|
Welemir1 Автоматизируй это!
7138 / 4434 / 1185 Регистрация: 30.03.2015 Сообщений: 12,899 Записей в блоге: 29 |
||||
|
13.11.2022, 14:43 |
6 |
|||
|
Решениеpolly00, видишь сколько важных условий и все надо клещами вытягивать вот пример
1 |

Рассчитать стоимость проданных билетов и выдать ведомость