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 - Yidu

#31
Hola de nuevo!

Quizás recomendaríais otro tipo de modulo para este tipo de impresiones. Bueno, me refiero a mostrar gráficas y salida de datos. Pygame se suele utilizar para el tema de videojuegos y multimedia. Algo tan simple como mostrar la salida de un ciclo FOR (u otras salidas de datos) no  me llegaba a aclarar. En todo caso, me gustaría saber vuestra opinión, si es la forma correcta de hacer esta implementación.

Creo un ciclo para mostrar 40 números. Pero como llega un momento que la ventana definida en pygame se queda pequeña, hemos de crear otra columna para que se muestre el resto de números. Lo ideal seria que se creasen tantas columnas como números del ciclo. Claro esta que llegaría un momento que también se llegaría al limite de esa misma ventana ¿Se debería crear una nueva ventana y perderíamos la anterior? ¿Pygame no tiene la barra de desplazamiento como las ventanas de windows?

Os dejo el código que he creado:
(Es un esquema básico o plantilla para mostrar el ejemplo)

Código (python) [Seleccionar]
import pygame
import sys
pygame.init()

pantalla = pygame.display.set_mode((800, 600))
fuente = pygame.font.SysFont('Comic Sans MS', 20, True, False)

while True:
 
   for evento in pygame.event.get():
       if evento.type == pygame.QUIT:
           pygame.quit()
           sys.exit()            
   
   pantalla.fill((255, 255, 255))
   
   # Coordenadas iniciales impresion de columnas
   y = 0
   x = 0
   for numero in range(1, 41):        
       imprime_numero = fuente.render(str(numero), True, (0, 0, 0))
       pantalla.blit(imprime_numero, (x, y))
       y += 20
       # Si la coordenada 'y' llega a 400 se crea una nueva columna
       if y == 400:
           x = 40
           y = 0                  
   
   pygame.display.flip()



Si lo ejecutáis se crea una columna del 1 al 20 y otra del 21 al 40.
¿Es la forma correcta de imprimir un ciclo FOR en pygame?

Saludos!

EDITO:

Con esta modificación en la linea 26 se crean mas columnas en base a mas números en el ciclo:
Código (python) [Seleccionar]
x += 40
#32
Hola de nuevo...

Estudiando el tema de los nodos y sus recorridos me surgio una duda con el bucle while. Para entrar en un bucle while la condicion debe ser verdadera. Hasta ahi nada nuevo. Osea, solo que pongamos:

Código (python) [Seleccionar]
while 1:
   pass


Entramos en el bucle. Y esto es por que 1 es True.

Código (python) [Seleccionar]
1 == True
True


Pero...

Código (python) [Seleccionar]
2 == True
False


No devuelve False ¿Entonces como es que se entra en el bucle while?

Código (python) [Seleccionar]
x = 0
while 2:
   print('hola')
   x += 1
   if x == 5:
       break
   


Con este codigo se ejecuta el bucle. Seguro que la duda es muy tonta y alguna explicacion tiene que se me ha pasado por alto.

El codigo del nodo es el tipico:


Código (python) [Seleccionar]
class Nodo:
    def __init__(self, carga = None, prox = None):
        self.carga = carga
        self.prox = prox
       
    def __str__(self):
        return str(self.carga)


n4 = Nodo(4)
n3 = Nodo(3, n4)
n2 = Nodo(2, n3)
n1 = Nodo(1, n2)



def recorrer(nodo):
    print(nodo)
    while nodo:
        print(nodo)
        nodo = nodo.prox
       
# Aqui podemos ver como n2 vale 2 y si es false ¿Por que se entra en while?     
recorrer(n2)
#33
Cita de: engel lex en  4 Febrero 2017, 15:23 PM
no creo que estés claro en estos temas

es parte es como decir "es dificil distinguir cuando irme en carro o meterme a bañar"

la recursividad no siempre es buena practica... si no está bien calculada y el ciclo es muy profundo, el stack se desbordará y el programa no sabrá como volver... esto es un "el programa se detuvo inesperadamente"

Bueno, igual me he expresado bien. No me referia a mezclar o comparar conceptos. Es decir, POO y recursividad. Sino, que a veces, no es necesario utilizar la POO. Como otras veces tampoco es necesario utilizar la recursividad. Porque suele pasar que cuando se cambia de paradigma solo vemos soluciones utilizando ese paradigma. E igual no es correcto.
#34
Hombre, también depende del tiempo que tenga cada uno. Si se dedica solamente a estudiar y se tiene mucho tiempo libre se puede abarcar mucho. Pero si cada dia se dispone de una hora o dos, es mejor profundizar sobre el tema que le interesa. A veces, hay mucha gente, que se infla la boca diciendo que domina venticinco lenguajes de programación. Es como el que sabe 30 idiomas o no sale de su casa. Llenarse la cabeza de cosas que no va utilizar lo veo un contrasentido.

Ahora bien, si uno domina bien un lenguaje y quiere aprender algun otro, no lo veo mal. Pero aprender 100 y ninguno de ellos bien, si lo encuentro funesto.

Lo suyo es centrarse profundamente en un lenguaje (donde uno se sienta agusto) y mas adelante probar nuevas aventuras.
#35
Ya sé que esta pregunta abre un debate que igual no lleva a ningún lado. Pero veo que hay muchos partidarios de la recursividad y otros que no tanto. Es como cuando se aplica la POO en todos los códigos, cuando igual, no hace falta. Pero claro, a veces es difícil distinguir cuando usar la POO o la recursividad. Leo a programadores (calificados de expertos) que argumentan que todo lo que se puede hacer con recursividad se puede aplicar con iteración. Y en caso de duda ¿Por dónde decantarse?

Donde veo que utilizan mucho el tema de la recursividad es con la IA o el tema de árboles y grafos.  Ósea, con estructuras de datos no lineales. La cuestión, es, si con iteración se podrían conseguir los mismos resultados o sería más complicado.

Quizás soy la única persona en la tierra que lee más fácil la iteración que la recursividad. Porque se suele argumentar que el código recursivo es más legible y elegante (aquí me refiero a Python) . No sé, a mí siempre se me ha hecho más enrevesado. Pero claro, eso ya es algo subjetivo.

Supongo, que a fuerza de programar, esas dudas se disipan. Y casi instintivamente sabe uno cuando aplicar la recursividad y cuando no.

Pues eso...¿Utilizáis mucho la recursividad? A mi es uno de los conceptos que más pereza me ha dado siempre por estudiar. O quizás, desde mi ignorancia, lo he dajado en segundo plano.
#36
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
#37
Cita de: explorer en 28 Enero 2017, 18:04 PM
A mi me salen muchas combinaciones...

$ 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.
#38
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 (python) [Seleccionar]
from itertools import combinations
numeros = range(0, 10)
for x in combinations(numeros, 3):
print(x)


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 (python) [Seleccionar]
from itertools import permutations
numeros = range(0, 10)
for x in permutations(numeros, 3):
print(x)


#39
Cita de: PUAROT en 15 Enero 2017, 00:25 AM
Cuando importas módulos lo haces de la forma:
from modulo import *

Si es así prueba a importar las partes del modulo que utilizas, aunque sean varias del estilo :
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 (python) [Seleccionar]
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.

#40
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!