Criando uma Representação de Inteiro Legível por Humanos: Um Guia Completo
Você já encontrou situações em que exibir números em um formato mais compreensível é essencial? Talvez você precise apresentar dados a um público não familiarizado com figuras numéricas. Nesses casos, converter inteiros em suas representações legíveis por humanos pode aumentar significativamente a clareza. Essa tarefa pode parecer direta, mas requer uma função bem projetada que represente com precisão os números em palavras.
O Problema
O desafio em questão é criar uma função que converta números inteiros em formas descritivas de string. Aqui estão alguns exemplos do que essa função deve alcançar:
humanReadable(1)
deve retornar “um”.humanReadable(53)
deve retornar “cinquenta e três”.humanReadable(723603)
deve retornar “setecentos e vinte e três mil, seiscentos e três”.humanReadable(1456376562)
deve retornar “um bilhão, quatrocentos e cinquenta e seis milhões, trezentos e setenta e seis mil, quinhentos e sessenta e dois”.
Você pode se perguntar por que tal função é necessária. Bem, esse tipo de algoritmo tem várias aplicações no desenvolvimento de software do mundo real, desde interfaces de usuário até geração de relatórios.
Abordando a Solução
Para implementar a função humanReadable
, considere quebrar o processo em etapas gerenciáveis. Aqui está uma abordagem estruturada para enfrentar esse problema:
1. Compreendendo a Estrutura dos Números
Antes de codificar, é crucial entender como os números são compostos:
- Unidades: 0-19 têm nomes únicos (por exemplo, um a dezenove).
- Dezenas: 20, 30, …, 90 têm termos específicos (por exemplo, vinte, trinta, etc.).
- Centenas e Milhares: A partir de 100, construímos nomes usando ’e’ quando necessário (por exemplo, cento e três).
2. Implementando a Função
Aqui está um esboço básico de como você pode codificar essa função:
Implementação Passo a Passo
- Casos Base: Lide com números de 0 a 19 diretamente.
- Dezenas e Mais: Crie mapeamentos adicionais para dezenas e denominações superiores.
- Divisão Recursiva: Divida números maiores em partes gerenciáveis (por exemplo, milhares, milhões).
def humanReadable(number):
if 0 <= number < 20:
return unique_names[number]
elif 20 <= number < 100:
return tens_names[number // 10] + ('' if number % 10 == 0 else '-' + unique_names[number % 10])
elif 100 <= number < 1000:
return unique_names[number // 100] + ' cento' + ('' if number % 100 == 0 else ' e ' + humanReadable(number % 100))
# Continue para milhares e milhões
3. Implementação de Exemplo
Aqui está toda uma estrutura esquelética para lhe dar um ponto de partida robusto:
unique_names = ["zero", "um", "dois", "três", "quatro", "cinco", "seis", "sete", "oito", "nove", "dez",
"onze", "doze", "treze", "quatorze", "quinze", "dezesseis", "dezessete", "dezoito", "dezenove"]
tens_names = ["", "", "vinte", "trinta", "quarenta", "cinquenta", "sessenta", "setenta", "oitenta", "noventa"]
def humanReadable(number):
if number < 20:
return unique_names[number]
elif number < 100:
return tens_names[number // 10] + ('' if number % 10 == 0 else '-' + unique_names[number % 10])
# Adicione mais casos para centenas, milhares, milhões...
4. Testando sua Função
Certifique-se de executar vários casos de teste para garantir que sua função lida corretamente com todos os inteiros especificados:
print(humanReadable(1)) # "um"
print(humanReadable(53)) # "cinquenta e três"
print(humanReadable(723603)) # "setecentos e vinte e três mil, seiscentos e três"
print(humanReadable(1456376562)) # "um bilhão, quatrocentos e cinquenta e seis milhões, trezentos e setenta e seis mil, quinhentos e sessenta e dois"
Conclusão
Aí está! Criar uma representação de inteiros legível por humanos
serve não apenas como um exercício intelectual, mas também como uma utilidade prática em muitos cenários de programação. Seguindo a abordagem estruturada que aqui descrevemos, você estará bem no caminho para dominar esse desafio de codificação.
Agora, pegue seu ambiente de codificação e comece a implementar essa função divertida e útil hoje!