Условия задачи:

 

Цены на бензин. Среди исходного кода главы 8 вы найдете файл GasPrices.txt. Этот файл содержит еженедельные средние цены за галлон бензина в США, начиная 5 апреля  1993 года и заканчивая 26 августа 2013 года. На рис. 8.8 показан пример первых не­скольких строк данного файла. 
Каждая строка в файле содержит среднюю цену за галлон бензина в указанный день и отформатирована следующим образом:
В рамках этого задания необходимо написать одну или несколько программ, которые считывают содержимое данного файла и выполняют приведенные ниже вычисления.
• Средняя цена за год: вычисляет среднюю цену бензина за год для каждого года в файле. (Данные файла начинаются апрелем 1993 года и заканчиваются августом 2013 года. Используйте данные, предоставленные за период с 1993 по 2013 год.)
• Средняя цена за месяц: вычисляет среднюю цену в каждом месяце в файле. 

Наибольшая и наименьшая цены в году: в течение каждого года в файле опреде­ляет дату и величину самой низкой и самой высокой цены.
• Список цен, упорядоченный по возрастанию : генерирует текстовый файл, в кото­ром даты и цены отсортированы в возрастающем порядке.
• Список цен, упорядоченный по увеличению: генерирует текстовый файл, в кото­ром даты и цены отсортированы в убывающем порядке. 
Для выполнения всех этих вычислений можно написать одну программу или несколько
разных программ , по одной для каждого вычисления.

 

Решение задачи:

def main():
    START = 1993
    FINISH = 2013
    def get_list():
        with open('GasPrices.txt', 'r') as in_file:
            list_value = []
            for i in in_file:
                line = i.rstrip('\n')
                list_value.append(line)
        return list_value
    list_value = get_list()
    def average_year(list_value):
        for i in range(START, FINISH +1):
            totall = 0
            count_value = 0
            for c in list_value:
                list_2 = c.split(':')
                if list_2[0].endswith(str(i)):
                    #print(list_2[0])
                    totall += float(list_2[1])
                    count_value += 1
            print(f'Средняя цена  за {i} год {totall / count_value: .2f} {count_value} ')
    average_year(list_value)
    def get_min_max(list_value):
        for i in range(START, FINISH +1):
            list_price = []

            for c in list_value:
                list_2 = c.split(':')
                if list_2[0].endswith(str(i)):
                    #print(list_2[0])
                    list_price.append(float(list_2[1]))
            print(f'За {i} год минимальная цена {min(list_price)} максимальная цена {max(list_price)} ')

    def get_max(list_value):
        list_price = []
        for c in list_value:
            list_2 = c.split(':')
            list_price.append(float(list_2[1]))
            for i in range(len(list_price)):
                for c in range(len(list_price)-1):
                    if list_price[c] > list_price[c+1]:
                        list_price[c], list_price[c+1] = list_price[c+1], list_price[c]
                        list_value[c], list_value[c+1] = list_value[c+1], list_value[c]
        print(f'Список по возрастанию {list_value}')

    def get_min(list_value):
        list_price = []
        for c in list_value:
            list_2 = c.split(':')
            list_price.append(float(list_2[1]))
            for i in range(len(list_price)):
                for c in range(len(list_price)-1):
                    if list_price[c] < list_price[c + 1]:
                        list_price[c], list_price[c + 1] = list_price[c + 1], list_price[c]
                        list_value[c], list_value[c + 1] = list_value[c + 1], list_value[c]
        print(f'Список по убыванию {list_value}')

    get_max(list_value)

    get_min(list_value)



main()