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ú

Temas - Yidu

#1
Hola!

Estoy probando el match...case de la nueva versión de python 3.10. Y aunque se comporta según lo esperado (semejante a otros lenguajes), no se si esta sintaxis, en este caso que muestro es demasiado redundante:

Código (python) [Seleccionar]

numero = 90
match numero:
   case numero if numero > 110:
       print('El numero es mayor')
   case numero if numero < 100:
       print('Es menor')


En este caso el resultado que imprime es "Es menor". Es un ejemplo simple. Y en este caso, supongo, sería mejor usar los IFs de toda la vida. Es decir, sin el match. Me llama la atención que se tenga que indicar tantas veces la variable numero. Es decir, dos veces por cada case. O quizás no lo estoy haciendo correctamente y no se recomienda esta estructura en un código así.

Saludos!
#2
Hola!

Pues esa es la pregunta. Aunque he visto por algunos sitios el uso de entornos, yo busco algo mas "artesano". Es decir, usar un par o tres de versiones de Python en Windows. Pero como comento, sin entornos virtuales y anacondas varias.

Solía utilizar la versión 3.7.2, y claro, al instalar la 3.9.x me da algún error como el mapeo con conjuntos. Pronto sale la 3.10 con el famoso match. Y claro, me hace gracia tenerlo. No suelo cambiar de versiones, como comento, tenia bastante tiempo instalada la 3.7.2.

Por lo que he leído bastaría nombrar los directorios como /python37 y /python39 y supongo modificar el path. Allí me surgen las dudas, ya que si instalamos un módulo con pip ¿En que versión se instala?

En tema de no querer instalar anaconda, es que es muy pesado para mi ordenador. Aparte, muchas de las cosas que trae, ni las voy a usar. Y los entornos virtuales tampoco me convencen en exceso. Solo quiero un par de "Pythones" y poder escoger de manera manual la versión. Saludos!
#3
Hola!

Cabe decir que esta duda o pregunta no es una critica a ningun lenguaje. Yo reconozco mi gusto por python. Cada cual tendra un lenguaje preferido.

Pero es algo curioso que muchos programadores que vienen de lenguajes mas "duros" como C++ les resulta sencillo (que por otra parte es logico) acostumbrarse a python. Se puede decir que tienen la ventaja, en el aprendizaje de python, a simplificar algo mas el codigo. Por lo tanto les puede ser sencillo dar ese paso.

Pero claro, cuando uno viene de python e intenta conocer C++ la cosa cambia. Uno se intenta motivar con las tipicas frases de que es un lenguaje (el C++) que se debe conocer, que es mas rapido, mas potente, mas...etc,etc...

Es facil la motivacion de C++ a python con un simple "Hola Mundo". Pero los que venimos de python ¿Como nos motivamos con el "Hola Mundo" de C++?

Casi todos los programadores tienen un lenguaje que usan mas que otros. O el tipico lenguaje de cabecera. Yo no escondo mi predileccion por python. Pero tenia curiosidad por conocer C++. El inconveniente es que lo resulta sencillo en python, en C++ lo veo muy rebuscado. Por no hablar de su sintaxis. Aunque entiendo que esto es algo subjetivo.

Supongo, que la mayoria de programadores que estan por aqui, conocen y programan en varios lenguajes. Me gustaria saber como se motivan a programar en otro lenguaje donde han de hacer 20 lineas de codigo donde con su lenguaje favorito necesitan un par.

#4
Hola de nuevo!  :D

He revisado mis propios temas en el foro porque tenia dudas si algun dia formule esa pregunta. Y ya veo que no. Quizas en su dia deje aparcado el tema.

Pues bien, ¿Sabeis si estos modulos se llevan bien? Echando un vistazo por Don Google hay opiniones dispares. Unos dicen que si, otros lo contrario. Como la mayoria de las cuestiones en programacion  ;D

Ambos modulos basan su filosofia en bucles. En pygame el tipico bucle while. Y en tkinter el mainloop. Y claro, dos bucles trabajando a la vez...complicado.

Por otro lado he pensado en hilos (threads). Para cosas basicas (o hasta donde yo llego) los puedo utilizar. Pero claro, si el script crece exponencialmente no se si sabria manejar todo el tinglado.

La idea de todo esto es poder crear dos ventanas para la creacion de un juego. La de pygame seria el escenario y el juego en si. Y la otra ventana, tkinter, donde podriamos cambiar las configuraciones de dicho juego. Y que estos cambios se vieran en tiempo real en la ventana de pygame.

Claro esta que seria algo muy basico. Mas que nada para ver si ambos modulos pueden trabajar de forma paralela.

Todavia no he creado ningun script sobre esto. Es para si pensais que no vale la pena ni intentarlo.

Venga, un saludo!
#5
Hola de nuevo  ;)

A dia de hoy no habia usado paquetes con python. Solia importar los modulos dentro de la misma carpeta del script principal y ya me bastaba.

