elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


  Mostrar Mensajes
Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14
51  Programación / Scripting / ¿Les dais uso a las property en Python? en: 7 Enero 2017, 21:13 pm
Hola de nuevo...

Igual la pregunta es una herejia. Si es asi, pido disculpas. Pero creo, que ha dia de hoy, aun no le encuentro un uso sustancial con las clases (me refiero al uso de las propiedades).

Supongo que como todo el mundo al estudiar la POO, uno se enfoca con los atributos, metodos, herencia, sobrecarga de metodos, polimorfismo y un poco menos encapsulacion. Digo un poco menos "encapsulacion" por que Python tampoco trata los metodos y atributos de forma privada al cien por cien.

Por lo que entiendo, una propiedad o property dentro de una clase, significa usar un metodo como si fuera un atributo. Pero cuando pasamos a llamar a ese metodo usando la propiedad solo obviamos los parentesis. Es por eso que tampoco veo tanto ahorro.

Pongo los ejemplos clasicos de una clase Circulo. Los dos primeros ejemplos son semejantes. Osea, en el primer ejemplo usamos el decorador @property. En el segundo, la funcion interna property()

1er EJEMPLO:

Código
  1. class Circulo_1:
  2.  
  3.    def __init__(self, radio):
  4.        self.radio = radio
  5.  
  6.    @property
  7.    def dameArea(self):
  8.        return 3.14159 * (self.radio ** 2)

2do. EJEMPLO:

Código
  1. class Circulo_2:
  2.  
  3.    def __init__(self, radio):
  4.        self.radio = radio        
  5.  
  6.    def dameArea(self):
  7.        return 3.14159 * (self.radio ** 2)
  8.  
  9.    area = property(dameArea)

Y por ultimo sin usar las propiedades:

Código
  1. class Circulo_3:
  2.  
  3.    def __init__(self, radio):
  4.        self.radio = radio        
  5.  
  6.    def dameArea(self):
  7.        return 3.14159 * (self.radio ** 2)


Instanciamos y pasamos a correr el codigo en cada ejemplo:

Código
  1. # instanciamos:
  2. c1 = Circulo_1(20)
  3. c2 = Circulo_2(20)
  4. c3 = Circulo_3(20)
  5.  

Código
  1. c1.dameArea
  2. 1256.636
  3. c2.area
  4. 1256.636
  5. c3.dameArea()
  6. 1256.636
  7.  

En el tercer caso, sin usar property, solo hemos de poner dos parentesis y punto. Tampoco lo veo nada del otro mundo. En el segundo ejemplo, podemos crear un variable asignandole los valores de metodo usando la funcion property(). Y en el primer caso, usando un decorador.

Supongo que muchos programadores avanzados le daran uso a las propiedades. Y mas aun con los getters y setters. Pero si no usamos atributos o metodos semi-privados ¿Es necesario usar las propiedades en python?

52  Programación / Scripting / Re: (python) como ordenar matriz? en: 6 Enero 2017, 16:36 pm
Tampoco es mala cosa crear o definir una matriz sin utilizar una funcion. Osea, usando las listas por comprension (en el ejemplo 5 filas por 3 columnas):

Código
  1. matriz = [[0] * 3 for i in range(5)]

Salida:

Código
  1. matriz
  2. [[0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0], [0, 0, 0]]

O tambien:

Código
  1. filas = 5
  2. columnas = 3
  3. matriz = [[0] * columnas for i in range(filas)]

53  Programación / Scripting / Re: lista a traves de generador en: 31 Diciembre 2016, 19:55 pm
Tambien puedes utilizar el generador como se utilizan las listas por comprension (En el caso de generadores se usan parantesis).

Código
  1. generador = (elem for elem in range(1, 11))

Puedes accedar a sus elementos con la funcion integrada en Python next().

Código
  1. next(generador)
  2. next(generador)
  3. next(generador)

SALIDA:

1
2
3


O recorrerlo integramente mediante un ciclo for:

Código
  1. for i in generador:
  2.    print(i)

SALIDA:

1
2
3
4
5
6
7
8
9
10

Tambien se pueden hacer filtros con los datos que se van generando. Por ejemplo, solo numeros pares:

Código
  1. generador = (elem for elem in range(1, 11) if elem % 2 is 0)

SALIDA:

Código
  1. next(generador)
  2. 2
  3. next(generador)
  4. 4
  5. next(generador)
  6. 6
  7. next(generador)
  8. 8
  9. next(generador)
  10. 10
  11. next(generador)
  12.  
Traceback (most recent call last):
  Python Shell, prompt 7, line 1
builtins.StopIteration:

Si, al final te saldra la advertencia de StopIteracion. Ya que el generador se ha vaciado. Aunque esto tambien se puede hacer con un range e indicando su paso a la salida de cada elemento.

Tambien tienes la opcion con la funcion iter()

Código
  1. a = (range(1, 101))
  2. b = iter(a)

SALIDAS:

Código
  1. next(b)
  2. 1
  3. next(b)
  4. 2
  5. next(b)
  6. 3
  7.  

(Si no usas la el IDE interactivo deberas aplicar la funcion print() para mostrar los resultados con next().

Espero que te haya ayudado. Saludos!  :rolleyes:



54  Foros Generales / Dudas Generales / ¿Se es un bicho raro si se programa en consola? en: 31 Diciembre 2015, 13:37 pm
Hola!

Bueno, esta claro que para gustos los colores. Yo suelo programar en Python, pero como un hobby y tal. Seguramente, que si uno se dedica a esto (programacion) de forma profesional, necesitara usar GUIs y ventanas. Osea, interfaces mas majos. La cosa es, de si uno puede hacer buenos programas en consola. Tampoco me refiero que sea solo linea de comandos. Si no, hacer menus y cambios de pantalla utilizando solo codigo. Sin utilizar ventanas, botones, lineas de desplazamiento, etc...

Es que, a veces veo,  que para poner un simple 'Hola Mundo' se debe picar relativamente bastante codigo para que solo se muestre una ventana. Supongo que porque se utilza la POO.

Resumiendo ¿Se es un raro por disfrutar la programacion espartana?
55  Programación / Scripting / Re: [Aporte] Aprende a programar juegos Python en: 5 Septiembre 2015, 14:03 pm
gracias :) aunque es algo basico pero no veo que toque modulos como pygame y todo lo hace desde la consola
esta bien para el que nunca haya programado y quiera aprender con ejemplos y juegos

Bueno, es que de eso se trata. De no empezar la casa por el tejado. Y en programacion muchas veces sucede eso. De todas formas, si que toca pygame. Aunque sea en sus primeros pasos. Mira a partir del capitulo 17.

Esta claro que en este tipo de libros no te van a enseñar hacer un juego triple A. Se trata de eso, de coger las bases y tal.

Saludos!
56  Programación / Scripting / [Aporte] Aprende a programar juegos Python en: 5 Septiembre 2015, 11:41 am
Pues eso...

Supongo que es un libro que conocereis todos. Poco a poco,  su autor lo ha ido traduciendo a la lengua de Cervantes. Y ahora, creo,  esta mas o menos completo.

A ver si se anima y traduce tambien los otros que tiene. Ya que pintan muy bien.
Desde aqui doy las gracias a su autor por la iniciativa.

