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

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: 1 2 3 4 [5] 6 7 8 9 10 11 12 13 14
41  Programación / Scripting / Re: Como puedo tener todas las combinaciones de letras? en: 31 Enero 2017, 19:06 pm
Yo soy de la misma idea que engel lex. Lo suyo es saber bien que quieres hacer y profundizar mas en el tema de los bucles e iteradores. La gracia y morbo de la programacion, es crearte pequeños retos para luego superarlos. Y creeme, es mas gratificante. Si te dan el codigo hecho no crearas esos mecanismos propios para la resolucion de problemas. Aunque yo tambien, a veces, he preguntado cosas en los foros. Y cuando me han dado la solucion, no tiene tanta gracia que cuando uno la consigue por si mismo. Pero claro, un pequeña ayuda siempre es necesaria.

Te pongo un enlace dondo tocan estos temas. Sobre el modulo itertools. Por cierto, mirate bien dicho blog que es oro puro sobre python. Casi, una guia de referencia.

http://python-para-impacientes.blogspot.com.es/2015/08/bucles-eficientes-con-itertools.html
42  Programación / Scripting / Re: Como puedo tener todas las combinaciones de letras? en: 29 Enero 2017, 11:39 am
A mi me salen muchas combinaciones...

Código:
$ perl6 -e 'my @a = ("A".."Z", 0..9).flat; say (@a X @a X @a).elems'
46656

Bueno...a eso se le llama explosion combinatoria. Dependiendo el conjunto de numeros o letras que queramos combinar, el asunto se hace inabordable. Incluso si queremos almacenar dichas combinaciones en algun fichero. Creo que no tardaria mucho en llenarse el disco duro.

En el ejemplo que puse con 10 numeros en grupos de 3 salen 120 combinaciones.
43  Programación / Scripting / Re: Como puedo tener todas las combinaciones de letras? en: 25 Enero 2017, 19:31 pm
No estaria de mas que revisaras el modulo itertools. No se tu nivel de programacion y pretender crear un algoritmo de este tipo sin usar modulos lo veo complicado.

Si quieres crear las combinaciones en grupos de tres, por ejemplo, sera asi:

Código
  1. from itertools import combinations
  2. numeros = range(0, 10)
  3. for x in combinations(numeros, 3):
  4. print(x)
  5.  

Salida:

(0, 1, 2)
(0, 1, 3)
(0, 1, 4)
(0, 1, 5)
(0, 1, 6)
(0, 1, 7)
(0, 1, 8)
(0, 1, 9)
(0, 2, 3)
(0, 2, 4)
(0, 2, 5)
(0, 2, 6)
(0, 2, 7)
(0, 2, 8)
(0, 2, 9)
(0, 3, 4)
(0, 3, 5)
(0, 3, 6)
(0, 3, 7)
(0, 3, 8)
(0, 3, 9)
(0, 4, 5)
(0, 4, 6)
(0, 4, 7)
(0, 4, 8)
(0, 4, 9)
(0, 5, 6)
(0, 5, 7)
(0, 5, 8)
(0, 5, 9)
(0, 6, 7)
(0, 6, 8)
(0, 6, 9)
(0, 7, 8)
(0, 7, 9)
(0, 8, 9)
(1, 2, 3)
(1, 2, 4)
(1, 2, 5)
(1, 2, 6)
(1, 2, 7)
(1, 2, 8)
(1, 2, 9)
(1, 3, 4)
(1, 3, 5)
(1, 3, 6)
(1, 3, 7)
(1, 3, 8)
(1, 3, 9)
(1, 4, 5)
(1, 4, 6)
(1, 4, 7)
(1, 4, 8)
(1, 4, 9)
(1, 5, 6)
(1, 5, 7)
(1, 5, 8)
(1, 5, 9)
(1, 6, 7)
(1, 6, 8)
(1, 6, 9)
(1, 7, 8)
(1, 7, 9)
(1, 8, 9)
(2, 3, 4)
(2, 3, 5)
(2, 3, 6)
(2, 3, 7)
(2, 3, 8)
(2, 3, 9)
(2, 4, 5)
(2, 4, 6)
(2, 4, 7)
(2, 4, 8)
(2, 4, 9)
(2, 5, 6)
(2, 5, 7)
(2, 5, 8)
(2, 5, 9)
(2, 6, 7)
(2, 6, 8)
(2, 6, 9)
(2, 7, 8)
(2, 7, 9)
(2, 8, 9)
(3, 4, 5)
(3, 4, 6)
(3, 4, 7)
(3, 4, 8)
(3, 4, 9)
(3, 5, 6)
(3, 5, 7)
(3, 5, 8)
(3, 5, 9)
(3, 6, 7)
(3, 6, 8)
(3, 6, 9)
(3, 7, 8)
(3, 7, 9)
(3, 8, 9)
(4, 5, 6)
(4, 5, 7)
(4, 5, 8)
(4, 5, 9)
(4, 6, 7)
(4, 6, 8)
(4, 6, 9)
(4, 7, 8)
(4, 7, 9)
(4, 8, 9)
(5, 6, 7)
(5, 6, 8)
(5, 6, 9)
(5, 7, 8)
(5, 7, 9)
(5, 8, 9)
(6, 7, 8)
(6, 7, 9)
(6, 8, 9)
(7, 8, 9)

Aunque debes tener cuidado de cuantos grupos de numeros quieres las combinacion. Ya que podria tardar bastante el proceso. Y con la letras es parecido. De todas formas no se si confundes permutaciones con combinaciones.
Deberias, entonces, cambiar el codigo asi:

Código
  1. from itertools import permutations
  2. numeros = range(0, 10)
  3. for x in permutations(numeros, 3):
  4. print(x)
  5.  

44  Programación / Scripting / Re: Error al importar modulos standard con cx_freeze [PYTHON] en: 15 Enero 2017, 18:36 pm
Cuando importas módulos lo haces de la forma:
Código:
from modulo import *

Si es así prueba a importar las partes del modulo que utilizas, aunque sean varias del estilo :
Código:
from modulo import función


Hola!

Bueno, he importado asi los modulos por que asi lo decia la documentacion y ejemplos de cx_freeze. En cambio, en el script que queria convertir a *.exe, utilizaba el:

Código
  1. import pickle

De todas formas, pienso, que debe de ser algo que no configuro bien. Por que he visto algunos ejemplos de gente convirtiendo un juego hecho con pygame a ejecutable (exe). Y claro, el script de cx_freeze era bastante mas extenso.

45  Programación / Scripting / Re: ¿Sobrecargar las funciones standard o crear nuestros propios metodos? [PYTHON] en: 15 Enero 2017, 18:31 pm
Gracias por el consejo. Yo pienso mas o menos parecido.

Aunque todavia no domino el tema de las clases en Python, soy mas partidario de usar las funciones standard y que ellas operen con los objetos. Esta claro, que para programadores avanzados, quizas las builtins se le quedaran cortas. Pero no es mi caso. Dudo que haya mucha gente que domine Python al cien por cien. Al poder utilizar tres paradigmas distintos de programacion, a veces dificil cual de ellos escoger para nuestros scripts.

Un saludo!
46  Programación / Scripting / Error al importar modulos standard con cx_freeze [PYTHON] en: 14 Enero 2017, 21:16 pm
Hola de nuevo!

Estoy haciendo alguna prueba con cx_freeze. Osea, para convertir archivos py a exe.

Con scripts sencillos me funciona. Por ejemplo (prueba_2.py):

Código
  1. for i in range(1, 100):
  2.    print(i)
  3. input()

Luego creo el script de cx_freeze (setup.py):

Código
  1. from cx_Freeze import setup, Executable
  2.  
  3.  
  4. setup(name = "Plantilla",
  5.      version = "0.1",
  6.      description = "Crear ejecutable",  
  7.      executables = [Executable("prueba_2.py")])

Esto me crea la carpeta build dentro del directorio de python. Y dentro de la carpeta build tengo el ejecutable prueba_2.exe y alguna carpeta mas.

El problema viene, cuando en algun script que creo, importo algun modulo. Por ejemplo, pickle. Creia que con esto bastaba:

Código
  1. from cx_Freeze import setup, Executable
  2.  
  3. build_exe_options = {"packages": ["pickle"]}
  4.  
  5. setup(name = "Plantilla",
  6.      version = "0.1",
  7.      description = "Crear ejecutable",  
  8.      options = {"build_exe": build_exe_options},
  9.      executables = [Executable("ejemplo.py")])

Pero no funciona. He leido algunos tutoriales pero sigue sin funcionar. Para construir el exe hago la tipica llamada:

Código
  1. C:\Python34>py setup.py build

Hay alguna plantilla de cx_freeze para poder utilizar los modulos standard de Python? En mi caso, la version 3.4
47  Programación / Scripting / ¿Sobrecargar las funciones standard o crear nuestros propios metodos? [PYTHON] en: 9 Enero 2017, 19:26 pm
Hola!

Profundizando mas en el tema de las clases, intento conocer un poco mas los operadores y metodos que seran utiles usando la sobrecarga.

La sobrecarga de operadores esta mas o menos clara:

Código
  1. class Persona:
  2.    def __init__(self, nombre, edad):
  3.        self.nombre = nombre
  4.        self.edad = edad
  5.        self.inventario = '1,2,3,4,5,6,7'.split(',')
  6.  
  7.    # metodos aritmeticos
  8.  
  9.    def __add__(self, other):
  10.        # suma
  11.        return self.edad + other.edad    
  12.  
  13.    def __sub__(self, other):
  14.        # resta
  15.        return self.edad - other.edad
  16.  

Para sobrecargar la funcion standard de python pow(a, b):

Código
  1. def __pow__(self, valor):
  2.        # potenciacion
  3.        return self.edad ** valor

Luego instanciariamos:

Código
  1. p1 = Persona('Juan', 30)
  2. p2 = Persona('Ivan', 20)

Y probariamos las sobrecargas:

Código
  1. print(p1 + p2) # 50 (__add__)
  2. print(p1 - p2) # 10 (__sub__)
  3. print(p1 ** 2) # 900 (__pow__)

¿Pero como se sobrecargaria, por ejemplo, la funcion standard len()? Seria para comprobar el numero de elementos del atributo self.inventario. Creo que asi seria erroneo:

Código
  1. def __len__(self):
  2.        return len(self.inventario)

Aunque funcionar, funciona...

Código
  1. print(len(p1)) # 7

La duda es si sobrecargar funciones standard de Python consiste en meter la misma funcion dentro del metodo sobrecargado. Es que visto asi, suena a redundancia ¿No?

Por que cuando queremos utilizar la salida de print mediante la sobrecarga hacemos:

Código
  1. def __str__(self):
  2.        # se ejecuta mediante print()
  3.        return 'Nombre: {}'.format(self.nombre)

No esto:

Código
  1. def __print__(self):
  2.        # se ejecuta mediante print()
  3.        return 'Nombre: {}'.format(self.nombre)

Resumiendo, ¿Es mejor crear nuestros propios metodos y meter dentro de ellos las funciones standard?

Saludos!  :)
48  Programación / Scripting / Re: ¿Les dais uso a las property en Python? en: 8 Enero 2017, 12:14 pm

hay elementos de más en el modelo POO que, si bien tienen su funcionalidad, aveces en mi opinión, esa funcionalidad está rebuscada  :rolleyes: .


Yo opino mas o menos igual. No es raro ver algun videotutorial por internet (y se lian mas que un gato con un ovillo de lana) donde demuestran la eficiencia y utilidad de alguna de estas cosas. Hace poco vi la demostracion para decorar una simple funcion. No se, vi demasiado codigo para algo tan simple. Aunque claro, cada cual tendra su opinion. Supongo para programas cortos toda esta programacion avanzada no se necesite. Por eso tampoco quiero decir que sea mala cosa este tipo de decoraciones en algunos casos.
49  Programación / Scripting / Re: ¿Les dais uso a las property en Python? en: 8 Enero 2017, 12:05 pm

¿Qué es más legible?
Código
  1. x.value = x.value + 5
o
Código
  1. x.setValue(x.getValue() + 5)

Hombre...yo veo mas legible el primer codigo. En todo caso, nunca me ha convencido el hecho de este tipo de decoraciones. Incluso en el tema de las funciones. Lo que se llama decorar una funcion. A mi modo de ver, hace el codigo mas confuso. Pero claro, seguramente en un nivel mas avanzado de programacion deben ser utiles.

Y haciendo caso al zen de Python: Simple mejor que complejo.

50  Programación / Scripting / Re: Borrar consola de Python en Windows 10 en: 7 Enero 2017, 21:16 pm
Como ha dicho el compañero de arriba es lo que se suele usar. En el caso de salida por consola. Si utilizas editores ya es otro asunto.

En el script que te paso, cada vez que pulsas una tecla, se borra el numero anterior y aperece el nuevo del ciclo for.

Código
  1. from os import system
  2.  
  3. for i in range(1, 20):
  4.    print(x)
  5.    input()
  6.    system('cls')
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