Dízima Periódica em Código
Sobre a Matemática
Dízima periódica é um número decimal infinito e repetitivo, no qual um ou mais algarismos se repetem indefinidamente após a vírgula. Surge quando uma divisão não é exata e o resto passa a se repetir.
Na divisão 31/99 o quociente é 0,313131… onde esse resultado é um exemplo de dízima periódica. Os algarismos 3 e 1 (que formam o período) repetem-se infinitamente.
Sobre o Código
Na linguagem de programação Python,
def – é a palavra-chave que define uma função em Python, permitindo agrupar instruções reutilizáveis.
= – é o operador de atribuição que associa um valor a uma variável.
// – é o operador de divisão inteira, retorna apenas a parte inteira do quociente.
{} – delimitador de dicionário,estrutura de dados que armazena pares chave–valor.
[] – delimitador da lista, estrutura de dados ordenada e mutável para armazenar vários valores.
while – é a estrutura de repetição que executa um bloco enquanto a condição for verdadeira.
!= – é o operador relacional que verifica se dois valores são diferentes.
if..in.. – é a estrutura condicional que verifica se um valor pertence a uma coleção.
restos[resto] – acessa ou armazena um valor no dicionário usando a chave resto.
[inicio_periodo:] – é o fatiamento (em inglês, slicing) de lista ou string a partir de um índice até o final.
[:inicio_periodo] – é o fatiamento de lista ou string do início até um índice específico.
break – interrompe imediatamente a execução de um laço.
*= – é o operador de atribuição com multiplicação (multiplica e atribui).
.append – é o método de lista que adiciona um elemento ao final.
str() – é a função que converte um valor para o tipo string.
%= – é o operador de atribuição com módulo (resto da divisão).
+= – é o operador de atribuição com soma (incrementa um valor).
else: – é o bloco executado quando a condição anterior não é satisfeita.
f"..." – f-string, abreviação de literal de string formatado (em inglês, formatted string literal), permite inserir variáveis dentro de textos.
.join – une elementos de uma lista de strings em uma única string.
print() – exibe informações no console (saída padrão).
from – importa elementos específicos de um módulo.
fractions – é o módulo da biblioteca padrão para trabalhar com números racionais.
import – é o comando para carregar módulos ou bibliotecas.
Fraction – é a classe que representa frações exatas (números racionais).
float() – é a função que converte um valor para número decimal de ponto flutuante.
# – é usado para criar comentários ao código, que são notas para se entender melhor o que o código faz.
Vamos ao código…
def dizima_periodica(numerador, denominador):
"""
Calcula a dízima periódica de uma fração
e identifica o período da repetição.
"""
parte_inteira = numerador // denominador
resto = numerador % denominador
restos = {}
casas_decimais = []
posicao = 0
while resto != 0:
# Se o resto já apareceu, existe período
if resto in restos:
inicio_periodo = restos[resto]
periodo = casas_decimais[inicio_periodo:]
nao_periodica = casas_decimais[:inicio_periodo]
break
restos[resto] = posicao
resto *= 10
casas_decimais.append(str(resto // denominador))
resto %= denominador
posicao += 1
else:
# Caso não exista dízima periódica
periodo = []
nao_periodica = casas_decimais
# Montagem da representação decimal
if periodo:
decimal = f"{parte_inteira},{''.join(nao_periodica)}({''.join(periodo)})"
else:
decimal = f"{parte_inteira},{''.join(casas_decimais)}"
print(f"Fração: {numerador}/{denominador}")
print(f"Representação decimal: {decimal}")
# Exemplo clássico de dízima periódica
dizima_periodica(31, 99)| Código Python (.py) | O que faz |
| def dizima_periodica(numerador, denominador): | Define uma função que recebe o numerador e o denominador de uma fração. |
| “””…””” | Docstring: documenta o objetivo da função. É delimitado por três aspas. |
| parte_inteira = numerador // denominador | Calcula a parte inteira da divisão usando divisão inteira. |
| resto = numerador % denominador | Calcula o resto da divisão, base para gerar a dízima. |
| restos = {} | Cria um dicionário para armazenar restos já encontrados. |
| casas_decimais = [] | Cria uma lista para armazenar as casas decimais geradas. |
| posicao = 0 | Controla a posição de cada resto na divisão. |
| while resto != 0: | Inicia o laço enquanto a divisão não for exata. |
| if resto in restos: | Verifica se o resto já apareceu antes. |
| inicio_periodo = restos[resto] | Marca onde começa a repetição (período). |
| periodo = casas_decimais[inicio_periodo:] | Extrai os algarismos que formam o período. |
| nao_periodica = casas_decimais[:inicio_periodo] | Extrai a parte não periódica da dízima. |
| break | Interrompe o laço ao encontrar o período. |
| restos[resto] = posicao | Armazena o resto atual com sua posição. |
| resto *= 10 | Multiplica o resto por 10 para gerar a próxima casa decimal. |
| casas_decimais.append(str(resto // denominador)) | Calcula e armazena o próximo dígito decimal. |
| resto %= denominador | Atualiza o resto da divisão. |
| posicao += 1 | Avança a posição da casa decimal. |
| else: | Executa se o laço terminar sem repetição. |
| periodo = [] | Indica que não existe período. |
| nao_periodica = casas_decimais | Toda a parte decimal é não periódica. |
| if periodo: | Verifica se foi encontrado um período. |
| decimal = f”{parte_inteira},{”.join(nao_periodica)}({”.join(periodo)})” | Monta a representação da dízima periódica. |
| else: | Caso não exista período. |
| decimal = f”{parte_inteira},{”.join(casas_decimais)}” | Monta o número decimal finito. |
| print(f”Fração: {numerador}/{denominador}”) | Exibe a fração original. |
| print(f”Representação decimal: {decimal}”) | Exibe a representação decimal da fração. |
| dizima_periodica(31, 99) | Chama a função com um exemplo clássico de dízima periódica. |
Saída do código (valor de retorno)…
Fração: 31/99
Representação decimal: 0,(31)
# Utilizando biblioteca Python para frações
from fractions import Fraction
def dizima_periodica_com_biblioteca(numerador, denominador):
"""
Representa uma fração como dízima periódica
utilizando biblioteca Python.
"""
fracao = Fraction(numerador, denominador)
valor_decimal = float(fracao)
print(f"Fração: {fracao}")
print(f"Valor decimal aproximado: {valor_decimal}")
print("Observação: se o decimal for infinito e repetitivo, trata-se de uma dízima periódica.")
# Exemplo clássico
dizima_periodica_com_biblioteca(31, 99)| Código Python (.py) | O que faz |
| from fractions import Fraction | Importa a classe Fraction, usada para representar números racionais. |
| def dizima_periodica_com_biblioteca(numerador, denominador): | Define uma função que recebe o numerador e o denominador da fração. |
| “””…””” | Docstring: documenta o objetivo da função. É delimitado por três aspas. |
| fracao = Fraction(numerador, denominador) | Cria uma fração exata (número racional). |
| valor_decimal = float(fracao) | Converte a fração em um valor decimal aproximado. |
| print(f”Fração: {fracao}”) | Exibe a fração na forma numerador/denominador. |
| print(f”Valor decimal aproximado: {valor_decimal}”) | Exibe a representação decimal da fração. |
| print(“Observação: se o decimal for infinito e repetitivo, trata-se de uma dízima periódica.”) | Informa o conceito matemático da dízima periódica. |
| dizima_periodica_com_biblioteca(31, 99) | Chama a função com um exemplo clássico de dízima periódica. |
Saída do código (valor de retorno)…
Fração: 31/99
Valor decimal aproximado: 0.31313131313131315
Observação: se o decimal for infinito e repetitivo, trata-se de uma dízima periódica.
Fonte:
- Editora Didática Paulista. Ensino Didático 2000: Ensino Fundamental e Ensino Médio. Sorocaba: Editora Didática Paulista, [s.d.].
- Códigos e comentários gerados por ChatGPT com revisão nossa.
- https://docs.python.org/pt-br/3/ [Documentação Oficial do Python]