DEV Community

Srta Katsumi
Srta Katsumi

Posted on • Edited on

Como tranformar um decimal em hexa, binário ou octal

Estou apredendo a programar, então se o código abaixo estiver com alguma informação incorreta, por favor deixe a explicação correta nos comentários. Tento explicar o código linha a linha para facilitar.


Exercicio: O objetivo do programa abaixo é inserir um número inteiro e transforma-lo em um binário, octal ou hexa.
E dar ao usuário a opção de escolha se é binario, hexa ou octa

(Alguns links (sim wikipedia) que podem explicar melhor o que é cada um:
Hexadecimal: https://pt.wikipedia.org/wiki/Sistema_de_numera%C3%A7%C3%A3o_hexadecimal
Octal: https://pt.wikipedia.org/wiki/Sistema_octal
Binário: https://pt.wikipedia.org/wiki/Sistema_de_numera%C3%A7%C3%A3o_bin%C3%A1rio )


Vamos ao código:

while True: 
    n = int(input('Digite um número: '))
    print('- - - - '* 5)
    print('[1] Binário')
    print('[2] Octal')
    print('[3] Hexadecimal')
    print('[x] Sair')


    perguntanum = str(input('Digite a opção que deseja converter: '))
    if perguntanum == 'x'or perguntanum == 'X':
        break
    elif perguntanum == '1' or perguntanum == '2' or perguntanum == '3':
        if perguntanum == '1':
            rio = str(bin(n))
            print(rio)
        elif perguntanum == '2':
            cta = str(oct(n))
            print(cta)

        elif perguntanum == '3':
            exa = str(hex(n))
            print(exa)

    else:
        print('Opção invalida!')
Enter fullscreen mode Exit fullscreen mode

Como será exibido:

Digite um número:


[1]Binário
[2] Octal
[3] Hexadecimal

Digite a opção que deseja converter:

Como fica:

Digite um número: 25


[1]Binário
[2] Octal
[3] Hexadecimal

Digite a opção que deseja converter: 3
0x19


Explicação do código:

while True: """Vamos utilizar o while para repetir a programa"""

    n = int(input('Digite um número: ')) """Aqui o n representa uma variável para armazenar os dados que estamos solicitando. 
INT é para o programa entender que estamos informado a entrada de um número. 
INPUT para que o usuário possa colocar a informação"""

    print('- - - - '* 5) """PRINT imprime a informação. Quando informo o texto e multiplico (*) por algum valor ele irá repetir a quantidade de vezes que for informado. 
Exemplo: - - - -- - - -- - - -- - - -- - - - irá aparecer desta forma para o usuário"""

    print('[1] Binário') """dentro do parenteses posso utilizar as aspas simples (' ') ou duplas (" ") """
    print('[2] Octal')
    print('[3] Hexadecimal')
    print('[x] Sair')


    perguntanum = str(input('Digite a opção que deseja converter: ')) """Variavável para armazenar a informação no caso aqui informado como str(string) que é o formato de texto

    if perguntanum == 'x'or perguntanum == 'X': """ Aqui o comando SE(if) vai validar se o usuário desessa fechar o programa, tem duas opções o X em minusculo e em maiusculo, então essa linha vai validar qual a informação que o usuário inseriu na variável.

        break ""SE o usuário apertou X para fechar. O código será encerrado"""

    elif perguntanum == '1' or perguntanum == '2' or perguntanum == '3': """nessa linha do SENÃO vamos validar se o usuário inseriu alguma opção do menu, para que o usuário não insira qualquer número ou letra.


        if perguntanum == '1': """ dentro do elif vamos inserir as opções do menu e validar se o que usuário inseriu e uma opção do menu.

            rio = str(bin(n)) """bin() método leva um único parâmetro e retornar a string binária equivalente ao inteiro fornecido. Se não for especificado um inteiro, ele levanta uma TypeErrorexceção destacando que o tipo não pode ser interpretado como um inteiro.
Observação NÃO colocar o nome da variável de binario como bin, pois o sistema irá entender que se trata do método assim retornando erro'""

            print(rio) """Imprime o resultado da variável"""

        elif perguntanum == '2':
            cta = str(oct(n))
            print(cta)

        elif perguntanum == '3':
            exa = str(hex(n))
            print(exa)

    else:
        print('Opção invalida!')     
Enter fullscreen mode Exit fullscreen mode

Como será exibido:

Digite um número:


[1]Binário
[2] Octal
[3] Hexadecimal

Digite a opção que deseja converter:

Como fica:

Digite um número: 25
Digite a opção que deseja converter: 3
0x19 """O prefixo 0x representa que o resultado é uma string hexadecimal."""

OU

Digite um número: 25
Digite a opção que deseja converter: j
Opção inválida!


Observação: se não for um inteiro, deve implementar index() para retornar um inteiro

References bibliographical:
https://www.programiz.com/python-programming/methods/built-in/oct
https://www.programiz.com/python-programming/methods/built-in/bin
https://www.programiz.com/python-programming/methods/built-in/hex

Top comments (3)

Collapse
 
eduardoklosowski profile image
Eduardo Klosowski

Embora a expressão str(input(...)) possa ser bastante interessante didaticamente, informando o tipo do que está sendo lido, na prática ela é desnecessária, visto que a função input já retorna um str (ou string). Quando usado desta forma, só irá verificar que já é do tipo desejado e retornar sem alterações.

Também é possível trabalhar melhor os as condições para evitar verificar diversas vezes, exemplo:

if perguntanum == 'x' or perguntanum == 'X':
    break
elif perguntanum == '1':
    ...
elif perguntanum == '2':
    ...
elif perguntanum == '3':
    ...
else:
   print('Opção invalida!')
Enter fullscreen mode Exit fullscreen mode

Assim não precisa verificar diversas vezes se é igual a '1'.

No mais, o artigo ficou muito melhor formatado, parabéns. Só lembrar de fechar os """ no código comentado ficar correto o syntax highlight.

Collapse
 
srtakatsumi profile image
Srta Katsumi

Obrigada pela dica de str, vou me atentar a montar o projeto ao invés de validar linha a linha tentar usar um for.

Collapse
 
francisco77993 profile image
francisco77993

Bom dia srta Katsumi, usei seu script e inclui um item a mais que faz também a transformação para a tabela ascii
elif conversao == '4':
ascii = chr(n)
print(ascii)