Условия задачи:
Цены на бензин. Среди исходного кода главы 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()