Converter of decimal, binary, hexadecimal, octal bases in Python

0

How can I get back two values in the request value function, since doing so gives me an error?

    import re #Importo las expresiones regulares para comparar los hex

    bin_fraccionaria =[0]

    print("Bienvenido al conversor de bases."+'\n')
    print("Seleccione la opción a ejecutar."+'\n')

    print("1. Convertir desde decimal")
    print("2. Convertir desde binaria")
    print("3. Convertir desde octal")
    print("4. Convertir desde hexadecimal")


    exOption = input('\n'+'Digite el número de la opción: ')
    part_f=0.0

    def pedirValor(base):

        if(base != "hexadecimal"):
            while True: #Mientras no se digite un valor adecuado haga
                try:
                    while True: #Mientras no se verifique el valor con respecto a la base
                        r = float(input('\n'+"Por favor escriba su valor "+base+": "))
                        part_e = int(r) #Parte entera con o sin signo
                        print("por aqui pasa el pirobo")
                        part_f==0.34
                        part_f ==( abs(r) - abs(int(r)) )#Parte decimal
                        if(base == "binario"): #Si la base es binaria verifique que sea 1 y 0
                            error = False
                            for char in part_e: #recorra toda la string en busca de unos y ceros
                                if (char != '0' and char != '1'): #Si el caracter es diferente de 1 y 0 esto no es binario
                                    error = True
                            if(error): #Si se presenta un error reportelo
                                print("Binario Inválido")
                            else:
                                break #Si no se presenta un error entonces estamos listos
                        else:
                            float(r)#Si no es base binaria mire que no tenga letras
                            break
                    break

                except ValueError:
                    print ('Número '+base+' Inválido')#Si tiene letras y no es hexadecimal hay error
        else:
            while True:
                r = float(input('\n'+"Por favor escriba su valor "+base+": "))
                prog = re.compile('[0-9A-Fa-f]')#se compila la expresión regular
                matches = prog.findall(part_e)#se buscan las coincidencias

                if(len(matches) != len(part_e)):#Si el largo de las coincidencias no es el del patrón se solicita de nuevo el número
                    print("Ingrese un número hexadecimal válido")
                else:
                    break
                print(part_f)
        return part_e


    def parteFrac(r):
        part_e = int(r) #Parte entera con o sin signo
        part_f ==( abs(r) - abs(int(r)) )#Parte decimal
        return part_f

#Conversiones de base!!

def decimalToBinario(decimal):
    return bin(int(decimal))
def fraccionario_binario(part_f):
    part_f=parteFrac(r)
    print(part_f)
    i=part_f
    count=0
    num1=0
    while count<24:
        i=i*2
        num1=int(i)
        i=i-num1
        if count>0:
            bin_fraccionaria.append(num1)
        else:
            bin_fraccionaria[count]=num1
        count=count+1
    str1 = ''.join(str(e) for e in bin_fraccionaria)
    print("ojala funcione: ",str1)
    return str1

def decimalToOctal(decimal):
    return oct(int(decimal))

def decimalToHexadecimal(decimal):
    return hex(int(decimal))

def binarioToDecimal(binario):
    return str(int(binario,2))

def binarioToOctal(binario):
    decimal = binarioToDecimal(binario)
    return decimalToOctal(decimal)

def binarioToHexadecimal(binario):
    decimal = binarioToDecimal(binario)
    return decimalToHexadecimal(decimal)

def OctalToDecimal(octal):
    return str(int(octal, 8))

def OctalToBinario(octal):
    return bin(int(str(int(octal, 8))))

def OctalToHexadecimal(octal):
    return hex(int(str(int(octal, 8))))

def HexadecimalToDecimal(hexadecimal):
    return  str(int(hexadecimal,16))

def HexadecimalToBinario(hexadecimal):
    return bin(int(hexadecimal, 16))

def HexadecimalToOctal(hexadecimal):
    return oct(int(hexadecimal,16))

#Conversión simultanea de bases (decimal a otras)
def decimalToOthers():
 decimal= pedirValor("decimal")

 binario = decimalToBinario(decimal)
 fraccion= fraccionario_binario(part_f)
 print("Decimal: "+str(decimal)+" => Binario: "+binario+","+fraccion)

 octal = decimalToOctal(decimal)
 print("Decimal: "+str(decimal)+" => Octal: "+octal)

 hexadecimal = decimalToHexadecimal(decimal)
 print("Decimal: "+str(decimal)+" => Hexadecimal: "+hexadecimal)

#Conversión simultanea de bases (binario a otras)
def binarioToOthers():
 binario = pedirValor("binario")

 decimal = binarioToDecimal(binario)
 print("Binario: "+binario+" => Decimal: "+ decimal)

 octal = binarioToOctal(binario)
 print("Binario: "+binario+" => Octal: "+ octal)

 hexadecimal = binarioToHexadecimal(binario)
 print("Binario: "+binario+" => Hexadeciaml: "+ hexadecimal)

#Conversión simultanea de bases (octal a otras)
def octalToOthers():
 octal = pedirValor("octal")

 decimal = OctalToDecimal(octal)
 print("Octal: "+octal+" => Decimal: "+ decimal)

 binario = OctalToBinario(octal)
 print("Octal: "+octal+" => Octal: "+ octal)

 hexadecimal = OctalToHexadecimal(octal)
 print("Octal: "+octal+" => Hexadeciaml: "+ hexadecimal)


#Conversión simultanea de bases (hexadecimal a otras)
def hexadecimalToOthers():
 hexadecimal = pedirValor("hexadecimal")

 decimal = HexadecimalToDecimal(hexadecimal)
 print("Hexadecimal: "+hexadecimal+" => Decimal: "+ decimal)

 binario = HexadecimalToBinario(hexadecimal)
 print("Hexadecimal: "+hexadecimal+" => Binario: "+ binario)

 octal = HexadecimalToOctal(hexadecimal)
 print("Hexadecimal: "+hexadecimal+" => Octal: "+ octal)

Dictionary of options to execute:

opciones = { '1': decimalToOthers, '2': binarioToOthers, '3': octalToOthers, '4': hexadecimalToOthers }

Run the selected option:

  

optionsexOption

    
asked by juan 23.02.2017 в 21:54
source

1 answer

1

You should explain what the error is and that you intend to return since in your code you apparently only return the variable part_e . If I understand you, you want your function to return two values. In python it is easy to do this, simply:

return var1, var2

This returns a tupla with the values in the same order:

(var1, var2)

If you want to unpack the tuple to pass its elements as arguments to another function, just use * in front of it, I'll give you an example following your own code, the function f takes a decimal number and returns the whole part and the fractional part. The mul function takes two numbers and multiplies them. You can see how we can use the return of f as parameters of mul unpacking the tuple that returns:

def f(num):
    part_e = int(num)
    part_f =( abs(num) - abs(int(num)) )
    return part_e, part_f

def mul(e, f):
    return e*f

res = mul(*f(3.14)))
print(res)

You can unpack the values by assigning them to variables directly as well:

part_e, part_f = f(3.14)
res = mul(part_e, part_f)

I do not know if this is what you want to do, otherwise specify a little better what you want and add the error.

    
answered by 23.02.2017 в 22:30