Периодическая дробь
Давайте поговорим о периодических дробях, и я обещаю, что это будет не так скучно, как смотреть на загрузку компилятора! Итак, что же такое периодическая дробь? Это дробь, у которой десятичное представление не заканчивается и не становится бесконечным, а начинает повторяться. Например, 1/3 = 0.333..., и это «...» указывает на то, что тройка будет продолжаться вечно. Давайте разберемся с этим на Python, чтобы было веселее!
Что такое периодическая дробь?
Периодическая дробь — это дробь, которая в десятичной записи имеет повторяющуюся часть. Например:
- 1/3 = 0.333...
- 2/11 = 0.181818...
- 1/7 = 0.142857142857...
Если ты когда-нибудь задавался вопросом, почему в кафе тебе подают кофе с «бесконечным» количеством сахара, то вот ответ: это периодическая дробь в действии!
Как найти периодическую дробь?
Для начала давай напишем функцию на Python, которая будет делить два числа и проверять, является ли результат периодической дробью. Мы будем использовать модуль для работы с десятичными дробями.
from decimal import Decimal, getcontext
def isperiodicfraction(numerator, denominator):
getcontext().prec = 50 # Устанавливаем точность
fraction = Decimal(numerator) / Decimal(denominator)
str_fraction = str(fraction)[2:] # Убираем '0.'
# Проверяем на периодичность
for i in range(1, len(str_fraction)//2 + 1):
if strfraction[:i] == strfraction[i:i*2]:
return f"{fraction} является периодической дробью!"
return f"{fraction} не является периодической дробью."
print(isperiodicfraction(1, 3)) # 0.333... является периодической дробью!
print(isperiodicfraction(1, 6)) # 0.166... не является периодической дробью.
Как определить период?
Теперь, когда мы знаем, что дробь может быть периодической, давай определим её период. Период — это длина повторяющейся части. Например, в 1/3 = 0.333... период равен 1, а в 1/7 = 0.142857142857... — период равен 6.
def find_period(numerator, denominator):
getcontext().prec = 50
fraction = Decimal(numerator) / Decimal(denominator)
str_fraction = str(fraction)[2:]
for periodlength in range(1, len(strfraction)//2 + 1):
if strfraction[:periodlength] == strfraction[periodlength:period_length*2]:
return f"Период {fraction} равен {period_length}."
return f"{fraction} не имеет периода."
print(find_period(1, 3)) # Период 0.333... равен 1.
print(find_period(1, 7)) # Период 0.142857142857... равен 6.
Интересные факты о периодических дробях
- Знаешь ли ты, что дроби с простыми знаменателями (например, 3, 7) имеют периодические десятичные представления?
- А вот дроби с знаменателями, которые являются произведением только чисел 2 и 5 (например, 10 или 25), имеют конечное десятичное представление.
- Если ты когда-нибудь задумывался о том, почему некоторые числа кажутся «зловещими», это может быть связано с их периодами! Например, дробь 1/7 имеет длинный повторяющийся цикл.
Заключение
Периодические дроби — это не только математическая забавка, но и важная часть чисел в программировании и науке. Они могут казаться сложными, но с помощью Python мы можем легко их исследовать и находить интересные свойства. Так что в следующий раз, когда ты столкнешься с дробью, не забудь проверить её на периодичность — возможно, это приведет к неожиданным открытиям!
Задание для закрепления матеирала
Задание 1: Определение периодической дроби
Напиши программу, которая принимает два целых числа (числитель и знаменатель) и выводит, является ли результат деления периодической дробью. Если да, то укажи ее десятичное представление.
Задание 2: Нахождение периода
Разработай функцию, которая находит длину периода для периодической дроби. Функция должна принимать числитель и знаменатель, а возвращать длину периода, если дробь является периодической, или сообщение о том, что период отсутствует.
Задание 3: Примеры дробей
Составь список из 10 дробей (числитель и знаменатель), и для каждой дроби укажи, является ли она периодической или конечной. Объясни, почему именно так.
Задание 4: Сравнение дробей
Создай программу, которая принимает две дроби (числитель и знаменатель для каждой) и сравнивает их. Если обе дроби являются периодическими, выведи их десятичные представления и укажи, какая из дробей больше.
Задание 5: Графическое представление
Используя библиотеку matplotlib в Python, нарисуй график, показывающий поведение десятичных представлений различных дробей (как периодических, так и конечных). Объясни, как выглядит график для каждой из категорий дробей.