La cosa esta que he visto algunos videos recientes, incluso usando Python 3, y el creador del mismo suele poner __init__.py (que normalmente es un script vacio) dentro de cada paquete. Y claro, yo lo he probado sin poner este archivo y me funciona igual.

Incluso he puesto varios modulos dentro de una paquete (o carpeta) y me los reconoce igualmente. Es decir, se importa el paquete y luego cualquier modulo del mismo.

La sintaxis que utilizo es la normal:

Código (python) [Seleccionar]
from paquete.modulo_1 import funcion

paquete es un carpeta, modulo_1 uno de los scripts dentro del paquete y funcion dentro del modulo_1

¿Es correcto? ¿Para que poner el __init__.py si me funciona igual?

Saludos!
#6
Hola de nuevo!

Pues esa es la duda que tengo. No se si hay algún método en tkinter para poder importar/exportar el contenido del portapapeles. Aunque lo que mas me interesa es poder copiar el contenido a un widget Entry. Osea, lo que escribamos en el bloc de notas, por ejemplo, poder pegarlo en la caja del widget Entry.

He visto por alguna web que usan el método:

Código (python) [Seleccionar]
ventana = Tk()
ventana.withdraw()


Y luego hacen una llamada como:

Código (python) [Seleccionar]
ventana.clipboard_get()

En todo caso, me gustaría saber, como se enlaza todo esto con Entry o cual es la forma correcta de hacerlo.

Un saludo!

EDITO:

He probado algún código y lo que mas se asemeja lo pongo en el siguiente script. Pero para que funcione primero hemos de copiar el texto y luego abrir nuestro programa con tkinter. Y claro, queda un poco chusquero. Me gustaría que sin cerrar nuestra aplicación se pudiera hacer copy/paste en tiempo real.

Código (python) [Seleccionar]
from tkinter import Tk, Entry, StringVar

raiz = Tk()
copiado = raiz.clipboard_get()

varEntry = StringVar()
e1 = Entry(raiz, textvariable = varEntry)
e1.place(x = 0, y = 0)
varEntry.set(copiado)

raiz.mainloop()


Bueno, creo que esto es mas o menos lo que queria conseguir. He añadido un Button para ir actualizando lo que se copia en el portapapeles. No se si es la forma correcta de hacerlo. Por si alguien le interesa, pongo mi script:

Código (python) [Seleccionar]
from tkinter import Tk, Entry, StringVar, Button

raiz = Tk()

def pegar():
   pegado = raiz.clipboard_get()
   varEntry.set(pegado)
   


b1 = Button(raiz, text = 'Pegar', command = pegar)
b1.place(x = 0, y = 50)

varEntry = StringVar()
e1 = Entry(raiz, textvariable = varEntry)
e1.place(x = 0, y = 0)


raiz.mainloop()


#7
Hola de nuevo!

He leído algo sobre el uso de while con tkinter. Osea, que no se llevan muy bien. Por el tema que se congela la GUI. Aunque también ocurre cuando se realizan cálculos que tardan.

Me he informado un poco y veo que se suelen usar los hilos o threads para evitar estos problemas.

La cosa, es, que tenia realizado un pequeño programa en consola. Y me hacia gracia retocarlo con tkinter. Osea, que los resultados e impresiones ya no fueran por consola, si no por la GUI.

Al entrar por primera vez al programa, este, realiza unos cálculos. En ese caso la consola se quedaba a la espera. Cuando realizaba la tarea, mostraba los resultados. Hasta ahí, todo bien.

Con tkinter cree un boton para realizar esos calculos. Y entonces es cuando se congela. Cosa que no me importa. Ya que con el resultado de ellos, he de trabajar luego. Es decir, no me importa esperar. Lo que no quiero es que al tocar otro botón de la GUI (mientra realiza los calculos) ponga el nefasto mensaje de 'no responde'.

La idea es, si en tkinter, hay alguna forma de inhabilitar los widgets y que así no de la opción a ese mensaje de 'programa no responde'. Y cuando el script acabe los cálculos, los widgets estén operativos.

No se si me explico. La idea no es trabajar en multiproceso o varias tareas a la vez. En vez de eso, que no podamos tocar nada mientras hacemos dichos cálculos.

Con este simple script (mientras en consola se va imprimiendo) si nos da por tocar el botón de nuevo o clicar en la ventana, la GUI se congela ¿Se puede inhabilitar mientras se imprime en la consola? (esto solo es un ejemplo)

Código (python) [Seleccionar]
from tkinter import Tk, Button


ventana = Tk()
ventana.geometry('300x300+100+100')

def cuenta():
   
    for i in range(1, 100000):
        print(i)     
       
       
btn = Button(ventana, text = 'Pulsa', command = cuenta)
btn.place(x = 10, y = 10)


ventana.mainloop()


Gracias!
#8
Hola de nuevo!

Pues esa es la pregunta...

