Помогите, пожалуйста, найти ошибку в решении задачи по курсу [scilbox] . Где моя ошибка?
Задача: вычислить 3 тикера с максимальной и 3 тикера с минимальной волатильностью.
Тикеры находятся в файле.
trades*
https://drive.google.com/file/d/1l5sia-9c-t91iIPiGyBc1s9mQ8RgTNqb/view?usp=sharing
третья часть кода
import csv
import os
from Utils import time_track, print_report, get_next_file
class TickerVolatility:
def __init__(self, file_path, tickers_path):
if os.path.exists(file_path):
self.file_path = file_path
self.tickers_path = tickers_path
else:
raise FileExistsError('файл отсутствует')
def get_tickers_into_file(self):
ticker = None
prices = []
with open(file=self.file_path, mode='r', encoding='utf8') as csv_file:
csv_dict = csv.DictReader(csv_file, delimiter=',')
for line in csv_dict:
ticker = line['SECID']
prices.append(float(line['PRICE']))
return ticker, prices
def run(self):
ticker, prices = self.get_tickers_info_from_file()
max_price, min_price = max(prices), min(prices)
average_price = (max_price + min_price) / 2
volatility = ((max_price - min_price) / average_price) * 100
return ticker, volatility
@time_track
def main(tickers_path):
tickers = {}
for file_name in get_next_file(tickers_path):
calc_volatility = TickerVolatility(file_path=file_name)
ticker, volatility = calc_volatility.run()
tickers[ticker] = volatility
print_report(tickers)
if __name__ == '__main__':
TRADE_FILES = './trades'
main(tickers_path=TRADE_FILES)
# вторая часть кода
import os
import time
from collections import OrderedDict
def time_track(func):
def surrogate(*args, **kwargs):
started_at = time.time()
result = func(*args, **kwargs)
ended_at = time.time()
elapsed = round(ended_at - started_at, 4)
print(f'Функция работала {elapsed} секунд(ы)')
return result
return surrogate
def print_report(tickers_dict):
zero_tickers = {}
tickers = {}
for ticker, volatility in tickers_dict.items():
if volatility == 0:
zero_tickers[ticker] = volatility
else:
tickers[ticker] = volatility
ordered_tickers = OrderedDict(sorted(tickers.items(), key=lambda x: x[1], reverse=True))
tickers_list = list(ordered_tickers.keys())
print('Максимальная волатильность:')
for secid in tickers_list[:3]:
print(f'\t{secid} - {ordered_tickers[secid]:2.2f} %')
print('Минимальная волатильность:')
for secid in tickers_list[-3:]:
print(f'\t{secid} - {ordered_tickers[secid]:2.2f} %')
print('Нулевая волатильность:')
print('\t', ', '.join(sorted(zero_tickers.keys())), sep='')
def get_next_file(file_path):
for dirpath, dirnames, filenames in os.walk(file_path):
for filename in filenames:
file_name = os.path.join(dirpath, filename)
yield file_name