Inventa tus propios juegos de computadora con Python
http://inventwithpython.com/es/
57  Programación / Scripting / Re: ¿Como obtener una combinacion mediante su indice? en: 19 Julio 2015, 12:02 pm
Si, a mi me tarda 4 segundos el último código que publiqué (redondeando los

Determina si el valor "count" es un múltiplo de 1.000.000

¿Por qué 1.000.000 y no 100.000?, para reducir la escritura en el buffer y así incrementar el rendimiento general.



Ah, vale. Aunque no entiendo de todo el proceso. Veo que modificando este valor, el contador va mas deprisa o despacio. Dicho linea la he modificado a:

Código
  1. elif (count%100000000 == 0):

Para un testeo de:

Código
  1. if (count == 1.481076071314056e+16):

Ahora la salida por consola va con una cuenta de 100.000.000. Igual tengo que abortar el proceso, claro. Si todo fuera bien, me tendria que mostrar la ultima combinacion de esas 1.481076071314056e+16.

Me gusta la idea que has mostrado. Ya que de esa forma, no se te inunda la pantalla de tuplas y en cambio aparece como un contador. Lo siguiente seria crear el codigo para que reste las combinaciones que van apareciendo con el total de las mismas. Asi, sabriamos lo que falta para que termine el proceso.

Por cierto, para que este numero:  1.481076071314056e+16 lo podamos dejar en entero con hacer
Código
  1. int(1.481076071314056e+16)
  2. >>> 14810760713140560
es suficiente ¿No?


Saludos!
58  Programación / Scripting / Re: ¿Como obtener una combinacion mediante su indice? en: 18 Julio 2015, 19:55 pm
Si, pero en esos casos el tiempo de calculo es minimo...10 segundos, 20 segundos, incluso horas.

Pero imagina si has de tratar con combinaciones que arrojan cifras como esta:

2.245100430901328e+16

Es decir, 200 numeros en combinaciones de 10 grupos. Ahi, da igual que imprimas por pantalla, que no. Seguramente tardaria años en arrojar algun resultado.

Ya que cuando subimos un poco el numero de grupos,  las combinaciones son intratables.

Por cierto, a mi me tarda unos diez segundos el calculo,  que te tarda cuatro a ti. Eso ya es cosa de ordenadores, supongo.

Tengo una duda con esta linea:
Código
  1. elif (count%1000000 == 0):

¿Que hace realmente? Esta claro que trata de hallar el resto de la operacion ¿Pero el parametro 1000000 es siempre fijo?
59  Programación / Scripting / Re: ¿Como obtener una combinacion mediante su indice? en: 18 Julio 2015, 19:03 pm

Te entiendo perfectamente, pero imprimir en la consola implica un mayor, mucho mayor tiempo de procesado.

Lo que se suele hacer en estos casos con algoritmos "pesados" es mostrar una barra o texto de progreso indeterminado (ej: "Calculating values, please wait..."), ya que, o prescindes de la información visual en pantalla, o prescindes del rendimiento del algoiritmo en general, ¡tú decides a que darle mayor prioridad!.

Saludos!

Ok. Supongo,  que dependiendo del ordenador, a mi me puede tardar 18 segundos y en otro mas potente, 1 segundo o menos.

RECTIFICACION:

No puedo poner nunca que me de la combianacion 100.000.000. Por el simple hecho que 100 numeros en grupos de 5, da como maximo 75287520 combinaciones.

En todo caso, por ejemplo, ponemos:

Código
  1. if indice == 75000000:
  2.        print('La combinacion con indice', indice, 'es', x)

Y si nos arroja:

Código
  1. La combinacion con indice 75000000 es (66, 77, 86, 90, 100)
  2. 0:00:20.209156
60  Programación / Scripting / Re: ¿Como obtener una combinacion mediante su indice? en: 18 Julio 2015, 18:27 pm
1. La razón de que el código de arriba demore siglos es por que estás imprimiendo cada valor en el buffer de salida de la consola (stdOut), mientras eso sea así no puedes pretender que la respuesta sea "inmediata". elimina el "print" y resuelto.



2. Puedes disminuir considerablemente el tiempo de "respuesta" omitiendo la escritura en la consola, por ejemplo añadiendo los valores a una variables, y luego, si quieres, imprimir una única vez en la consola:

Muchas gracias. Desde luego que mejora considerablemente. De hecho he probado que halle la combinacion 100.000.000 y ha tardado 18 segundos en darla.

El script del punto 2,  lo probare. Ya que aun no sabia que se podia meter la funcion enumerate en una variable.

De todas formas, creo recordar, que probe alguna vez algo parecido a lo que comentas. Osea, que no imprimiera toda la iteracion de las combinaciones por pantalla. Pero claro, como la consola se quedaba en espera no sabia si iba a tardar un minuto en darme el resultado o en un mes  :rolleyes: En cambio, al imprimir por pantalla sabes cuantas combinaciones faltan para el testeo. Pero bueno, de momento me conformo con tu idea.

Muchas Gracias!  :D

Páginas: 1 2 3 4 5 [6] 7 8 9 10 11 12 13 14
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines