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

Diferenças para "ConversordeBases"

Diferenças entre as versões de 3 e 4
Revisão 3e 2006-08-22 03:51:01
Tamanho: 1832
Comentário:
Revisão 4e 2006-08-28 23:43:47
Tamanho: 3051
Comentário:
Deleções são marcadas assim. Adições são marcadas assim.
Linha 1: Linha 1:
São duas funções simples para conversão de números inteiros de qualquer base para qualquer base. São 3 funções simples para conversão de números inteiros de qualquer base para qualquer base.
Linha 3: Linha 3:
1- any2dec(any,base) - Esta função converte qualquer número da base 2 a 36 para qualquer base. Onde '''any''' é o número a ser convertido, e '''base''' é o valor de sua base (de 2 a 36 só considerando inteiros). 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).
Linha 5: Linha 5:
2- dec2any(dec,base) = 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''' é a base para qual se deseja converter o número (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.)
Linha 7: Linha 7:
OBS: tanto '''any''' quanto '''dec''' podem ser passados a função como string, ou inteiros, porém '''base''' deve ser sempre um inteiro. 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.
Linha 11: Linha 13:
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'''.
Linha 16: Linha 21:
# -*- coding: cp1252 -*-
# Conversão des:
#
# Por Alexandre Martins Klostermann
# alexandre.klostermann@gmail.com
#
# any2dec: Converte o numero "any" na base "base"
# para decimal, retornando "dec"
#
# dec2any: Converte um numero decimal "dec" para a
# base "base" retornando o valor convertido
# em "any"
Linha 18: Linha 36:
def any2dec(any,base):
    any = str(any)
def any2dec(num_original,base_original):
    num_original = str(num_original)
    base_original = int(base_original)
Linha 23: Linha 42:
    any_temp = list(any)
    any_temp.reverse()
    for i in any_temp:
        dec = dec + ( (dic.index(i)) * (base**(x)))
    dec_temp = list(num_original)
    dec_temp.reverse()
    for i in dec_temp:
        dec = dec + ( (dic.index(i)) * (base_original**(x)))
Linha 31: Linha 50:
def dec2any(dec,base): def dec2any(dec,base_final):
    base_final = int(base_final)
Linha 34: Linha 54:
    any_temp = []
    any = ''
    numero_final_temp = []
    numero_final = ''
Linha 37: Linha 57:
        temp_any = dec%base
        any_temp.append(temp_any)
        if ((int(dec/base)) == 0):
        temp_numero_final = dec%base_final
        numero_final_temp.append(temp_numero_final)
        if ((int(dec/base_final)) == 0):
Linha 41: Linha 61:
        dec = int(dec/base)
    any_temp.reverse()
    for i in any_temp:
        any = any + (dic[i])
    return any
        dec = int(dec/base_final)
    numero_final_temp.reverse()
    for i in numero_final_temp:
        numero_final = numero_final + (dic[i])
    return numero_final

def any2any(num_original,base_original,base_final):
    num_dec = any2dec(num_original,base_original)
    num_final = dec2any(num_dec,base_final)
    return num_final

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