Repositório contendo um conversor de números decimais, binários, octais e hexadecimais desenvolvido em Python.
O algoritmo utiliza uma classe denominada Conversor e permite a conversão de números decimais em binários, octais ou hexagonais, assim como a conversão destes em decimais.
def main():
print("Algoritmo conversor de números!")
conversor = Conversor()
print("Digite 1 para realizar uma conversão de decimal para binário!")
print("Digite 2 para realizar uma conversão de binário para decimal!")
print("Digite 3 para realizar uma conversão de decimal para octal!")
print("Digite 4 para realizar uma conversão de octal para decimal!")
print("Digite 5 para realizar uma conversão de decimal para hexadecimal!")
print("Digite 6 para realizar uma conversão de hexadecimal para decimal!")A classe Conversor possui quatro método de conversão, visto que o processo para números binários e octais é idêntico mudando apenas a base usada para a conversão.
O método realiza a conversão de números decimais em binários ou octais. Este recebe o número a ser convertido e a base como parâmetro e utiliza uma variável str: resultado, inicializada em "", assim como um loop while que segue enquanto o valor da variável numero for diferente de 0.
def dec_para_base(self, numero: int, base: int) -> int:
""" Dado um número decimal converte-o em uma base definida. """
resultado = ""
while numero != 0:A cada etapa do loop, a variável resultado é atualizada adicionando o resto da divisão da variável numero pela variável base à string. Em seguida, a variável numero é atualizada com o valor inteiro da divisão pelo valor da variável base.
resultado += str(numero % base)
numero //= basePor fim, o inverso da variável resultado é retornado, encerrando o método.
return int(resultado[::-1])O método realiza a conversão de números binários ou octais em decimais. Este recebe o número a ser convertido e a base como parâmetro e utiliza duas variáveis int: exp e resultado, inicializadas em 0, assim como um loop while que segue enquanto o valor da variável numero for diferente de 0.
def base_para_dec(self, numero: int, base: int) -> int:
""" Dado um número em uma base definida converte-o em decimal. """
exp = 0
resultado = 0
while numero != 0:A cada etapa do loop, é utilizada uma variável int: dec, que obtém o resultado do último algarismo da variável numero multiplicado pelo valor da variável base elevado ao valor da variável exp. Em seguida, a variável resultado é atualizada, acrescentando o valor da variável dec, o último algarismo da variável numero é descartado e a variável exp é incrementada em uma unidade.
dec = (numero % 10) * (base ** exp)
resultado += dec
numero //= 10
exp += 1Por fim, o valor da variável resultado é retornado, encerrando o método.
return resultadoO método realiza a conversão de números decimais em hexadecimais. Este recebe o número a ser convertido como parâmetro e utiliza uma variável str: resultado, inicializada em "", assim como um loop while que segue enquanto o valor da variável numero for diferente de 0.
def dec_para_hex(self, numero: int) -> str:
""" Dado um número decimal converte-o em hexadecimal. """
resultado = ""
while numero != 0:A cada etapa do loop é utilizada uma variável int: hex que recebe o resto da divisão entre o valor da variável numero por 16. Em seguida, a variável hex é comparada com o valor 10 e, se a primeira for maior ou igual ao segundo, a variável resultado é atualizada acrescentando o caractere correspondente ao código ascii do valor de hex mais 55.
hex = numero % 16
if hex >= 10:
resultado += chr(hex + 55)Caso contrário, a variável resultado é atualizada acrescentando o algarismo da variável hex. Em seguida, a variável numero é atualizada com o valor inteiro da divisão por 16.
else:
resultado += str(hex)
numero //= 16Por fim, o inverso da variável resultado é retornado, encerrando o método.
return resultado[::-1]O método realiza a conversão de números hexadecimais em decimais. Este recebe o número a ser convertido como parâmetro, utiliza duas variáveis int: exp e resultado, inicializadas em 0 e atualiza o valor da variável numero, tornando todos os caracteres maiúsculos e invertendo a string, assim como um laço for que percorre todos os caracteres da variável numero.
def hex_para_dec(self, numero: str) -> int:
""" Dado um número hexadecimal converte-o em decimal. """
exp = 0
resultado = 0
numero = numero.upper()[::-1]
for caractere in numero:A cada etapa do laço é verificado se o caractere correspondente é uma letra ou um dígito, caso este seja uma letra é utilizada uma variável int: dec, que recebe o valor ascii da letra correspondente menos 55 multiplicado por 16 elevado ao valor da variável exp.
if caractere in string.ascii_letters:
dec = (ord(caractere) - 55) * (16 ** exp)Caso contrário, a variável dec recebe o valor correspondente ao dígito do caractere multiplicado por 16 elevado ao valor da variável exp. Em seguida, a variável resultado é atualizada acrescentando o valor da variável dec e a variável exp é incrementada em uma unidade.
else:
dec = int(caractere) * (16 ** exp)
resultado += dec
exp += 1Por fim, a variável resultado é retornada, encerrando o método.
return resultado