[Código Python] Number base converter V2.0

Iniciado por Sensei, Agosto 03, 2011, 02:30:57 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Agosto 03, 2011, 02:30:57 PM Ultima modificación: Agosto 04, 2011, 12:18:28 AM por JaAViEr
Buenas a todxs,

Pues... leyendo/estudiando sobre sistemas informáticos, llegue a la parte en que se trata los números en base octal, hexadecimal y los binarios, así que he decido hacer una aplicación para convertirlos. Es un code muy simple pero espero a alguien le resulte de utilidad.

Código: Python
#!/usr/bin/python

##########################
#Number base changer 2.0 #
#by sensei               #
#Thx to Windhack         #
##########################
def hexadecimal(num):
    return hex(num)

def hextodec(num):
    return int(hex(num), 16)

def octal(num):
    return oct(num)

def octtodec(num):
    return int(oct(num), 8)

def binary(num):
    return bin(num)

def bintodec(num):
    return int(bin(num), 2)

while True:

    try:

        num=int(input('Type the number to convert: '))

        print '''Welcome to Number base changer
                 Please, chose an option:
                 1. Convert to hexadecimal
                 2. Convert to octal
                 3. Convert to binary
                 4. Convert from hexadecimal
                 5. Convert from octal
                 6. Convert from binary
                 7. Exit
                 '''

        a=raw_input('Please, chose your option: ')

        if a=='1':
            print 'your num in hexadecimal is: %s' %hexadecimal(num)

        elif a=='2':
            print 'your num in octal is: %s' %octal(num)

        elif a=='3':
            print 'your num in binary is: %s' %binary(num)

        elif a=='4':
            print 'your num in decimal is: %s' %hextodec(num)

        elif a=='5':
            print 'your num in decimal is: %s' %octtodec(num)

        elif a=='6':
            print 'your num in decimal is: %s' %bintodec(num)

        elif a=='7':
            break
            exit()
       
        else:
            print 'you must type a valid option'

    except:
        print 'Warning, an error has ocurred'


Un saludo!




Edito con la V2.0, agradecimientos especiales a Windhack que me ha ayudado a simplificar el código y a corregir un error que tenía al pasar a decimal.

Sé que se puede simplificar más el código, pero me comentaron en su día que queda mejor usar las definiciones. Que opinais de esto? Mejor definir o simplificidad?

Un saludo!

No hagas doble post compañero. Lo he correjido.

Simplicidad? Opino que debemos respetar el código limpio de Python, manteniendo un código ordenado y facil de leer.

Saludos y felicitaciones, luego le dare otra ojeada!

Ahora lo miro detenidamente, lo único que no me gusta es que está todo en ingles, o es tu lengua madre?

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Sthefano02, disculpa por el doble post.

Gh0st.C, pues no, no es mi lengua madre, pero tampoco el español, consideré en codear todo en inglés, al igual que leer la mayor parte del material que pueda para aprender a desenvolverme mejor en este idioma. Si acaso, cualquier cosa no la entiendes coméntamelo y te la traduzco sin ningún problema.

Por lo demás acepto cualquier crítica, ideas para mejorarlo, cosas que añadir, etc...

Un saludo y gracias por vuestros comentarios.

Agosto 03, 2011, 06:17:54 PM #4 Ultima modificación: Agosto 03, 2011, 06:19:34 PM por Gh0st.C
Agradezco tu amabilidad pero no hay necesidad de traducción  ;)
Es solo porque queda más bueno en español :P y no da el aspecto de rippeado.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


Aún asi, que nivel de ingles posees? Falta "lenguaje", por asi decirlo.

A simple vista, como consejo, te podria decir que reemplazes

Citaryour num in decimal

por:

Citardecimal number

Obviamente, no te haré uno con cada uno, lo haras por lógica. Era solo para que lo veas, queda mas elegante, y es el uso correcto.

Saludos!

PD: debes mejorar el ingles.

Agosto 03, 2011, 06:39:25 PM #6 Ultima modificación: Agosto 03, 2011, 06:49:37 PM por Sensei
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Aún asi, que nivel de ingles posees? Falta "lenguaje", por asi decirlo.

