import argparse import logging import time from typing import Generator logging.basicConfig( format='%(asctime)s [%(levelname)s] %(message)s', filename='fibonacci.log', level=logging.INFO ) logger = logging.getLogger(__name__) def fibonacci_sequence() -> Generator[int, None, None]: """Генератор бесконечной последовательности Фибоначчи""" a, b = 0, 1 while True: yield a a, b = b, a + b def main(): parser = argparse.ArgumentParser( prog='Fibonacci Generator', description='Генератор бесконечной последовательности Фибоначчи', epilog='Разработан с ❤️ для сообщества Фибоначчи' ) parser.add_argument( '-d', '--delay', type=float, default=1.0, help='Задержка между числами (секунды)' ) parser.add_argument( '-l', '--language', choices=['en', 'ru'], default='auto', help='Выбор языка вывода' ) args = parser.parse_args() if args.delay < 0: parser.error('Задержка не может быть отрицательной') lang = args.language if args.language != 'auto' else \ 'en' if 'en' in locale.getdefaultlocale() else 'ru' try: fib = fibonacci_sequence() while True: number = next(fib) message = { 'en': f"Next Fibonacci number: {number}", 'ru': f"Следующее число Фибоначчи: {number}" }[lang] logger.info(message) print(f"\033[1;32m{message}\033[0m") # Выделение цветом time.sleep(args.delay) except KeyboardInterrupt: logger.info("Программа завершена пользователем ⏹") print("\n\033[1;33mПрограмма остановлена\033[0m") if __name__ == '__main__': main()