Underc0de

Programación Scripting => Python => Mensaje iniciado por: Sensei en Agosto 03, 2011, 02:30:57 PM

Título: [Código Python] Number base converter V2.0
Publicado por: Sensei en Agosto 03, 2011, 02:30:57 PM
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) [Seleccionar]
#!/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!
Título: Re:[Código Python] Number base converter V2.0
Publicado por: Mavis en Agosto 03, 2011, 05:35:06 PM
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!
Título: Re:[Código Python] Number base converter V2.0
Publicado por: Gh0st.C en Agosto 03, 2011, 06:07:31 PM
Ahora lo miro detenidamente, lo único que no me gusta es que está todo en ingles, o es tu lengua madre?
Título: Re:[Código Python] Number base converter V2.0
Publicado por: Sensei en Agosto 03, 2011, 06:12:17 PM
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.
Título: Re:[Código Python] Number base converter V2.0
Publicado por: Gh0st.C en Agosto 03, 2011, 06:17:54 PM
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.
Título: Re:[Código Python] Number base converter V2.0
Publicado por: Mavis en Agosto 03, 2011, 06:19:05 PM
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.
Título: Re:[Código Python] Number base converter V2.0
Publicado por: Sensei en Agosto 03, 2011, 06:39:25 PM
No tienes permitido ver enlaces. Registrate o Entra a tu 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.
Título: Re:[Código Python] Number base converter V2.0
Publicado por: Mavis en Agosto 03, 2011, 10:15:48 PM
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!
Título: Re:[Código Python] Number base converter V2.0
Publicado por: JaAViEr en Agosto 04, 2011, 12:20:25 AM
Si fuese por simplificar el código, quitaría todas las funciones
y llamaría a la conversión dentro del IF.

Saludos.
Título: Re:[Código Python] Number base converter V2.0
Publicado por: Sensei en Agosto 04, 2011, 05:33:38 AM
No tienes permitido ver enlaces. Registrate o Entra a tu 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 enlaces. Registrate o Entra a tu 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!
Título: Re:[Código Python] Number base converter V2.0
Publicado por: Mavis en Agosto 04, 2011, 06:27:06 PM
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!
Título: Re:[Código Python] Number base converter V2.0
Publicado por: blozzter en Agosto 04, 2011, 07:11:33 PM
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(), [aqui] (http://www.underc0de.org/foro/index.php?topic=6566.msg21699)

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

saludos, cualquier duda, aquí estamos para tratar de ayudar.