A simple vista, como consejo, te podria decir que reemplazes

Citaryour num in decimal

por:

Citardecimal number

Obviamente, no te haré uno con cada uno, lo haras por lógica. Era solo para que lo veas, queda mas elegante, y es el uso correcto.

Saludos!

PD: debes mejorar el ingles.

Hehe, hombre, no soy un filólogo, pero sería algo así:

Tu número en decimal es: en traducción "Your number in decimal is"
Si no quisiera especificar que el numero introducido es hex/octal/decimal escribiría "Your decimal/octal/hex/bin number is", pero ya significa "Tu numero decimal/octal/hex/bin es"

Como ves, no tienen la misma traducción, o así he aprendido yo. He ido varias veces por ocio/cursos de inglés a varias partes de UK e Irlanda y bueno, algo de nivel tengo, pero nunca hemos tratado vocabulario muy técnico, más coloquial y en este caso, creo, que efectivamente, son dos frases distintas.

Un saludo!

Edito: Igual lo que notas en falta es algo asi como "Your num in decimal system/base is", pero vamos, era por acortar en ese caso.

Te dare otro ejemplo, sobre a lo que iba yo. Luego me dices que opinas.

CitarCadena: bienvenido
Tu cadena encriptada es: asdasdasdasd

Ahora, la manera mas técnica a la que voy yo:

CitarCadena: bienvenido
Cadena encriptada: asdasdasdasd

Se entiende la diferencia? Saludos!

Si fuese por simplificar el código, quitaría todas las funciones
y llamaría a la conversión dentro del IF.

Saludos.
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Te dare otro ejemplo, sobre a lo que iba yo. Luego me dices que opinas.

CitarCadena: bienvenido
Tu cadena encriptada es: asdasdasdasd

Ahora, la manera mas técnica a la que voy yo:

CitarCadena: bienvenido
Cadena encriptada: asdasdasdasd

Se entiende la diferencia? Saludos!

Claro, jeje, ya la entendía, pero no siendo así no es que me falta nivel de inglés, es que he elegido una forma diferente para interactuar con el usuario. Creo que queda más fácil de interpretar que el número que has introducido en decimal es el siguiente, que decir numero decimal o hexadecimal directamente.

Vamos, que estaría bien de las dos formas.

Un saludo!

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Si fuese por simplificar el código, quitaría todas las funciones
y llamaría a la conversión dentro del IF.

Saludos.

Si, a eso me refería, Sthefano02, hace tiempo me comentara que en python estaba mejor definir las funcionoes, que quedaba más limpio y luego me han comentado en otras ocasiones que era mejor hacer la conversión en cada if, que se haría más corto el código. A mi personalmente me gusta más como lo tengo, se ve más limpio que de la otra forma pero por eso preguntaba que es lo "standar".

Un saludo!

Te apoyo, con las funciones lo veo con una mejor estructura.

Aun asi, esa no es la "forma" de utilizarlo el ingles, ya que los que hablan natalmente el idioma, o profundamente, no lo traducen de la manera en la que lo estas traduciendo.

Vuelvo a repetir, te lo doy como consejo, tambien estudio ingles y he participado y aprobado certificados. Si así lo ves mejor, no hay mas que discutir.

Saludos y suerte con las mejoras!

hola,
yo también apoyo lo de las funciones, python facilita mucho su uso y esto hace que los códigos queden más sencillos, creo yo.


ahora, pasando a lo técnico: por ejemplo, el numero "1" en hexadecimal corresponde al valor "31", tu algoritmo hace mal esa conversión. El problema radica en que haces directamente la conversión de texto a hexadecimal, siendo lo correcto primero pasar a ascii y luego a hex.


yo había posteado un script que convierte a hex y a md5, si tienes duda, mira el post y fijate en la funcion convert_hex(), No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

las otras conversiones no sé como funcionan, así que no puedo opinar de ellas.

saludos, cualquier duda, aquí estamos para tratar de ayudar.
¡< blozzter >!