Conociendo un poquito los widgets standard del modulo tkinter (la librería tk), estos se han ampliado (a partir de la versión 8.5) con las librerías ttk y tix.

En cuando a la ttk veo mas documentación, pero con la tix no he visto gran cosa. Y era para ver si alguien le ha sacado provecho o casi no se utiliza. He decir, que yo uso tkinter para pequeños proyectos. Y creo que puede ser mas que suficiente con tk y ttk.

Y otra duda que tengo, es, si los widgets que coinciden entre estas librerías se comportan igual o tienen alguna mejora entre ellas. Por ejemplo, si el widget Button es igual o tiene el mismo comportamiento entre tk y ttk.

Saludos!  :D
#9
Hola de nuevo!

Os dejo el enlace de un libro en línea muy interesante. Agradecer a sus autores (Brad Miller y David Ranum) y al traductor del mismo (Mauricio Orozco-Alzate) esta grandiosa aportación. Lástima que no se pueda adquirir en PDF. Pero bueno, tampoco nos vamos a poner exigentes  :rolleyes:


EDITO:

He visto que accediendo desde el enlace informa como página no segura. En todo caso, si ponéis en el buscador de Google esto:

Solución de problemas con algoritmos y estructuras de datos usando Python

Es la primera entrada que sale.
#10
Scripting / ¿Recomendáis usar POO con tkinter?
16 Octubre 2017, 18:59 PM
Hola de nuevo!  :D

Ya sé que es muy subjetiva la pregunta. Y quizás dependerá del tamaño del script. Pero después de ver algunos tutoriales (vídeos, webs, blogs...), los creadores de los mismos enseñan tkinter sin usar la POO. Aunque también es verdad, que en python, siempre estamos trabajando con objetos. Incluso con tkinter para hacer una simple ventana ya estamos instanciando de la clase:

Código (python) [Seleccionar]
ventana = Tk()

Por eso tengo la duda si es redundante crear clases sobre clases. Y si por otro lado se enreda mucho el código.

Quizás, como algunos programadores, tengo algunas dudas de cuando usar clases (o la POO) y cuando no.

Cuando empiezo a crear un código es como si otro programador invisible me estuviera diciendo ¡Ostras, usa la POO! Pero en tkinter no la veo tan imprenscindible.

Bueno, un saludo!
#11
Hola de nuevo!  :D

Llevo un tiempo haciendo programas de Python en consola. Ahora me he decidido por usar una GUI. Y me he decantado por tkinter. He ido conociendo un poco los widgets y con el Checkbutton me han asaltado unas dudas:

En casi todos los ejemplos se crean unos pocos Checkbutton. Para cada uno de ellos se debe crear la variable de su estado y una función (normalmante llamada por command del widget Button). Pero claro, si queremos crear, por ejemplo, diez o veinte Checkbutton la cosa se desmadra y se crea un código redundante y repetitivo.

Ejemplo:

Código (python) [Seleccionar]
def imprime():
   global lista
   lista = []
   if _1.get() == 1:
       lista.append(1)
   if _2.get() == 1:
       lista.append(2)
   if _3.get() == 1:
       lista.append(3)
   if _4.get() == 1:
       lista.append(4)
   if _5.get() == 1:
       lista.append(5)
   if _6.get() == 1:
       lista.append(6)
   if _7.get() == 1:
       lista.append(7)
   if _8.get() == 1:
       lista.append(8)
   if _9.get() == 1:
       lista.append(9)
   if _10.get() == 1:
       lista.append(10)
_1 = IntVar()
_2 = IntVar()
_3 = IntVar()
_4 = IntVar()
_5 = IntVar()
_6 = IntVar()
_7 = IntVar()
_8 = IntVar()
_9 = IntVar()
_10 = IntVar()
chk1 = Checkbutton(ventana, text = '1', variable = _1, onvalue = 1, offvalue = 0).place(x = 10, y = 30)
chk2 = Checkbutton(ventana, text = '2', variable = _2, onvalue = 1, offvalue = 0).place(x = 10, y = 60)
chk3 = Checkbutton(ventana, text = '3', variable = _3, onvalue = 1, offvalue = 0).place(x = 10, y = 90)
chk4 = Checkbutton(ventana, text = '4', variable = _4, onvalue = 1, offvalue = 0).place(x = 10, y = 120)
chk5 = Checkbutton(ventana, text = '5', variable = _5, onvalue = 1, offvalue = 0).place(x = 10, y = 150)
chk6 = Checkbutton(ventana, text = '6', variable = _6, onvalue = 1, offvalue = 0).place(x = 10, y = 180)
chk7 = Checkbutton(ventana, text = '7', variable = _7, onvalue = 1, offvalue = 0).place(x = 10, y = 210)
chk8 = Checkbutton(ventana, text = '8', variable = _8, onvalue = 1, offvalue = 0).place(x = 10, y = 240)
chk9 = Checkbutton(ventana, text = '9', variable = _9, onvalue = 1, offvalue = 0).place(x = 10, y = 270)
chk10 = Checkbutton(ventana, text = '10', variable = _10, onvalue = 1, offvalue = 0).place(x = 60, y = 30)



