Como tranformar um decimal em hexa, binário ou octal
Tags: python, beginners
Published: 2021-02-16 14:45:39

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:
```python
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!')
```
 _______________________________________________     
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:
```python
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!')     
```
_______________________________________________
  
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