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

Revisão 4e 2006-08-28 23:43:47

Excluir mensagem

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 import string
  15 
  16 def any2dec(num_original,base_original):
  17     num_original = str(num_original)
  18     base_original = int(base_original)
  19     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']
  20     x = 0
  21     dec = 0
  22     dec_temp = list(num_original)
  23     dec_temp.reverse()
  24     for i in dec_temp:
  25         dec = dec + ( (dic.index(i)) * (base_original**(x)))
  26         x = x+1
  27     return str(dec)
  28 
  29 
  30 def dec2any(dec,base_final):
  31     base_final = int(base_final)
  32     dec = int(dec)
  33     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']
  34     numero_final_temp = []
  35     numero_final = ''
  36     while True:
  37         temp_numero_final = dec%base_final
  38         numero_final_temp.append(temp_numero_final)
  39         if  ((int(dec/base_final)) == 0):
  40             break
  41         dec = int(dec/base_final)
  42     numero_final_temp.reverse()
  43     for i in numero_final_temp:
  44         numero_final = numero_final + (dic[i])      
  45     return numero_final
  46 
  47 def any2any(num_original,base_original,base_final):
  48     num_dec = any2dec(num_original,base_original)
  49     num_final = dec2any(num_dec,base_final)
  50     return num_final

por AlexandreKlostermann