associação pythonbrasil[11] django zope/plone planet Início Logado como (Entrar)

ConversordeBases

São 3 funções simples para conversão de números inteiros de qualquer base para qualquer base.

1- any2dec(num_original,base_original) - Esta função converte qualquer número da base 2 a 36 para qualquer base. Onde num_original é o número a ser convertido, e base_original é o valor de sua base (de 2 a 36 só considerando inteiros).

2- dec2any(dec,base_final) = Esta função converte qualquer número decimal para qualquer base de 2 a 36. Onde dec é o número decimal a ser convertido, e base_final é a base para qual se deseja converter o número (base_final: de 2 a 36 só considerando inteiros.)

3- any2any(num_original,base_original,base_final) = aglutina as duas funções acima para conversão direta de um número num_original de base base_original para uma determinada base_final.

OBS: tanto num_original quanto dec podem ser passados a função como string, ou inteiros, porém base deve ser sempre um inteiro.

OBS2:: Ambas as funções retornam sempre strings.

OBS3: As bases base_original e base_final são convertidas para inteiro

Abaixo temos o código desta biblioteca que chamo de base_convert.py.

Código

   1 # -*- coding: cp1252 -*-
   2 # Conversão des:
   3 #
   4 # Por Alexandre Martins Klostermann
   5 #     alexandre.klostermann@gmail.com
   6 #
   7 #   any2dec: Converte o numero "any" na base "base"
   8 #           para decimal, retornando "dec"
   9 #
  10 #   dec2any: Converte um numero decimal "dec" para a
  11 #           base "base" retornando o valor convertido
  12 #           em "any"
  13 
  14 def any2dec(num_original,base_original):
  15     num_original = str(num_original)
  16     base_original = int(base_original)
  17     dic = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
  18     dec = 0
  19     dec_temp = list(num_original)
  20     dec_temp.reverse()
  21     for x,i in enumerate(dec_temp):
  22         dec += dic.index(i) * base_original**(x)
  23     return str(dec)
  24 
  25 
  26 def dec2any(dec,base_final):
  27     base_final = int(base_final)
  28     dec = int(dec)
  29     dic = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
  30     numero_final_temp = []
  31     numero_final = ''
  32     while True:
  33         temp_numero_final = dec%base_final
  34         numero_final_temp.append(temp_numero_final)
  35         if int(dec/base_final) == 0:
  36             break
  37         dec = int(dec/base_final)
  38     numero_final_temp.reverse()
  39     for i in numero_final_temp:
  40         numero_final += dic[i]     
  41     return numero_final
  42 
  43 def any2any(num_original,base_original,base_final):
  44     num_dec = any2dec(num_original,base_original)
  45     num_final = dec2any(num_dec,base_final)
  46     return num_final

Aplicado em Modo Gráfico

Usando o Eagle temos o mesmo programa em modo gráfico.

OBS: necessita pyGTK, pyCairo, Eagle e outros.

   1 # -*- coding: cp1252 -*-
   2 #Conversor de Bases Grafico.
   3 from eagle import *
   4 import base_convert
   5 
   6 def executar(app, wid):
   7     num_original= app["valor_inicial"]
   8     base_original= app["base_inicial"]
   9     base_final= app["base_final"]
  10     app["valor_final"] = base_convert.any2any(num_original,base_original,base_final)
  11 
  12     
  13 def limpar(app, wid):
  14     app["valor_inicial"] = ""
  15     app["valor_final"] = ""
  16 
  17 App(
  18     title="Conversor de Bases",
  19     window_size = (250,250),
  20     center=(
  21         Entry(id="valor_inicial", label="Numero Original:", editable=True, persistent=True),
  22         UIntSpin(id="base_inicial", label="Base Original:", value=2, min=2, max=36, step=1),
  23         UIntSpin(id="base_final", label="Base Desejada:", value=2, min=2, max=36, step=1),
  24         Entry(id="valor_final", label="Valor Final: ", editable=False, persistent=True),
  25         ),
  26     bottom=(
  27         Button(id="bCalcular", label="Calcular", callback=executar),
  28         Button(id="bLimpar", label="Limpar", callback=limpar),
  29         ),
  30 )
  31 
  32 run()

por AlexandreKlostermann