Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def menu():
- '''
- Esta função contem o menu a ser exibido
- Returns: string
- '''
- return (
- '''
- ----------------------------------------------------------
- Conversor de bases numéricas - Questão 21
- Você deverá fornecer ao sistema:
- - O número a ser convertido
- - De qual base você deseja converter
- - Para qual base você deseja converter
- ** OBS: Todos os números devem ser inteiros ( menos os HEX) **
- ----------------------------------------------------------
- ''')
- numero = 0
- def validador_bin(checar_numero):
- '''
- Esta função verifica se a entrada consiste em 0 ou 1.
- Retorna: Verdadeiro / Falso
- '''
- check_list = [int(item) for item in (sorted(set(list(str(checar_numero)))))]
- for numero in check_list:
- print (f'checando {numero} - {type(numero)}')
- if numero not in [0,1]:
- print (f'número binário inválido')
- return False
- return True
- def validador_entrada(numero_entrada):
- '''
- Esta função verifica se a entrada consiste em caracteres válidos.
- Retorna: Verdadeiro / Falso
- '''
- caracteres_validos = '0123456789abcdef'
- for numero in numero_entrada:
- if numero not in caracteres_validos:
- return False
- return True
- def validador_geral(numero_entrada,base_entrada,base_saida):
- '''
- Esta função faz uso dos outros validadores e valida todas as entradas
- para então prosseguir com a conversão.
- '''
- if validador_entrada(numero_entrada) and base_entrada.isdigit() and base_saida.isdigit():
- if int(base_entrada) == 2:
- if not validador_bin(numero_entrada):
- print ('ERRO: Número binário inválido. Este deve conter 0 ou 1')
- return False
- if numero_entrada.isdigit() and numero_entrada.isalpha():
- if int(base_entrada) != 16:
- print ('ERRO: Números hexadecimais requerem que a base seja 16')
- return False
- if int(base_entrada) == 1 or int(base_saida) == 1:
- print (f'Não é possível converter "da" ou "para" Base1')
- return False
- return True
- def sistema_convesor(numero_entrada, base_entrada, base_saida):
- '''
- Esta função calcula os números de uma base para outra
- Retorna: int, numero convertido
- '''
- #Lista para armazenar os números que serão produzidos no final
- remainder_list = []
- #Valor inicial para a soma da base 10. Todos os cálculos passam pela base 10.
- sum_base_10 = 0
- #validador_entrada
- if base_saida == 2:
- binario = bin(numero_entrada)
- return (binario[2:])
- # Converter para a base 10 antes do cálculo real
- elif base_entrada != 10:
- #Inverte a string para começar a calcular a partir do número menos significativo
- numero_entrada_invertido = numero_entrada[::-1]
- #check if user typed in letter outside HEX range.
- hex_dicionario = {'a' : 10 , 'b' : 11 , 'c' : 12 , 'd' : 13 , 'e' : 14 , 'f' : 15}
- for indice, numero in enumerate(numero_entrada_invertido):
- for key,value in hex_dicionario.items():
- if str(numero).lower() == key:
- numero = value
- sum_base_10 += (int(numero)*(int(base_entrada)**indice))
- #print(indice)
- #print(numero)
- # print(sum_base_10)
- # Se o número já estiver na Base10, podemos iniciar a conversão
- elif base_entrada == 10:
- sum_base_10 = int(numero_entrada)
- # Fazemos um loop até chegar a 0. Quando chegar a 0, temos nosso numero.
- while sum_base_10 > 0:
- #Encontrar o número para passar mais adiante no loop
- dividido = sum_base_10 // int(base_saida)
- #Encontrar o resto para manter no loop
- remainder_list.append(str(sum_base_10 % int(base_saida)))
- # O novo value para enviar para a próxima iteração
- sum_base_10 = dividido
- #Consertar a lista e enviar um numero::
- return_number = ''
- # Caso seja solicitado uma saída hexadecimal, precisamos converter qualquer número de 10 para cima.
- if base_saida == 16:
- hex_dicionario = {10 : 'a' , 11 : 'b' , 12 : 'c' , 13 : 'd' , 14 : 'e' , 15 : 'f'}
- #Percorrer a lista de resto e converter 10+ em letras.
- for indice, each_num in enumerate(remainder_list):
- for key, value in hex_dicionario.items():
- if each_num == str(key):
- remainder_list[indice] = value
- #Retorna o numero:
- else:
- for each_num in remainder_list[::-1]:
- return_number += each_num
- return (return_number)
- def executar_conversor():
- '''
- Interação com o usuário e aquisição dos dados
- '''
- user_numero = ''
- user_entrada_base = ''
- user_base_saida = ''
- prosseguir = 's'
- while prosseguir.lower() == 's':
- valid_input = False
- while valid_input == False:
- user_numero = input('\nPor favor, digite o número que desejas converter: ')
- user_entrada_base = input('Por favor, digite DE qual base você deseja converter: ')
- user_base_saida = input('Por favor, digite PARA qual base você deseja converter: ')
- valid_input = validador_geral(user_numero,user_entrada_base,user_base_saida)
- print (f'\nTentando converter o número {user_numero} da Base-{user_entrada_base} para a Base-{user_base_saida}: ')
- print (f'>> RESULTADO: {sistema_convesor(user_numero, user_entrada_base, user_base_saida)} <<')
- print (f'\nVocê deseja conveter outro número? Digite s/n: ')
- prosseguir = input('')
- print (f'Saindo do conversor...')
- if __name__ == '__main__':
- print(menu())
- #execute o conversor definitivo:
- executar_conversor()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement