Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Sajuuk

#121
Presentaciones y cumpleaños / Re:Hola a todos
Mayo 20, 2015, 03:46:59 AM
Yo también soy de México. :P

Bienvenido al foro @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login !
Disfruta tu estadía aquí, y ya verás que de aquí no sales sin aprender algo.  ;D

Saludos!
#122
Python / Re:Operadores lógicos y Condicionales
Mayo 19, 2015, 10:11:11 PM
CitarEl operador lógico or es usado para negar...

¿Nadie lo notó?  ;D

Saludos!
#123
Python / Funciones en Python
Mayo 19, 2015, 02:55:19 PM





CitarEn programación, una función es un grupo de instrucciones con un objetivo en particular y que se ejecuta al ser llamada desde otra función o procedimiento.




Comenzamos escribiendo la palabra clave def, seguido de un nombre descriptivo (que al momento de leerlo, sepas qué es lo que hará). Luego, se abren y cierran paréntesis, y dentro de ellas podemos colocar parámetros (variables) que el algoritmo (el bloque de código que contendrá la función) usará. Si la función no requiere que se le pasen variables, se puede dejar vacio.
Al final, escribimos los dos puntos ( : )

Código: python

def nombre(parametro1, parametro2, ..., parametron):
algoritmo(s)





La función creada no servirá de nada hasta que se le llame. Para esto, simplemente escribimos su nombre:
Código: python

def nombre():
print("Hola")

nombre() #Llamamos la función escribiendo su nombre





Una función puede retornar datos, para esto, se usa la palabra return, seguido de lo que se desea retornar. Además, podemos designar el retorno de datos a una variable:
Código: python

def funcion():
    return "Hola Mundo"

frase = funcion()
print(frase)





Podemos esperar un numero desconocido de variables en una función (como muchos nombres, por ejemplo), así que al momento de pasar esos datos a la función, hacemos lo siguiente:
Código: python

def recorrer_parametros_arbitrarios(parametro_fijo, *arbitrarios):
    print(parametro_fijo)

    # Los parámetros arbitrarios se recorren como tuplas
    for argumento in arbitrarios:
        print(argumento)

recorrer_parametros_arbitrarios('Fijo', 'arbitrario 1', 'arbitrario 2', 'arbitrario 3')


Como podemos ver, tenemos una variable fija (de la cual sabemos de antemano que será enviada), pero también tenemos algo entre los paréntesis: *arbitrarios.
Ella nos dice que se están esperando un numero desconocido de variables, y al momento de recibirlas, podemos recorrerlas como si fueran una tupla, imprimiendo cada valor.




Siempre deben de pasarse variables en el orden que la función lo requiera.
Por ejemplo, una función requiere 2 variables tipo string, pero cada una será usada en una operación de condicional.
Código: python

def saludo(idioma, saludo):
    if idioma == "es":
        print("Idioma: Espanol\nSaludo: %s" % saludo)
    if idioma == "en":
        print("Languaje: English\nRegard: %s" % saludo)

saludo("es", "Hola!")


Primero pasamos el tipo de idioma a usar. Si el idioma que seleccionamos es "es" (Español), nos mostrará un output en Español saludandonos.
Pero si le pasabamos un "en" (Inglés) nos mostrará un output en Inglés.

Si nosotros pasaramos el saludo primero en lugar del idioma que queremos... osea:
Código: python

saludo("Hola", "es")


No nos mostraría nada, ya que en la función, establecimos que la primera variable sería el idioma, y no el saludo. Así que las condicionales serían falsas.



Podemos definir parametros en los mismos paréntesis, reduciendo la cantidad de variables que se esperan
OJO: Siempre deben de colocarse primero las variables que serán enviadas a la función, seguidas de las variables que definiremos en el mismo paréntesis:
Código: python

def saludo(saludo, idioma="Espanol"):
    print("Un saludo en el idioma %s: %s" % (idioma, saludo))

saludo("Hola amigos!")

CitarUn saludo en el idioma Espanol: Hola amigos!




De igual manera, podemos definir las variables al momento de pasarlas a la función:
Código: python

def hola(saludo):
    print(saludo)

hola(saludo="Hola amigos!")





Tenemos la opción de definir varios parametros al momento de enviarlas a la función (como los arbitrarios). Para esto, necesitamos colocar **kwords en los paréntesis (en lugar de un solo asterisco, ahora usamos 2 asteriscos para diferenciar entre "tuplas", y "diccionarios".
kwords = Keywords (clave=valor)
Código: python

def idiomas(**kwords):
    for idioma in kwords:
        print(idioma + " : " + kwords[idioma]) # Como podemos ver, concatenamos cada idioma con su valor.

idiomas(espanol="Hola", ingles="Hi!", japones="Konnichiwa")


Citar
espanol : Hola
ingles : Hi!
japones : Konnichiwa




Habrá ocasiones en las que una función espere una cantidad fija de variables, pero nosotros queremos enviar una tupla que contiene datos para el algoritmo de la función.
Para ello, se toma la variable a enviar, y se le envía usando un asterisco. La función sabrá que queremos enviarle una tupla, y dividirá los datos para asignarselos a cada variable.
Código: python

def calcular(base, altura):
    return base * altura

datos = [35, 10]
print(calcular(*datos))   # Nos dará como resultado 35*10, osea: 350





También, puede que en lugar de tupla, querramos enviar un diccionario con los datos a utilizar. Para esto, en lugar de *, usaremos **:
Código: python

def calcular(base, altura):
    return base * altura

datos = {
    "base": 50,
    "altura": 17
}
print(calcular(**datos))


Citar850




Llamadas recursivas

Las llamadas recursivas ocurren cuando dentro de una función llamamos a la misma funcion, haciendo que esta se vuelva a ejecutar.
Esto es útil cuando, por ejemplo, hacemos un juego donde tengamos n intentos, y si nos equivocamos, volver a comenzar.

El problema con estas llamadas, es que son fáciles de caer en bucles infinitos, por lo que solo se recomienda su uso cuando ya no hay alguna otra alternativa.

Ejemplo de una llamada:
Código: python

def jugar(intento=1):
    respuesta = str(input("¿De qué color es una naranja? "))
    if respuesta != "naranja":
        if intento < 3:
            print ("\nFallaste! Inténtalo de nuevo")
            intento += 1
            jugar(intento) # Llamada recursiva
        else:
            print ("\nPerdiste!")
    else:
        print ("\nGanaste!")
jugar()




Algunos otros ejemplos de funciones:



Código: python

def escaner(*ports):
    for valor in ports:   # Leemos los valores de la tupla ports
        for port in valor:   # Por cada valor encontrado...
            print("[*] Scanning port: " + str(port))

ports = [22, 23, 999, 1024, 9999, 10234, 20302]
escaner(ports)


Resultado:
Citar
  • Scanning port: 22
  • Scanning port: 23
  • Scanning port: 999
  • Scanning port: 1024
  • Scanning port: 9999
  • Scanning port: 10234
  • Scanning port: 20302



Código: python

def diccionario(**kwords):
    for servicio in kwords:
        print("Escaneando " + servicio + " en puerto: " + kwords[servicio])
servicios = {
    "SSH": "22",
    "Telnet": "23",
    "SMTP": "25",
    "HTTP": "80",
    "IMAP": "143"
}
diccionario(**servicios)


Resultado:
Citar
Escaneando IMAP en puerto: 143
Escaneando SMTP en puerto: 25
Escaneando Telnet en puerto: 23
Escaneando SSH en puerto: 22
Escaneando HTTP en puerto: 80



Ya saben, si encuentran un error, o desean criticar el post abajo en los comentarios pueden hacerlo.
Saludos!
#124
Presentaciones y cumpleaños / Re:Hola! Me presento
Mayo 18, 2015, 11:00:20 AM
Enhorabuena dourden!
Espero y disfrutes tu estadía en el foro.

Saludos!
#125
Python / Re:Operadores lógicos y Condicionales
Mayo 18, 2015, 05:42:35 AM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Todo bien, si no te molesta, te puedo enviar un par de ejemplos por MP y si te parecen, los añades..

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Muchas gracias JaAViEr
Agregué el ejemplo que me enviaste.

Saludos
#126
Zona Webmaster / Re:HTML5 Up! Templates
Mayo 17, 2015, 09:06:56 PM
¡Un super aportazo facu!
En buen momento apareces cuando empiezo de nuevo con HTML5/CSS3  ;D

Saludos!
#127
Presentaciones y cumpleaños / Re:Hola Amigos..
Mayo 17, 2015, 05:49:31 PM
Bienvenido a underc0de hermano!

Estaremos esperando esos aportes de Brute Force.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
experto en cuentas, sacar cuentas premium de qualquier sitio, que tiene login..

Y por cierto, ¿podrías sacarme una cuenta de brazzers?  ;D
Nah, es broma. xD

Saludos!
#128
¡Bienvenido a Underc0de Ghostman!
Y todos nos hemos llamado Hackers entre nuestros amigos, tranquilo. xD
Lo malo es que te terminas dando cuenta de que eres un tremendo lammer.

Aquí encontrarás mucha ayuda en lo que necesites, así que no dudes en publicar tus dudas!

Saludos desde el otro lado del charco!
#129
Python / Re:Operadores lógicos y Condicionales
Mayo 16, 2015, 03:20:34 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Buen día!

Está bastante completo, estaría bueno que añadas el uso de "is" en el condicional if.
Gracias por el material!

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Acabo de agregarlo.  :)

Saludos!
¡Genial!
Hey, no es de mala leche, solo con fines constructivos, pero pensé que darías ejemplos de "is" en cuanto a comparativa de tipos de variables. Por ejemplo if variable is INT(): blablabla

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Lo que pasa es que aún no digería muy bien lo que is significaba.
Si yo daba ejemplos podrían estar erroneos.

Ahora ya que comprendo casi en su totalidad el is, agregué algunas cosillas. Igual puede que exista algún error al explicar algo, asi que estaría agradecido que alguien me avisara de ello.
#130
Python / Re:Operadores lógicos y Condicionales
Mayo 15, 2015, 10:29:16 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Buen día!

Está bastante completo, estaría bueno que añadas el uso de "is" en el condicional if.
Gracias por el material!

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Acabo de agregarlo.  :)

Saludos!
#131
Python / Operadores lógicos y Condicionales
Mayo 15, 2015, 03:57:57 PM


Operadores lógicos



Los operadores lógicos nos permiten agrupar condiciones simples en una estructura condicional, esto nos facilita la implementación de algoritmos más compactos y comprensibles.

En Python, contamos con 3 operadores lógicos:

  • and
  • or
  • not




and

Operador lógico que solo será verdadero si ambas partes que se evalúan son verdaderas.
Ejemplo:
Código: python

x = int(input("Numero 1: "))
y = int(input("Numero 2: "))

if x <= 10 and y <= 10:
print(True)
else:
print(False)




Como podemos apreciar, solo se imprimirá True si ambos números son menores o iguales a 10.
En caso contrario, si tan solo 1 de ellos es mayor a 10, la condicion será Falsa.



or

Este operador lógico será verdadero si una de las opciones a evaluar es Verdadera. No importa si una es False, y la otra True, or  será verdadera porque hay un True.

Ejemplo:
Código: python

x = int(input("Numero 1: "))
y = int(input("Numero 2: "))

if x <= 10 or y <= 10:
print(True)
else:
print(False)




Tan solo se necesito un True para que or  también fuese True.
Ingresamos 2 numeros.
Si el primero es menor o igual a 10, o el segundo es menor o igual a 10, se imprimirá un True.
En caso de que AMBOS fuesen False (o mayores a 10), or valdrá False



not

El operador lógico not es usado para negar (lo que en otros lenguajes puede ser asÍ: "!variable")

Ejemplo:
Código: python

x = int(input("Numero 1: "))
y = int(input("Numero 2: "))

if not x > y:
print(True)
else:
print(False)




Introducimos 2 numeros.
Llegamos al if: Si x no es mayor a y, entonces imprime un True.
Si si lo es, imprimirá un False.




Sentencias condicionales



CitarEn programación, una sentencia condicional es una instrucción o grupo de instrucciones que se pueden ejecutar o no en función del valor de una condición.
Empezemos con if



Condicional: If



La condicional if permite ejecutar una serie de instrucciones según se cumpla un valor.
En inglés, if significa "si..." (condicion)

Sintaxis:
Código: python

if condición:
instrucción1
instrucción2
.
.
.
instrucción n


Después del if, escribimos la condición a evaluar (y es una expresión lógica), seguido de los dos puntos ( : )
Abajo, escribimos las instrucciónes a ejecutar en caso de que la condición sea verdadera.

Ejemplo:
Un programa nos pide nuestra edad para evaluar si somos mayores de edad. ¿Pero cómo sabrá si lo soy?
En este caso, if nos ayudará:
Código: python

edad = int(input("Ingresa tu edad: "))

if edad < 18:
print("Eres menor de edad")

print("Tu edad es: ", edad)


La variable edad nos pide nuestra edad (es un numero entero).
Después if hace lo siguiente: Si el número ingresado (mi edad) es menor a 18, ejecutar print("Eres menor de edad"). Además, nos imprimirá nuestra edad al final del programa.

Pero si nosotros ingresamos un valor mayor a 18, no pasara nada, solo nos imprimirá nuestra edad, ya que la condicional if resultará falsa, por lo tanto, no se ejecutará el print("Eres menor de edad").

Otro ejemplo:
Código: python

nombre = str(input("Tu nombre: "))

if nombre == "pedro":
print("¡Hola, Pedro!")

Realmente no sé si conozcan el significado de "==", pero igual se los pongo:
Citar"==": Es igual que, es equivalente de, es lo mismo que.

El programa anterior obtiene nuestro nombre (string).
Entonces, if evalua si la cadena que ingresamos es igual que "pedro", osea, revisa nuestra variable, y en caso de que lo que contenga sea "pedro", if será verdadero, y se ejecutará el bloque de instrucciónes abajo.

Si nuestro nombre es "pedro", nos imprimirá: "Hola, pedro!"

Pero en caso de que if sea falso (que no nos llamemos "pedro") el bloque de instrucciones no se ejecutará, y no se imprimirá nada.



El uso de is en If

CitarTodo objeto tiene una identidad, un tipo y un valor. La identidad de un objeto nunca cambiará una vez creado; puedes pesar que es la dirección del objeto en la memoria. El operador is compara la identidad de 2 objetos; la función id() retorna un entero representando la identidad (actualmente implementada como una dirección).

Hemos visto usar "==" en if's, ¿pero qué hay de los "is"?
Para no confundirnos:
Citar
is      es la comparación de identidad.

==    es la comparación de igualdad.

is retornará True si ambos partes comparadas provienen de un mismo objeto.
Se puede entender mejor con el siguiente ejemplo:

Código: python

>>> x = []
>>> y = []
>>>
>>> x is y
False
>>>
>>> x == y
True
>>>


A simple vista pueden parecer lo mismo, pero al usarlos es otra realidad.
Primero, tenemos 2 listas. is comparará x e y, y también lo hará ==
Aquí empieza lo confuso:

Tú puedes decir: "Pero si son 2 listas, son la misma cosa". Grave error.
x es una lista.
y es OTRA lista.

Si nosotros modificamos la lista x, la lista y no lo hará, ya que es otro objeto, otra lista.
Pero si nosotros comparamos igualdad ( == ) nos retornará un True, ya que ambas son objetos listas.
Y repito, si nosotros comparamos con is nos retornará False, ya que no provienen del mismo objeto. Podrán ser listas, pero cada lista es diferente.


Otro ejemplo:

Código: python

>>> n = int()
>>> m = int()
>>> n is m
True
>>>


Como podemos observar, la variable n  y la variable m  parten de un mismo objeto: int()
Al hacer la comparativa, nos devolvió True, porque repito, ambos comienzan de una misma cosa: int()
Si nosotros "imprimimos" int()...

Código: python

>>> int()
0


Nos devolvió un 0, lo que quiere decir que ambas variables provienen de un 0, por eso vemos un True.

Código: python

>>> a = 0
>>> b = 0
>>> a is b
True
>>>


Una manera más clara de verlo. a  y b  valen 0.
Ahora, usemos una función predeterminada de python llamada id() para obtener el valor de identidad de cada variable:

Código: python

>>> id(a)
2012980272
>>> id(b)
2012980272
>>>


Como puedes ver, ambas variables tienen la misma id (identificación), por lo que al comparar con is  , nos devuelve True ya que ambas son identicas.

Ultimo ejemplo:



Cuando nosotros comparamos la variable que nosotros ingresamos con la función predeterminada int(), nos devolvió un False, ya que, como vimos más arriba, al imprimir int() nos devolvió un 0.
Pero cuando comparamos la variable b , que proviene de int(), nos devolvió un True.



Ejemplo enviado por el usuario JaAViEr:
Código: python

'''
Autor: JaAViEr | 0X5D
Twitter: @javieresteban__
Website: http://codigo.ga
'''
class Programa:
           
        def recorrer(self, variable, subitem=False):
     
                for l in variable:
                   
                            tipo = type(l)
                            if tipo is list:
                           
                                    print "-" * 40
                                    print "Lista:", l
                                    print "Recorriendo elementos de la lista (%s)..." % (len(l))
                                    self.recorrer(l, True)
                                   
                            elif tipo is int:
                           
                                    print "Entero:", l
     
                            elif tipo is str:
                           
                                    if subitem:
                                           
                                            print " ",
                                   
                                    print "String:", l
                                   
                            elif tipo is tuple:
                           
                                    print "-" * 40
                                    print "Tupla:", l
                                    print "Recorriendo elementos de la tupla (%s)..." % (len(l))
                                    self.recorrer(l, True)
     
programa = Programa()
lista = [("Tupla Valor A","Tupla Valor B"), 1, "Javier", ["Elemento A", "Elemento B", "Elemento C"]]
programa.recorrer(lista)


Un ejemplo de "is" en IF y un poquito de recursividad. Recorre la variable "lista", evaluando que tipo de objeto es cada elemento, en caso de que algún elemento sea tipo lista/tupla, entonces recorre también sus elementos y evalúa el tipo de objeto de cada uno de ellos.
La salida sería:
Código: text

----------------------------------------
Tupla: ('Tupla Valor A', 'Tupla Valor B')
Recorriendo elementos de la tupla (2)...
        String: Tupla Valor A
        String: Tupla Valor B
Entero: 1
String: Javier
----------------------------------------
Lista: ['Elemento A', 'Elemento B', 'Elemento C']
Recorriendo elementos de la lista (3)...
        String: Elemento A
        String: Elemento B
        String: Elemento C




Condicional: If...else



Else es una condición que se ejecuta en caso de que if sea falso.

Sintaxis:
Código: python

if condición:
instrucción1
instrucción2
.
.
.
instrucciónn
else:
instrucción1
instrucción2
.
.
.
instrucciónn


Ejemplo de uso:

Un programa nos pide un numero, y el mismo evaluará si el numero que ingresamos es menor o igual a 10.
Código: python

numero = int(input("Ingresa un numero: "))

if numero <= 10:
print("El numero es menor o igual a 10.")
else:
print("El numero es mayor que 10.")


La variable numero contiene un valor numerico entero.
If nos evaluará si el numero contenido ahí es menor o igual a 10. En caso verdadero, se ejecutará el print()

PERO, si if resulta ser falso (si el número es mayor que 10), else será verdadero, y nos imprimirá "El número es mayor que 10."

Otro ejemplo:

Usaremos el code de hace rato, pero ahora lo expandiremos añadiendole un else
Código: python

nombre = str(input("Ingresa tu nombre: "))

if nombre == "pedro":
print("Hola, Pedro!")
else:
print("¿Quien eres?")


Si el nombre que ingresamos es "pedro", se ejecutará el print("Hola, Pedro!").
Pero si ingresamos otro nombre, se ejecutará el print("Quien eres?")

Asignarle un valor a una variable según sea el caso.

Habrá veces en que una variable necesite un valor en caso de que otra resulte verdadera (o contenga algo).
Como por ejemplo, si nosotros ingresaramos un nombre, y ese nombre tuviera más de 5 digitos, la variable nueva será verdadera.
Para esto, usaremos una función predeterminada de python: len()

Lo que hace len, es imprimir la longitud de una variable.

Por ejemplo:
"Juan".
Juan es un nombre de 4 caracteres.
Pues eso, len() leerá el contenido, y obtendrá la longitud que tenga la variable (osea, 4, si fueramos a leer el nombre "Juan").

Código: python

nombre = str(input("Ingresa tu nombre: "))

print(len(nombre))




Como podemos ver, Pedro es un nombre de 5 caracteres.
Pues len() imprimirá su longitud.

Igual, Santiago es un nombre de 8 caracteres.

Nada dificil de entender.

Ahora, regresemos a donde nos quedamos:
Código: text

nombre = str(input("Nombre: "))

if len(nombre) >= 5:
y = True
else:
y = False

print(y)




Ingresamos un nombre, entonces if evaluará si la longitud (len()) es mayor o igual a 5. En caso verdadero, la variable y será verdadera.
Pero en caso falso, la variable y será Falsa.

Una manera de asignarle un valor a una variable de manera cortísima y sencilla es haciendo lo siguiente:

Código: python

nombre = str(input("Nombre: "))

y = True if len(nombre) >= 5 else False

print(y)




Si, es algo confuso, pero es sencillo.

La variable y  será True si la longitud de la variable nombre es mayor o igual a 5, en caso contrario, será Falsa.

Otro ejemplo:

Código: python

numero = int(input("Nombre: "))

y = 5 if numero <= 10 else 0

print(y)


Esto quiere decir:
y  valdrá 5 si la variable numero es menor o igual a 10, en caso contrario, valdrá 0.



Condicional: If...elif...else



¿Pero que pasa si aún hay posibilidad de usar una variable?

elif es lo que necesitamos.

Elif es una condicional. Se ejecutará su bloque de código solo si if es falso. Si elif también es falso, se procederá al else
"elif" es una contracción de "else if".
Además, se pueden escribir muchos elif en caso necesario.

Sintaxis:
Código: python

if condición:
instrucción1
instrucción2
.
.
.
instrucciónn
elif condición:
instrucción1
instrucción2
.
.
.
instrucciónn
else:
instrucción1
instrucción2
.
.
.
instrucciónn


Ejemplo de uso:
Código: python

edad = int(input("¿Cuántos años tiene? "))

if edad >= 18 and edad < 120:
    print("Es usted mayor de edad")
elif edad < 0:
    print("No se puede tener una edad negativa")
elif edad >= 120:
    print("¿Seguro que tiene", edad, "años?")
else:
    print("Es usted menor de edad")


Lo anterior funciona así:
El programa nos pide una edad (número entero).
Entonces vamos a if. If evaluará si la edad es mayor o igual a 18, y además, si también la edad es menor o igual a 120 (quizás es la edad más avanzada a la que se ha llegado, no tengo idea. xD). En caso verdadero, print hará un "Es usted mayor de edad"

Pero en caso de que if sea falso, procedemos al primer elif:
SI la edad introducida es menor a 0 (osea, un numero negativo), se ejecutará el print("No se puede tener una edad negativa")

Ahora, si también es falso, vamos al otro elif:
Si la edad introducida es mayor a 120 años, pues sería algo increible, puesto que todos vivimos una media de 70-90 años.
Entonces, procede el print("¿Seguro que tiene", edad, "años?")

Pero si ninguna de las anteriores es verdadera, else ejecutará su bloque de instrucciones:
Citarprint("Es usted menor de edad")
Ya que no somos mayores de edad.




Saludos!
#132
Python / Bucles en Python
Mayo 15, 2015, 02:50:51 AM
Bucles



Existirán ocasiones en las que queremos mantener un proceso de interacción con el usuario, o simplemente busquemos imprimir ciertas instrucciones una cantidad n de veces.
Para esto, Python nos proporciona 2 opciones: While loop, y For loop.

Estas estructuras cíclicas nos permiten ejecutar un mismo código, de manera repetida, mientras se cumpla una condición.

Es importante (si no es que fundamental) que sepas los operadores de condición, ya que con ellos creamos algoritmos y comparaciónes.
Si no los sabes, aquí están:

Código: python
x != y     # x no es igual a y
x > y      # x es mayor que y
x < y      # x es menor que y
x >= y     # x es mayor o igual que y
x <= y     # x es menor o igual que y





While Loops



La condicional While ejecuta una instrucción mientras algo sea verdadero (o falso). Podemos imprimir desde 5 veces, hasta el infinito y más alla...!

Sintaxis:
Código: python

while expresión:
   instrucción(es)


El código de arriba funciona así:
Mientras algo sea verdadero ejecutar:
        Instrucción (o instrucciónes)

Ejemplo de uso:
Código: python

variable = int(input("Numero: "))

while variable <= 100:
print(variable)




Como vemos, el numero ingresado se imprimirá infinitamente, ya que no cambiará nunca su valor, y no será más grande o igual a 100.
Para corregir esto, agregamos la siguiente linea de código:
Código: python

variable = int(input("Numero: "))

while variable <= 100:
print(variable)
variable += 1    # Cada vez que se imprima la variable, se le sumará 1 a ella.




Explicación:
La variable "variable" nos pide que ingresemos un número entero.
Entonces, ejecutamos una condicional:
Código: python
while variable <= 100:


Quiere decir:
Mientras la variable sea menor o igual a 100...
Esto quiere decir, que se ejecutará la instrucción hasta que la variable alcance un valor igual o mayor a 100.
Código: python
variable += 1

Y lo que hace esta linea, es sumarle 1 a nuestra variable. También se puede representar así:
Código: python
variable = variable + 1

Simplemente le agregaremos a nuestra variable un 1.

También podemos usar valores booleanos (True o False) en while:
Código: python

while True:
print("Underc0de")


Lo anterior imprimiría la cadena "Underc0de" el suficiente tiempo para que puedas verlo a la edad de los 80 años. Osease, siempre se imprimirá la cadena, a menos de que algo la interrumpa (como un KeyboardInterrupt, o cerrar la consola)




For loop




For nos permite recorrer cada elemento de una variable, cadena, o conjunto de datos.

Ejemplo:
Código: python

mi_lista = ["Pablo", "Antonio", "Juan", "Mauricio"]
for nombre in mi_lista:
    print(nombre)


Lo anterior quiere decir: Recorre cada cosa que esté en la lista de arriba, e imprimela.
Cada valor en la lista se le asignará a la variable nombre, la cual se imprime.

También podemos "emular" while desde un for, usando la instrucción range():



Otro ejemplo:
Tenemos 2 listas, ambas con 3 nombres. Pero yo quiero unir todos los nombres en la primera lista, ¿cómo puedo yo hacerlo? Fácil:
Código: python

lista1 = ["Pedro", "Pablo", "Jorge"]
lista2 = ["Luis", "Carlos", "Julio"]

for nombre in lista2:
lista1.append(nombre)

print(lista1)




El bucle for recorre cada elemento de la segunda lista, guardando ese elemento en la variable nombre, y después, agregarlo a la primera lista con la instrucción append()





Saludos!
#133
Python / Tipos de datos en Python
Mayo 14, 2015, 03:03:39 AM
Tipos de datos

Enteros (int):
Tipo de variable que almacena numeros enteros (sin punto decimal)
Ejemplos:

  • a = 1
  • b = 30
  • c = 123
  • d = 2024
Para comprobar si una variable es tipo entero, introducimos el siguiente comando:
Citartype(a)
Lo que hace es imprimir la clase de variable que se pasa. Si nosotros le pasamos la variable "a", imprimirá un <class 'int'>, lo que significa que es un entero.






Strings (str):
(También llamadas "cadenas") Conjunto de caracteres contenidos dentro de comillas (simples o dobles).
Ejemplos:

  • nombre = "Eduardo"
  • cadena = 'Hello, world!'

Concatenar cadenas:
Para concatenar strings, se toma una variable (o cadena), y se le añade el operador "+", que representa la concatenación (o unión de cadenas). Al final, se agrega la otra variable o cadena.
Ejemplo:
Código: python

cadena1 = "Hola, "
cadena2 = "mundo!"

cadena3 = cadena1 + cadena2

Y nos imprime: "Hola, mundo!"

Imprimir varias cadenas a la vez:
Si queremos imprimir una cadena varias veces, simplemente hacemos esto:
Código: python

cadena = "Hola"

print(cadena * 10)

Y nos imprime: "HolaHolaHolaHolaHolaHolaHolaHolaHolaHola" (osea, imprime 10 veces la cadena "Hola")

Cortar y leer una cadena:
A veces necesitamos buscar una palabra en especifico, así que podemos usar los siguientes métodos:
Código: python

str = 'Hola, mundo!

print (str)          # Imprime la cadena completa
print (str[0])       # Imprime solo el primer caracter
print (str[2:5])     # Imprime desde el 3er caracter hasta el 5to
print (str[2:])      # Imprime la cadena comenzando el 3er caracter

(Recuerden, el primer caracter es 0, así que al decir [2:], estamos diciendo que comenzará desde el 3er caracter.

+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0   1   2   3   4   5   6
-6  -5  -4  -3  -2  -1

Recorrer cada caracter de una cadena:
Podemos imprimir cada caracter contenido dentro de una cadena haciendo lo siguiente;
Código: text

cadena = "Hola, mundo!"

for x in cadena:    # Por cada caracter en la variable cadena...
    print(x)    # Imprimimos ese caracter.

Lo cual nos dará como resultado:
Citar
H
o
l
a
,

m
u
n
d
o
!





Listas (list):
Conjunto de datos contenidos dentro de corchetes, y separados por comas.
Ejemplo:

  • [1, 2, 3, 4, 5]
  • ["Hola", "mundo", "!"]
  • ["Hola", 23, "cadena", 139, "!", 4131]

Acceder a su contenido:
Código: python

lista = [1,2,3,4,5]
lista2 = [6,7,8,9,10]

print (lista)          # Imprime la primera lista
print (lista[0])       # Imprime el primer valor de la primera lista
print (lista[1:3])     # Imprime valores comenzando desde el 2do hasta el 4to.
print (lista[2:])      # Imprime comenzando desde el 3er valor
print (lista2 * 2)  # Imprime la segunda lista 2 veces
print (lista + lista2) #Concatena (o une) las 2 listas, lo cual imprime 1,2,3,4,5,6,7,8,9,10

Lo cual nos imprime:
Citar
[1, 2, 3, 4, 5]
1
[2, 3]
[3, 4, 5]
[6, 7, 8, 9, 10, 6, 7, 8, 9, 10]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]






Tuplas (tuple):
Conjunto de datos contenidos entre parentesis.
No se debe de confundir con las listas, ya que las tuplas son read-only, quiere decir que no se pueden modificar, solo leer.
Ejemplo:
Código: python

tuple = ( 'Pablo', 786 , 2.23, 'Juan', 70.2  )
tupla2 = (123, 'Martín')

print (tuple)           # Imprime la primera tupla
print (tuple[0])        # Imprime el primer valor de la primera tupla
print (tuple[1:3])      # Imprime desde el 2do valor hasta el 3er valor
print (tuple[2:])       # Imprime desde el 3er valor
print (tupla2 * 2)   # Imprime la segunda tupla 2 veces
print (tuple + tupla2) # Concatenamos las 2 tuplas e imprimimos


¿Qué no se puede hacer?
No podemos declarar un nuevo valor, ejemplo:
Código: python

tuple = ( 'Pablo', 786 , 2.23, 'Juan', 70.2  )
tuple[5] = "Mundo"

Nos lanza el siguiente error:
CitarTypeError: 'tuple' object does not support item assignment
Quiere decir: El objeto tupla no soporta nuevos valores.





Diccionarios (dict):
CitarEn otros lenguajes, a los diccionarios se los llama arrays asociativos, matrices asociativas, o también tablas de hash.
Colección no-ordenada de valores que son accedidos a traves de una clave.
Ejemplo:
Código: python

diccionario = {
"Hola": 1,
"mundo": 2,
"!": 3
}
print(diccionario)



Imprimiendo items:
Podemos imprimir la clave de un item haciendo lo siguiente:
Código: python

diccionario = {
"Hola": 1,
"mundo": 2,
"!": 3
}

print(diccionario["Hola"])

Y nos imprime: 1

Declarando nuevos valores:
Hay veces en que queremos crear un diccionario y añadirle valores nosotros mismos (a veces en tiempo de ejecución). Para eso, solo necesitamos hacer esto:
Código: python

diccionario2 = {} #Diccionario vacio
diccionario2["valor1"] = 50
diccionario2["valor2"] = 100

print(diccionario2)


Recorriendo el diccionario:
Código: python

diccionario = {
"Hola": 1,
"mundo": 2,
"!": 3
}

for valor in diccionario:
print(valor)

Citar
Hola
!
mundo


Hacer esto nos imprime los items, mas no las claves.
Para ello, hacemos esto:
Código: python

diccionario = {
"Hola": 1,
"mundo": 2,
"!": 3
}

for valor in diccionario:
print(valor, ":", diccionario[valor])

Citar
mundo : 2
Hola : 1
! : 3

Comprobar si existe un valor:
Para verificar si una clave se encuentra en el diccionario, es posible utilizar la palabra reservada "in":
Código: python

d = {
"x": 12,
"y": 7
}

if 'y' in d:
   print(d['y'])   # Imprime 7






Saludos!
#134
Se agradece el aportazo @You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login !
Descargando.

Saludos!
#135
Python / WebCreator 2.0
Mayo 12, 2015, 02:49:10 PM
Hola a todos!

Decidí hacerle una gui (aprovechando el "GUI Eterno" [Dross]) a un viejo programa que el usuario Subzer creó hace un tiempecito.
Link a su programa: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login


Funcionamiento:
El usuario ingresa las variables que la librería You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login usará para crear el archivo html.
En caso de exito, nos aparece un showinfo indicandonoslo, si no, un feo showerror nos aparecerá en nuestras pantallas.

El programa ya está testeado, y se le pueden añadir más cosas (como estilos CSS), pero preferí no modificarlo tanto.  ;D

2 archivos:

  • You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
  • You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Código: python

from tkinter import *
from tkinter.messagebox import showinfo, showerror
from webcreator import Pagina

class GUI(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.title("WebCreator v2.0")
        self.resizable(0,0)
        self.config(bg="black")

        topimg = PhotoImage(file="header.gif")
        t = Label(self, image=topimg, bg="white")
        t.image = topimg
        t.grid(row=0, column=0, columnspan=2, padx=5, pady=5)

        st = StringVar()
        st1 = StringVar()
        st2 = StringVar()
        st3 = StringVar()
        st4 = StringVar()
        st5 = StringVar()
        st6 = StringVar()
        st7 = StringVar()
        st8 = StringVar()
        st9 = StringVar()
        st10 = StringVar()
        st11 = StringVar()

        Label(self, text="Nombre de la página (html):", bg="black", fg="white").grid(row=1, column=0)
        self.page = Entry(self, textvariable=st, width=35)
        self.page.grid(row=1, column=1)

        Label(self, text="Título de la página:", bg="black", fg="white").grid(row=2, column=0)
        self.title = Entry(self, textvariable=st1, width=35)
        self.title.grid(row=2, column=1)

        Label(self, text="Color de fondo (pagina):", bg="black", fg="white").grid(row=3, column=0)
        self.color = Entry(self, textvariable=st2, width=35)
        self.color.grid(row=3, column=1)

        Label(self, text="Título <h1>:", bg="black", fg="white").grid(row=4, column=0)
        self.h1 = Entry(self, textvariable=st3, width=35)
        self.h1.grid(row=4, column=1)

        Label(self, text="Tamaño <h1> (0 - 200)", bg="black", fg="white").grid(row=5, column=0)
        self.tamh1 = Entry(self, textvariable=st4, width=35)
        self.tamh1.grid(row=5, column=1)

        Label(self, text="Color <h1> (ej: green):", bg="black", fg="white").grid(row=6, column=0)
        self.colorh1 = Entry(self, textvariable=st5, width=35)
        self.colorh1.grid(row=6, column=1)

        Label(self, text="URL de imagen central:", bg="black", fg="white").grid(row=7, column=0)
        self.url = Entry(self, textvariable=st6, width=35)
        self.url.grid(row=7, column=1)

        Label(self, text="Anchura de imagen:", bg="black", fg="white").grid(row=8, column=0)
        self.imganch = Entry(self, textvariable=st7, width=35)
        self.imganch.grid(row=8, column=1)

        Label(self, text="Altura de imagen:", bg="black", fg="white").grid(row=9, column=0)
        self.imgalt = Entry(self, textvariable=st8, width=35)
        self.imgalt.grid(row=9, column=1)

        Label(self, text="Texto (abajo de imagen):", bg="black", fg="white").grid(row=10, column=0)
        self.textdimg = Entry(self, textvariable=st9, width=35)
        self.textdimg.grid(row=10, column=1)

        Label(self, text="Tamaño de texto (img):", bg="black", fg="white").grid(row=11, column=0)
        self.tamtextimg = Entry(self, textvariable=st10, width=35)
        self.tamtextimg.grid(row=11, column=1)

        Label(self, text="Color de texto (img):", bg="black", fg="white").grid(row=12, column=0)
        self.colortextimg = Entry(self, textvariable=st11, width=35)
        self.colortextimg.grid(row=12, column=1)

        Button(self, text="Crear página!", command=self.create, bg="#545b58", fg="white").grid(row=13, column=0, columnspan=2, sticky=NSEW)

    def create(self):
        pagina = self.page.get()
        titulo = self.title.get()
        fondo = self.color.get()
        tam = self.tamh1.get()
        color = self.colorh1.get()
        text = self.h1.get()
        imagen1 = self.url.get()
        imagen2 = self.imganch.get()
        imagen3 = self.imgalt.get()
        textopeq1 = self.textdimg.get()
        textopeq = self.tamtextimg.get()
        textopeq2 = self.colortextimg.get()

        p = Pagina()
        r = p.crear(pagina, titulo, fondo, tam, color, text, imagen1, imagen2, imagen3, textopeq, textopeq1, textopeq2)
        if r == True:
            showinfo("Listo!", "Página %s creada!" % pagina)
        else:
            showerror("Error!", "La página no pudo ser creada")

GUI().mainloop()


You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login  (modificado para su uso en Python 3.4):
Código: python

#!/usr/bin/env python
####################
## PARA UNDERCODE ##
####################

#Version 1.5

body1 = "</body>"
html1 = "</html>"
title1 = "<title>"
title2 = "</title>"
style1 = "<style type='text/css'> <!-- body {background-color: "
style2 = ";} --> </style>"
tamano1 = "<center><font size='"
tamano3 = "' face='Arial' "
tamano2 = "' face='Impact' "
color1 = "color='"
color2 = " '>"
fuentend = "</font></center>"
img1 = "<center><img src='"
img2 = "' width='"
img3 = "' height='"
img4 = "'></center>"
saltolinea = "\n"


class Pagina():
    def crear(self, pagina, titulo, fondo, tam, color, text, imagen1, imagen2, imagen3, textopeq1, textopeq, textopeq2):
        create=open(pagina, 'w')
        create.write(body1 + saltolinea)
        create.write(html1 + saltolinea )
        create.write(title1 + titulo + title2 + saltolinea )
        create.write(style1 + fondo + style2 + saltolinea)
        create.write(tamano1 + tam + tamano2 + saltolinea)
        create.write(color1 + color + color2 + text + fuentend + saltolinea)
        create.write("<br>")
        create.write(img1 + imagen1 + img2 + imagen2 + img3 + imagen3 + img4 + saltolinea)
        create.write("<br>")
        create.write(tamano1 + textopeq1 + tamano3 + color1 + textopeq2 + color2 + textopeq + fuentend + saltolinea)
        create.write("<font size='5' face='Arial' color='white'><center><a href='http://underc0de.org/foro/index.php'>Underc[0]de Team.</a> </center></font><br>")
        create.close()

        return True



Fotos:




Archivos (e imagen): You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login


Saludos!
#136
Se agradece tan buen aporte WESKER12!
Me viene perfecto en estas fechas donde Android me llamará bastante la atención.  ;D

Saludos!
#137
Python / Re:[GUI] Cifrado Caesar
Mayo 11, 2015, 02:17:33 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Muy buenos aportes los dos. @WhiZ, muy chulo quedan las UI con Kivy, además por lo que veo es un proyecto FOSS. Me viene muy bien ahora que estoy dándole a Python.

Saludos.

tkinter deja mucho que desear. Pero claro, está mas orientado a proyectos pequeños y personales.
Y por lo que veo, Kivy (cada vez que lo pronuncio me recuerda a una barra de chocolate xD) está más orientado a proyectos de mayor envergadura, al igual que PyQT. Y checando un poco algunas imagenes, puedes hacer cosas bastante hermosas con el  :'( .
#138
Python / Re:[GUI] Cifrado Caesar
Mayo 11, 2015, 02:07:38 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Muy bueno Barlan! Muchas gracias por compartir tus trabajos con nosotros.

Aprovecho para dejar mi código hecho con kivy.

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Código: python
#/usr/bin/env python
# -*- encoding: utf8 -*-

from kivy.app import App
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty


class Ui_Cesar(GridLayout):
   
    textInputText = ObjectProperty()
    textInputOffset = ObjectProperty()

    def run(self, *args):
        self.text = self.textInputText.text
        self.offset = self.textInputOffset.text
        op = args[0].text.lower()

        error = self.check()
        if error:
            return self.notify(error, True)

        if op == "code":
            result = self.code()
        else:
            result = self.decode()

        self.notify(result)

    def check(self):
        try:
            text = self.text.lower()
            offset = int(self.offset)

            if offset < 0:
                offset = -(offset)

            while offset > 25:
                offset -= 26

            self.text = text
            self.offset = offset

        except TypeError as e:
            return "It is not possible to perform the operation."

        except ValueError:
            return "Offset must be an integer."

    def code(self):
        result = ""

        for char in self.text:
                value = ord(char)

                if 97 <= value <= 122:
                    offsetValue = value + self.offset

                    if offsetValue > 122:
                        offsetValue -= 26

                    offsetChar = chr(offsetValue)

                    result = result + offsetChar

                else:
                    result = result + char

        return result

    def decode(self):
        result = ""

        for char in self.text:
            value = ord(char)

            if 97 <= value <= 122:
                offsetValue = value - self.offset

                if offsetValue < 97:
                    offsetValue += 26

                offsetChar = chr(offsetValue)

                result = result + offsetChar

            else:
                result = result + char

        return result

    def notify(self, data, *args):
        box = GridLayout()
        box.cols = 1

        textInputResult = TextInput(text=data, size_hint=(1, 4))
        labelError = Label(text=data, size_hint=(1, 4))

        if args:
            box.add_widget(labelError)
        else:
            box.add_widget(textInputResult)

        buttonOk = Button(text="Ok", size_hint=(1, 1))
        box.add_widget(buttonOk)

        popup = Popup(title='Notification',
            content=box,
            auto_dismiss=False)

        buttonOk.bind(on_press=popup.dismiss)

        popup.open()


class Cesar(App):
    def build(self):
        return Ui_Cesar()


if __name__ == "__main__":
    c = Cesar()
    c.run()


cesar.kv
Código: python
Ui_Cesar:

<Ui_Cesar>:
    cols: 2

    textInputText: text
    textInputOffset: offset

    Label:
        text: "Text"
        size_hint: (1, 3)

    TextInput:
        id: text
        multiline: True
        size_hint: (1, 3)

    Label:
        text: "Offset"

    TextInput:
        id: offset
        password: False
        multiline: False

    Button:
        text: "Code"
        on_press: root.run(self)

    Button:
        text: "Decode"
        on_press: root.run(self)


Y un gif para continuar con tu estilo xD






Saludos!
WhiZ

"Un GIF vale más que mil imágenes" (xD)

Muy completo code el tuyo.
Kivy me recuerda al chocolate, y me dan ganas de lanzarme hacia el.
¿No tienes algo con qué empezar?  En estos momentos no estoy en "condiciones" para estar buscando en Google (tarea xD)

Saludos!
#139
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Yo entiendo que un "hack" es un "truco" o alguna trampa, por lo que un "hacker" sería alguien que conoce y aprovecha trucos y vulnerabilidades.
Siendo así, sería hackear desde montarle a tu portátil una antena WiFi externa a clonar la SIM de Bill Gates, pasando por la intercepción de señales de satélite con RTL-SDR o la construcción y mejora de impresoras 3D autoreplicables o los impresionantes aparatos de Diyouware.
Como "cracker" entiendo al enemigo, al que se dedica a hacer daño porque sí, a los que distribuyen software malicioso en GPlay, los organismos de inteligencia que dejan regalos en equipos Lenovo, etc.
Aunque supongo que es cuestión de criterios mi definición de hacker es algo a lo que llevo muchos años dándole vueltas.

Estás en lo correcto. También puede usarse el término "hackear", ya que se está aprovechando una "vulnerabilidad" en el candado para un fin específico (abrirla), usando algún conocimiento previo (práctica y experiencia).

Aunque igual se puede (quizás, opinión propoa) usar el término "crackear", ya que se está rompiendo un sistema de seguridad con fines (espero y que no) malignos.
#140
Python / [GUI] Cifrado Caesar
Mayo 11, 2015, 03:03:12 AM
Hola a todos!

Hice una GUI para cifrar y descifrar cadenas con el método de Caesar.
(me basé en el code de: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login | Si quieren más detalles de este método, visiten la página o visiten wikipedia. xD)

Etimología:
CitarEl cifrado César recibe su nombre en honor a Julio César, que, según Suetonio, lo usó con un desplazamiento de tres espacios para proteger sus mensajes importantes de contenido militar.


El programa está dividido en 2:
    - GUI
    - libreria You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
(el que nos cifrará/descifrará la cadena)

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login :
Código: python

# -*- coding:utf-8 -*-
__author__ = "Barlan"

from caesar import Caesar   # Cifrado Cesar
from tkinter import *

class GUI(Tk):
    def __init__(self):
        Tk.__init__(self)
        self.title("GUI | Cifrado Caesar")
        self.resizable(0,0)
        self.config(bg="black")

        self.i = IntVar()
        self.s = StringVar()

        Label(self, text="Cadena: ", bg="black", fg="white").grid(row=0, column=0)
        self.cadena = Entry(self, textvariable=self.s, width=30)
        self.cadena.grid(row=0, column=1)

        Label(self, text="Clave a usar: ", bg="black", fg="white").grid(row=1, column=0)
        self.clave = Entry(self, width=20)
        self.clave.grid(row=1, column=1)

        self.rc = Radiobutton(self, text="Encriptar", variable=self.i, value=1, command=self.toCaesar, bg="black", fg="white")
        self.rc.grid(row=2, column=0)

        self.rd = Radiobutton(self, text="Desencriptar", variable=self.i, value=2, command=self.toCaesar, bg="black", fg="white")
        self.rd.grid(row=2, column=1)

        Label(self, text="Resultado:", bg="black", fg="red", relief=RIDGE).grid(row=3, column=0, columnspan=2)

    def toCaesar(self):
        if self.i.get() == 1:
            cadena = self.cadena.get().upper()
            clv = int(self.clave.get())
            r = Caesar()
            a = r.cifrar(cadena, clv)

            Label(self, text=a, bg="black", fg="white", relief=RIDGE).grid(row=4, column=0, columnspan=2, sticky=NSEW)

        elif self.i.get() == 2:
            cadena = self.cadena.get().upper()
            clv = int(self.clave.get())
            r = Caesar()
            a = r.descifrar(cadena, clv)

            Label(self, text=a, bg="black", fg="white", relief=RIDGE).grid(row=4, column=0, columnspan=2, sticky=NSEW)

GUI().mainloop()


You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login :
Código: python

# -*- coding: utf-8 -*-

class Caesar():
    def __init__(self):
        # Lista de caracteres a usar.
        self.caract = "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ0123456789"

    def cifrar(self, cadena, clv):
        '''
        Función que cifrará nuestro mensaje, a partir de la cadena y clave proporcionada.
        '''
        resultado = ""
        for letra in cadena:
            if letra == " ":
                resultado += " "
            else:
                op = self.caract.find(letra) + clv
                modulada = int(op) % 37
                resultado = resultado + str(self.caract[modulada])

        return(resultado)

    def descifrar(self, cadena, clv):
        '''
        Función que descifrará nuestro mensaje cifrado, a partir de una clave y cadena proporcionada.
        '''
        resultado = ""
        for letra in cadena:
            if letra == " ":
                resultado += " "
            else:
                op = self.caract.find(letra) - clv
                modulada = int(op) % 37
                resultado = resultado + str(self.caract[modulada])

        return(resultado)





Ejemplo de uso:


Si vemos, cada letra nueva se encuentra a 2 letras distantes de la original.

B + 2 = D
A + 2 = C
R + 2 = T
L + 2 = N
A + 2 = C
N + 2 = O

Lo mismo sucede al descifrarla, solo que ahora "retrocedemos" de caracteres:

D - 2 = B
C - 2 = A
T - 2 = R
N - 2 = L
C - 2 = A
O   2 = N



Saludos!