Esto es un extracto del código. El que hace referencia a la duda que me surge. Es decir, se puede dar el caso que un programa tenga 100 casillas a seleccionar ¿Cómo se puede evitar este código tan repetitivo?

Saludos!
#12
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
#13
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)
#14
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.
#15
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 (python) [Seleccionar]
for i in range(1, 100):
   print(i)
input()


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

Código (python) [Seleccionar]
from cx_Freeze import setup, Executable


setup(name = "Plantilla",
     version = "0.1",
     description = "Crear ejecutable",  
     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 (python) [Seleccionar]
from cx_Freeze import setup, Executable

build_exe_options = {"packages": ["pickle"]}

setup(name = "Plantilla",
     version = "0.1",
     description = "Crear ejecutable",  
     options = {"build_exe": build_exe_options},
     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 (python) [Seleccionar]
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
#16
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 (python) [Seleccionar]
class Persona:
   def __init__(self, nombre, edad):
       self.nombre = nombre
       self.edad = edad
       self.inventario = '1,2,3,4,5,6,7'.split(',')
   
   # metodos aritmeticos
   
   def __add__(self, other):
       # suma
       return self.edad + other.edad    
           
   def __sub__(self, other):
       # resta
       return self.edad - other.edad
   


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

Código (python) [Seleccionar]
def __pow__(self, valor):
       # potenciacion
       return self.edad ** valor


Luego instanciariamos:

Código (python) [Seleccionar]
p1 = Persona('Juan', 30)
p2 = Persona('Ivan', 20)


Y probariamos las sobrecargas:

Código (python) [Seleccionar]
print(p1 + p2) # 50 (__add__)
print(p1 - p2) # 10 (__sub__)
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 (python) [Seleccionar]
def __len__(self):
       return len(self.inventario)


Aunque funcionar, funciona...

Código (python) [Seleccionar]
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 (python) [Seleccionar]
def __str__(self):
       # se ejecuta mediante print()
       return 'Nombre: {}'.format(self.nombre)


No esto:

Código (python) [Seleccionar]
def __print__(self):
        # se ejecuta mediante print()
        return 'Nombre: {}'.format(self.nombre)


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

Saludos!  :)
#17
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 (python) [Seleccionar]
class Circulo_1:
   
    def __init__(self, radio):
        self.radio = radio
       
    @property
    def dameArea(self):
        return 3.14159 * (self.radio ** 2)


2do. EJEMPLO:

Código (python) [Seleccionar]
class Circulo_2:
   
    def __init__(self, radio):
        self.radio = radio       
   
    def dameArea(self):
        return 3.14159 * (self.radio ** 2)
   
    area = property(dameArea)


Y por ultimo sin usar las propiedades:

Código (python) [Seleccionar]
class Circulo_3:
   
    def __init__(self, radio):
        self.radio = radio       
   
    def dameArea(self):
        return 3.14159 * (self.radio ** 2)



Instanciamos y pasamos a correr el codigo en cada ejemplo:

Código (python) [Seleccionar]
# instanciamos:
c1 = Circulo_1(20)
c2 = Circulo_2(20)
c3 = Circulo_3(20)


Código (python) [Seleccionar]
c1.dameArea
1256.636
c2.area
1256.636
c3.dameArea()
1256.636


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?

#18
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?
#19
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/
#20
Pues me he estancado.

Aunque ya he realizado alguna consulta por la web, no le veo solucion a mi duda. O todavia no tengo los conocimientos para desarrollar el codigo.
Mi duda:

Escogemos 100 numeros del 1 al 100. Y acto seguido pedimos las combinaciones de 5 grupos. Total 75287520 combinaciones. Correcto. Pero,  si por ejemplo, quiero que me de la combinacion con su indice 1000000 me tarda unos 9 segundos a recorrer dichas combinaciones con un ciclo FOR (que tambien probe con un WHILE).

¿Como le puedo pedir a un script que me devuelva de forma inmediata las combinaciones a traves del indice que se le indica? Ya no hablo de arreglos (que se podria hacer para pocos vectores).

La duda me viene por que no se como los programas construyen las combinaciones o el algoritmo que usan.

En el ejemplo que detallo, para encontrar la combinacion que se haya en la posicion o indice 1000000 tarda unos 9 segundos ¿Se puede hacer que de forma inmediata nos la de? Con un FOR, creo, desde luego que no. Ya que debe recorrer todas ellas hasta llegar a la posicion 1000000

Código (python) [Seleccionar]
import itertools
from datetime import datetime


inicio = datetime.now()
muestra = tuple(range(1, 101))
for indice, x in enumerate(itertools.combinations(muestra, 5),1):
    print(indice, x)
    if indice == 1000000:
        print('La combinacion con indice', indice, 'es', x)
        break
       
final = datetime.now()
tiempo = final - inicio
print(tiempo)


Salida:

Código (python) [Seleccionar]
...
999994 (1, 9, 18, 21, 29)
999995 (1, 9, 18, 21, 30)
999996 (1, 9, 18, 21, 31)
999997 (1, 9, 18, 21, 32)
999998 (1, 9, 18, 21, 33)
999999 (1, 9, 18, 21, 34)
1000000 (1, 9, 18, 21, 35)
La combinacion con indice 1000000 es (1, 9, 18, 21, 35)
0:00:09.510784


Si pedimos un indice mayor o jugamos con otras combinaciones, nos puede arrojar horas, dias o semanas en devolvernos la combinacion con el indice pedido ¿No?

#21
Hola.

Antes de postear he dudado en hacerlo. Porque supongo que la solución será muy fácil. Pero por más que le doy vueltas no doy con la tecla.

Para saber si un elemento esta en una lista o vector, solo hemos de hacer así:

Código (python) [Seleccionar]
num = 4
lista = [1,2,3,4,5]
num in lista


Y nos devuelve True.

¿Pero como hacerlo 'fácil' si hemos de hacer la comprobación en una matriz?

Código (python) [Seleccionar]
num = 4
matriz = [[1,2,3],[4,5,6],[7,8,9]]
num in lista


Logicamente nos devolverá False. Ya que comprobará el número 4 con una lista o vector entero.

Hacer esto, no lo veo del todo bien:

Código (python) [Seleccionar]
num in matriz[0] or num in matriz[1] or num in matriz[2]

Y si usamos un ciclo For, como el número a comprobar esta en matriz[1], nos devolverá False. Ya que la variable de control del For se detendrá en matriz[2]. Y como allí no esta el 4, dará False.

La pregunta, es, ¿Cómo enfocarlo en estos casos?


Bueno, saludos!
#22
Seguramente se podrá hacer. Pero la mayoría de ejemplos que veo por la red, utilizan el paradigma de POO. Y antes de llegar a dicho paradigma de programación utilizo la funcional.

Se trataría de crear un árbol de decisión o alguno mas simple (por ejemplo árbol binario). Y además, que los datos que se fueran introduciendo se pudieran escribir y leer de un archivo. Es decir, para que nuestro código fuera aprendiendo.

¿Cómo se debería enfocar?

Esta el típico programa que hace de adivinador. Y que a medida que uno le introduce datos, estos se escriben en un archivo para luego no tener que teclearlos de nuevo.

En este enlace https://gist.github.com/adrigm/5330110 el usuario postea un código usando la POO. Me gustaría poder aprender como se haría igual usando IF, funciones, FOR, etc...

Por cierto, no es un trabajo que me hayan mandado hacer. Aprendo los ratos que puedo y por hobby. Gracias!
#23
Hola...

Con el fin de entrenarme un poco con python, me gustaría crear un pequeña aventura conversacional. Es decir, la típica aventura de texto donde damos ordenes por teclado y el personaje se va moviendo por habitaciones (o lugares). Y aparte, que cuente con un inventario y tal. Me gustaría que de momento fuera solo con programación funcional. Es decir, con la ayuda de funciones internas de Python, las nuestras definidas por nosotros y algún módulo. Eso sí, sin tocar la POO para no liarme en exceso.

Con este tipo de programa/juego se pueden asentar las bases sobre vectores, ciclos, matrices, inteligencia artificial, excepciones, ficheros, etc...

He mirado un poco por internet, pero no hay gran cosa ¿Sabéis algo parecido (un tuto) en la lengua de Cervantes?

En todo caso ¿Cómo se debería plantear? Uso de matrices y árboles de decisión, supongo...

Bueno, espero alguna idea...saludos!
#24
Pues eso...abro un archivo CSV en Python y recorro sus líneas con un FOR. Creando un lista. Pero al final me sale la secuencia de escape del tabulador. Y yo no quiero que se vea '\t'

Código (python) [Seleccionar]
lineas = csv.reader(leer)
for i in lineas:
    lista.append(i)
cont = 1
for i in lista:
    print('Lista ',cont,'=',i)
    cont += 1
   


SALIDA:

Lista  14 = ['10', '20', '30', '40', '50', '60\t\t\t\t\t'] # Las \t últimas no quiero que las muestre :(
#25
Hola,

Para programar utilizo un PC. Como es normal. Hace poco baje un app ANDROID de Python para probar pequeños códigos en el teléfono móvil. La duda es:

¿En una tablet se puede programar?

Osea...¿Puede instalar Python y programar en ella? En ese caso ¿Es mejor ANDROID ó WINDOWS 8?
#26
Me choco ver esta afirmación (aunque yo lo pregunte aquí). Es decir, en un libro he leído que Böhm y Jacopini demostraron que con las tres estructuras básicas: secuenciales, selectivas y repetitivas se pueden crear todos los programas.

Ya no me refiero a programas con entornos gráficos y los de hoy en día. Si no, mas bien, que en esencia con estas tres estructuras se puede hacer de todo. Esta claro que se necesitara mas código y repetiremos parte de mismo muchas veces.

Es solo como duda. Por que lo normal es usar funciones, procedimientos, arreglos, definición de tipos de datos propios, etc...pero claro, todas estas operaciones están desarrolladas con esas estructuras básicas de control (secuenciales, selectivas y repetitivas) ¿No?
#27
Hola a todos!

Ya parto de la base que la matemáticas son necesarias en programación. Por eso no hago la típica pregunta si son necesarias para programar.

Bueno, yo estoy aprendiendo Pascal como hobby. Ya se que muchos dirán que es de la época de Los Picapiedra. Pero bueno, a mi me gusta y lo aprendo por hobby.

Con esa premisa, la duda surge, que tipo de matemáticas estudiar. La verdad, que ya ni me acuerdo de hacer ecuaciones, ni sumar polinomios y demás operaciones algebraicas. Por eso pensé que lo mejor era coger un libro de secundaria y estudiarlo. Tampoco quiero aprender conceptos matemáticos de forma surrealista. Osea, quiero hacer mis programilllas y tal.

Preguntando al Sr. Google, la mayoría de la gente suele contestar las matemáticas discretas. Osea, las que se apoyan en tablas de verdad, booleanos y algoritmia.

Es que si no, se me puede hacer muy pesado estudiar matemáticas y programación a la vez.

Yo había pensado en las mates básicas y como mucho llegar a las ecuaciones. Pero eso sí, no quiero estudiar conceptos si no los voy a utilizar.

¿Qué me recomendáis? Saludos!
#28
Estoy haciendo pruebas en el tema de objetos list (listas). Y no hay ningún problema cuando metemos en una lista otra lista. Pero claro, cuando la otra es diferente.

Se me ocurrió meter dentro de la lista creada, a ella misma. De esta forma:

Código (python) [Seleccionar]
lista = [1,2,3,4,5]

lista.append (lista)

print lista


Y me arroja este resultado:

Código (python) [Seleccionar]
[1, 2, 3, 4, 5, [...]]

¿No debería haber sido?:

Código (python) [Seleccionar]
[1, 2, 3, 4, 5, [1,2,3,4,5]]

Es decir, lista dentro de lista  :huh:
#29
Hola de nuevo  :D

Me estoy liando un poco con el tema de los menús de opciones en Python. Querría saber cual es la forma correcta de hacerlos. Es decir, para crear el típico ejemplo de una calculadora.

Por lo que he podido de ver, de los ejemplos que están por la red, la mayoría recomiendan usar funciones. Osea, que la primera función sea (por ejemplo) menu(). Y dentro de esta función, todas las opciones. Luego, dependiendo la opción que escojamos, nos mande a otra función...sumar(), restar(),etc...

Otros programadores, usan muchos if y repiten en cada opción, los raw_input dentro de cada función. Yo esto, no lo encuentro muy correcto.

Me gustaría ver si alguien puede postear la forma correcta de hacerlo. Pero sin recurrir a la POO. Ya que todavía no he llegado a eso.... :-\

Quiero aprender como es la mejor manera de hacer un menú. Entiendo que hay muchas maneras de hacerlo. Y quiero evitar recurrir a muchos if, elif, else, raw_inputs, ...

...Un saludo!
#30
Ya se que la duda es un poco surrealista. Pero para maximizar el tiempo de aprendizaje me gustaría saber si hay algún aparato (Que no sea PC o portatil) para poder programar. En mi caso sería Python, claro.

Me refiero, a algo que fuera un poco mas grande que un movil o tipo tablet. Pero que tuviera teclas. Que no fuera táctil, vaya.

Ya sé que están los netbooks y cosas de esas. Pero me refiero si hay algo mas simple y que solo sirva para picar código y ver los resultados en pantalla ¿Eso existe?

Hace poco vi algo parecido en un movil. Pero es super engorroso. No sé si habrá algo mas en el mercado.

A veces, uno esta en una sala de espera perdiendo el tiempo. O viendo revistas caducadas en la peluquería. Y claro, no va a ir uno con el portátil. Es decir, sería un aparato para probar cosas rápidas y tal...
#31
Hola!

No, no me refiero utilizar Excel para programar en Python, eh...!

A medida que voy aprendiendo, voy haciendo unos apuntes para reforzar un poco lo que leo y práctico. Y para hacerlo mas visual, algunas cosas las escribo en Excel. Pero claro, he de cambiar los colores de forma manual y es un engorro.

La cuestión es, si puedo configurar Excel para el resaltado de sintaxis en Python. Es decir, que al ir escribiendo sentencias, números, strings, etc...Excel, los reconozca y cambie el color automáticamente.

Os pongo un ejemplo como lo hago de forma manual. Aquí he creado el tema de los índices Slice en strings. Pero aún faltan mas, claro.

                                    


#32
Hola de nuevo!

Sigo con mi estudio en Python. He dejado la POO para el final. Ya que me quiero centrar primero en lo básico de este lenguaje. Y por ello, he optado por crearme un borrador de estudio.

Osea (mas o menos por este orden):

Tipos de datos:

-Numericos
-Strings
-Tuplas
-Listas
-Diccionarios

Control de flujo

-Operadores relacionales
-Booleanos y operadores: True, False, or, and y not
-if, elif y else

Bucles

-While
-for
-break
-continue

Pienso, que primero debo dominar bien todo esto. A margen de las funciones integradas que ya vienen en Python. En relación a estas sentencias clave.

Luego, ya me meteré con diseñar las propias funciones. Ya que estas se componen, mas o menos, con lo arriba comentado.

Como digo, la POO, ya si eso...mas tarde  ;D

Bien, yo utilizo el editor Eclipse. Pero me gustaría poder ver mis ejemplos de código en algo mas visual. Osea, que no salieran por consola o en la ventana del editor escogido. No sé si me explico.

Que se pudiera ver el resultado de un simple 2+2 en una ventana Windows. ¿Es complicado configurar Python con un entorno de salida visual?

Gracias!
#33
Hola!

Primero de todo, seguro que es culpa mía. Y antes de preguntar he mirado vídeos y otros manuales que pululan por mi mesa. Pero no le veo solución.

Pido una entrada de un número (por raw_input). Esta se recoge en una variable. Testeo mediante el type que el numero introducido es string. Luego convierto esa variable (que es un numero) a entero. Mediante int. Pero se lo pasa por el forro.

Este es el script. Siempre me acaba concatenando los números y no los suma. Es decir si pongo 6, me da resultado 66. No 12 ¡¡¡No entiendo nada!!!

variable = raw_input ('Dime un numero: ')

print type (variable)

print variable

int(variable)

print type (variable)

print variable + variable


Ah, lo del int(raw_input ('...'), ya lo sé. Pero quería hacer esta conversión en tiempo de ejecución.
#34
Siempre he tenido esta duda. Yo estoy dando los primeros pasos en Python (después de varios intentos  :-[). Primero quiero aprender bien el tema de los bucles, itineradores y condiciones. Ya sé que todo el mundo dirá...¡Eso es fácil!

Claro, lo básico si. Pero luego leo códigos de otros (que parecen obras de arte) y pienso lo que me queda aún...jajaja. Empiezan a combinar operadores con itineradores y luego mezclan condiciones y funciones. Por eso, quiero aprender todo eso bien. Luego ya me iré al tema de POO y tal...


A lo que iba la pregunta...

¿Una persona puede saber programar mejor que quien crea ese lenguaje? ¿O el creador del mismo es el único que le puede sacar todo el jugo?

Por que claro, Python en lo básico, lo puede dominar cualquiera que ponga interés. Pero luego veo las librerias, modulos y extensiones que tiene y pienso. ¡Joer!, solo lo podrá dominar quien lo ha creado ¿No?

En todo caso, ¿Es necesario conocer absolutamente todo de un lenguaje para programar con él? ...O la gente, por lo normal, ¿Conoce un tanto por ciento del mismo?

#35
Hola!

Pues nada, yo estudio la versión 2.7.3. Cómo comenté, por el tema de tutoriales y cosas de esas. Supongo, que luego dar el "salto" a Python 3 no es nada traumático.

Haciendo pruebas con la sentencia print (En Python 3 es una función), veo que me admite los parantesis en la versión 2.7.3 ¿No debería dar error de sintaxis?

Osea:

2.7.3

Código (python) [Seleccionar]
print("Hola mundo y tal")

Python 3

Código (python) [Seleccionar]
print("Hola mundo y tal")

...Pero esta última forma de escribir también me la admite en 2.7.3. No lo entiendo entonces... :(




[MOD] Déjate los colorines, tienes que usar el botón "insertar código", lée las reglas porfavor.
#36
Entiendo que la pregunta es un poco surrealista. Pero me surge esa duda. Ahora estoy leyendo un libro (que ya tenía hace tiempo) sobre la programación en Python. En concreto este: "Introducción a la programación con Python"

http://www.uji.es/bin/publ/edicions/ippython.pdf

Yo voy siguiendo cursos por YouTube y algún tuto. Pero claro, agarro este libro (Que casi todo el mundo aconseja), y en los primeros capítulos empiezan con código máquina y operaciones matemáticas. Entiendo que son básicas y se deben saber. Pero me gustaría saber, si puedo saltar directamente a los capítulos de Python.

Ademas, en los primeros capítulos también salen ejercicios y ya me quedo atrancado. Ya, que encuentro, son demasiado pronto. Y claro, me frustra bastante.

Si alguien a leído este libro me gustaría saber si lo leyó del tirón o que metodología seguía. Es decir, si lo iba leyendo mientras probaba dichas lecciones en el ordenador.

Es que, leer un libro (sobre programación) con el ordenador apagado no lo veo.

Gracias!

#37
Hola!

Ya sé que es un libro muy básico de Python. Hace tiempo tenia la versión del mismo, en 2.7 de Python. El que ahora se descarga desde la misma página y por otras webs y foros es la version 3 de Python (del libro). Ya sé que son similares. Pero no iguales del todo.

Yo tengo instalada la versión 2.7 por que hay mas información por la red. Si descargamos el libro de Snake Wrangling for Kids, nos dice que si tenemos otra versión anterior (a la 3.00) descarguemos ese libro. Pero no esta por ningún lado.

¿Dende puedo descargar la versión 2.7 de ese libro?
#38
Hola!

Bueno, yo también he preguntado a veces que lenguaje recomiendan para aprender. Y las respuestas, las conozco. Se busca la orientación de los foreros. Y que tienen grandes conocimientos en programación.

Esta claro, que no todo el mundo quiere aprender a programar para hacer de ello su profesión. Si no, mas bien, como un hobby. Por eso, la gente que pregunta, debería hacerlo bajo esta premisa.

Pienso, que no tiene mucho sentido saber veinte idiomas distintos, si uno no se va a mover de su barrio. Una persona, que sea comercial y viaje por el mundo, si deberá saber cuantos mas, mejor. Con los lenguajes informáticos, supongo, pasa lo mismo.

Yo llevo tiempo dudando entre escoger Python o C++. Antes, claro esta, deberé coger los fundamentos de la programación. Los consejos que se dan por los foros, cuando se hace esta pregunta, ya los conozco. Y las mayoría tienen razón.

Cosa distinta ocurre cuando se pregunta por que lenguaje escojer: Que si Visual Basic no merece la pena (malas costumbres), que Python es el mejor para los no iniciados en este mundo, que C++ te da la base de todos, etc...

La mayoría de la gente suele recomendar Python para iniciarse. Aunque yo, con saber uno y bien, me conformaría. Pero siempre tengo esa duda que me corroe el alma ¿Python o C++?

El C++ me da terror...entre los mas expertos siempre lanzan dardos envenenados sobre los punteros y saber gestionar la memoria. Eso, sin contar, con que es mas fácil crear errores de sintaxis al no estar tan tipado. Y eso, para los aprendices, es fatal ¿No?

A mí me gusta el diseño o modelado 3D. Y me gustan los motores de vídeo juegos. Y claro, la mayoría de estos funcionan con C++ o C#. Bueno, el Unity con un derivado de Python (Pero pocos tutoriales sobre su uso). Ya he aclarado que lo hago todo como hobby y en plan auto didacta.

Cuando me he puesto manos a la obra con Python, miraba con recelo a C++. Pensaba, que escogía a Python, por no tener lo que hay que tener, para aprender C++. Pero claro, uno mira los foros y las opiniones de aprender C++ asustan. No me refiero a ser un experto en C++. Pero...poder hacer programas nosotros mismos ¿Es imposible? Me refiero estudiando C++ de forma auto didacta sin querer ser un genio. Pregunto...



#39
No quiero empezar cansando al personal sobre que lenguaje aprender. De echo, el que tengo siempre en mente es Python. Y es el que mas me atrae. Quizás, por que no soy un erudito en otros. Que a la postre, me parecen mas complicados para mi.

Pero como bien decís por aquí, antes de comenzar a escoger un lenguaje, se necesita una buena base lógica y conocer el tema de los algoritmos.

De echo, en encontrado buenos tutoriales sobre Python. Pero al cabo del rato he estado mas perdido que un pato en un garaje. En ellos explicaban la sintaxis de dicho lenguaje y como se hacía esto o lo otro. Pero no enseñaban esos fundamentos imprenscindibles para programar. De nada sirve un "Aprenda tal lenguaje" si en ese mismo libro o tutorial obvian lo básico: algoritmia.

Por eso pido consejo a los que tenéis mas experiencia en esto. He consultado algunos libros supuestamente para iniciarse. Y abriendo una página al azar, se podían ver capturas que parecían la pizarra de Einstein. Y eso que era para iniciarse...

Muchos de estos libros intentan iniciar a base de algoritmos puros o sobre la sintaxis de un lenguaje u otro. Pero no encuentro ninguno que enseñe a programar utilizando esos algoritmos en un lenguaje concreto. Normalmente los libros que enseñan algoritmia lo hacen con pseudo código. Me gustaría encontrar algo que enseñase eso con Python.

Me leí el libro Python para todos y no avance nada. Y el de Inmersión en Python lo encontré sumamente complicado.

¿Conocéis alguno que hable sobre variables, matrices, bucles, condiciones, algoritmos de forma mas básica para ir avanzando?

Gracias!!!