69 lines
2.1 KiB
Python
69 lines
2.1 KiB
Python
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()
|