Agitame :x

miércoles, 21 de enero de 2015

Python III: Libreria Turtle

Hoy descubrí algo asombroso que se puede hacer en Python. En esta entrada me limitare a hablar de solamente una libreria de las cientas que tiene Python, pero que da mucho para hablar.

Libreria Turtle

La libreria Turtle, son una serie de comandos completamente dedicados a una acción especifica.

Esta libreria puede crear una "Tortuga robot" que crea trazos dentro de un plano cartesiano determinado.

Esta tortuga comienza en el punto (0,0) del plano cartesiano y camina a travez de este plano dejando un rastro por donde pasa, lo cual puede ser muy util para graficar ciertos valores y funciones.

La tortuga tiene una cabeza, la cual apunta a una dirección (inicialmente hacia la derecha). Esta dirección se puede establecer y cambiar en grados de 0 a 360, o en radianes.

Tomemos por ejemplo el siguiente codigo:


>>import turtle #aqui importamos la libreria.

>>turtle.setup(800, 600) #aqui establecemos los parametros del plano cartesiano.
>>vent = turtle.Screen() #definimos vent al objeto de ventana
>>alex = turtle.Turtle() #definimos a nuestra tortuga robot, se llamará Alex.
>>alex.forward(300) #le decimos a Alex que camine hacia el frente 300px.
>>alex.left(90)  #Le decimos que gire 90 grados hacia SU izquierda. (un cuarto de giro)
>>alex.forward(200)  #Le decimos que avanze hacia el frente 200px.

>>#Y como no tiene mas instrucciones, terminará de moverse en ese punto.

>>vent._root.mainloop() #Finalmente, este comando termina de ejecutar la ventana donde esta la tortuga.
Si todo sale bien, deberias ver una animación que haga el siguiente dibujo:


Una tortuga puede moverse por el plano con los siguientes comandos:

nombre.forward(d) : Avanza d pasos hacia la dirección donde mire tu tortuga.
nombre.backward(d) : Retrocede d pasos pasos hacia la dirección donde mire tu tortuga.
nombre.left (g): Gira a la izquierda g grados desde la dirección donde mire tu tortuga.
nombre.right (g) : Gira a la derecha g grados desde la dirección donde mire tu tortuga.
nombre.penup() :El trazo dejará de marcar el plano, no obstante podrás seguir moviendo la tortuga por este.
nombre.pendown(): El trazo volverá a marcar el plano si utilizaste el comando penup. 

Una tortuga tambien se puede personalizar, con colores y formas, un ejemplo de esto puede ser:
>>import turtle
 

>>turtle.setup(800, 600) # establecemos el tamaño de la ventana de 800 por 600 píxeles
>>vent= turtle.Screen() # establecemos vent al objeto de la ventana

>>spade= turtle.Turtle() #establecemos a nuestra tortuga.
 

>>vent.bgcolor("black”) # esto establece el color de fondo de la ventana, sea negro.
>>vent.title("Este es Spade”) # esto establece el título de la ventana.
>>spade.color("white”) # Esto hace que el color del trazo sea de color blanco.
>>spade.pensize(5) # establece el ancho del trazo.

>>spade.shape("turtle") #Esto establece la forma de nuestra tortuga, en este caso, resulta tener la forma de una tortuga real en lugar de una flecha.
 

>>spade.forward(300) #Empezemos a darle instrucciones. pidamos que haga un "8".
>>spade.left(120)
>>spade.forward(300)

>>spade.left(120)
>>spade.forward(600)
>>spade.right(120)
>>spade.forward(300)
>>spade.right(120)
>>spade.forward(300)

>>vent.exitonclick() #finalmente este es como el comando termina el codigo, pero a diferencia del anterior, lo hace cuando se da click en la pantalla.
Ahora que establecimos el titulo, el color, el ancho y la forma de nuestra tortuga, se veria algo como esto:


Ahora empezaremos a combinar conocimientos de la clase anterior: Deberemos definir una función que tenga una tortuga que dibuje un poligono regular de n lados, y que cada lado mida un tamaño m:
>>import turtle

>>def polygon(n,m):
    >>angulos = (360/n)
    >>tamano = m

    >>turtle.setup(800,600)
    >>vent = turtle.Screen()
    >>vent.bgcolor("lightblue")
    >>vent.title("Polygon Maker")
    >>poly = turtle.Turtle()
    >>poly.shape("turtle")
    >>poly.color("black")
    >>poly.pensize(3)

    >>while n>0:
        >>poly.forward(tamano)
        >>poly.left(angulos)
        >>n=n-1

    >>vent._root.mainloop()

Al ejecutar el codigo, lo siguiente que tendriamos que hacer es llamar a nuestra función en ventana.
Si lo hacemos, por ejemplo, con polygon(5,100), nos saldria esto:


Como desafio final para terminar con turtle, intentaremos dibujar un fractal. un fractal es un dibujo que tiene una estructura auto-similar, que és definida en términos de ella misma, es decir, que es Recursiva.

Para ser mas especifico, deberemos definir una función que grafique el Fractal curvo de koch en orden n, con una longitud m desde el punto inicial hasta el final.

>>import turtle

>>def koch(n,m):

    >>kochy = turtle.Turtle()
    >>vent = turtle.Screen()
    >>vent.setup(800,200)
    >>kochy.penup()
    >>kochy.backward(m/2)
    >>kochy.pendown()

    >>def koch2(n,m):
       
        >>if n==0:
            >>kochy.forward(m)

        >>else:
            >>koch2(n-1,m/3)
            >>kochy.left(60)
            >>koch2(n-1,m/3)
            >>kochy.right(120)
            >>koch2(n-1,m/3)
            >>kochy.left(60)
            >>koch2(n-1,m/3)

    >>koch2(n,m)

    >>vent.exitonclick()

Explico basicamente lo que hice: Empezé a definir la función koch. definí la ventana y tortuga. Tambien  le dije que iniciara el trazo m/2 pixeles mas atras del eje 0. Dentro de Koch empezé a definir otra función llamada koch2. En esta use un comando base (el primer if), e instrucciones recursivas del movimiento de la tortuga en el else. Termine de definir esa función, la llamo en la linea siguiente, pongo que termine de dibuja una vez haga click, y finalmente termino de definir la funcion inicial.

La razon por la cual definí una función mas pequeña dentro de la inicial, fue para que los parametros de mi tortuga no se repitieran una y otra vez a la hora de que la función se repitiera en sí misma. por lo cual las excluí, y los valores que si debian repetirse, los ejecute en una funcion propia.

y finalmente mi resultado fue el siguiente: koch(5,500)


Y poco mas se puede decir de la libreria Turtle, disfrute bastante esta materia en particular, y espero que lo hayan hecho tanto como a mi.

Me despido, C'YA~

martes, 20 de enero de 2015

Python II: Repetición y Recursión

Siguiendo con Python, hoy comenzamos a ver nuevo contenido, esta vez no tan pesado como la introducción. Les contaré lo que vimos hoy.

Repetición y Recursión

Comando while: puedes repetir eso por favor?.


Comenzando con el contenido de hoy, hablamos del comando while, que en español vendria siento la palabra "mientras".

Este comando es bastante util, ya que lo que hace es repetir una instrucción ante una determinada condición.

tomemos por ejemplo el siguiente codigo:

>>cuentaregresiva = 10
>>while cuentaregresiva > 0:
        >>print (cuentaregresiva),
        >>cuentaregresiva = cuentaregresiva - 1
>>print ("Feliz Año Nuevo!!!")

tenemos una variable que es igual a 10, luego, con el comando while, le indicamos que mientras que esta variable sea mayor que cero, enplee un print de la variable, y que le reste a esta variable una unidad. como nuestra variable es ahora 9, es decir, sigue siendo mayor a 0, el comando while volvera a repetir los comandos indentados debajo de esta, y cuando llege el momento de que nuestra variable sea 0, es decir, que no cumple el requisito del while, el comando dejara de accionarse, lo que dara paso a el print advirtiendo que terminó la cuenta.

nota: Tanto el comando if como el comando while, pertenece a la familia de los comandos pronombre. estos comandos contienen una instrucción seguida de dos puntos (:) que de ser verdadera (true), ejecutan lineas de comandos posteriores. Estas lineas de comandos deben estar indentadas para ser tomadas en cuenta como instruccion de estos comandos (para indentar una linea, simplemente debes presionar TAB (↹) al principio de una linea de codigo.)

Una vez que ya conocemos los comandos pronombres como if y  while, podemos hacer el siguiente ejercicio:

crear un juego de adivinanzas, donde el jugador tiene un máximo de 6 jugadas para adivinar un numero al azar del 1 al 20, y que en cada intento fallido, mencione si el numero es muy alto o muy bajo.



Primero nesecitamos un numero al azar, por ello, importamos la libreria random. (ignoren las siguientes 4 lineas de codigo que vimos en la entrada anterior.)

le mostramos las instrucciones a nuestro usuario, luego tomamos un numero aleatorio del 1 al 20 con random.randint(). Lo guardamos en una variable.

le pedimos al jugador que introduzca un numero con un imput(). Lo guardamos en otra variable.

introducimos en otra variable el numero de oportunidades (del 0 al 5 hay 6 pasos de diferencia.)

en un comando while, ponemos la condicion de que si la jugada no es igual al numero elegido por la cpu, y que las oportunidades son mayores a cero:

si el numero es mas bajo que el elegido por la cpu, se te informa, se te resta una oportunidad, y se repite el comando imput() para volverlo a intentarlo, y si el numero es mas alto, se te informa, se te resta una oportunidad, y se repite el comando imput() para volverlo a intentarlo.

El comando while terminará una vez que una de sus condiciones sea falsa. Si el numero es igual a la jugada, o si el numero no es igual a la jugada, se imprimira su respectivo mensaje.

Comando def: Estoy pensando en pensar sobre el pensamiento.


Ahora que ya sebemos repetir comandos, comenzaremos a hacer nuestras propias recursiones.

La recursión es definir algo en terminos de sí mismo.

un ejemplo de esto puede ser la palabra "Directorio" o "Árbol genealogico".
  • un directorio es una estructura que contiene los archivos y directorios (más pequeños).
  • un árbol genealógico comienza con una pareja que tiene hijos, cada uno con su propio sub-árbol genealogio.
Los lenguajes de programación (incluyendo Python) usan la recursividad muy a menudo, lo que significa que, con el fin de resolver un problema, las funciones pueden llamarse a sí mismas para resolver sub-problemas más pequeños.

Una vez que ya entendemos la recursión, podemos empezar a ver el comando def.

El comando def se utiliza para definir una función creada por nosotros.

Para ver como funciona la recursión, definiremos la función factorial en Python.

Sabemos que la regla de la función factorial es n! = n * (n-1)!, por lo tanto definiremos la siguiente función:

>>def factorial(n):
        >>if n == 0 or n ==1:
                >>resultado = 1
        >>if n>1:
                >>resultado = n * factorial(n - 1)
        >>return resultado


Empezamos a definir la función factorial(n), en la que si n es 0 o 1, la variable resultado será 1. Pero en el caso de que sea mayor que 1, el resultado sera n * la funcion factorial de n-1. Es entonces que la función internamente actua dentro de si misma,  tantas veces como sea nesesario.

Finalmente se ocupa el comando return que te devuelve el resultado ya calculado en ventana.

Tarea y Desafio.

Ahora les mostraré una pequeña tarea que tuve que hacer para hoy: Tuve que crear un juego de Cachipún en el que el usuario compite con mi codigo, usando comando if y while.

Pueden probar mi codigo online haciendo click aquí.
Y para que puedan saber si de verdad estan aprendiendo algo, les daré un pequeño desafio: Desde la segunda, hasta la siguiente ronda, hay 100% de probabilidad de ganar en la siguiente, solo si sabes como funciona el codigo. Porque?

Dejen su respuesta en los comentarios :3

Aqui me despido, cualquier duda consulten, y ojala que mañana pueda explicarles mucho mas.

C'YA~

lunes, 19 de enero de 2015

Phyton I: Introducción y conceptos basicos.

Ok, tal como dije ayer, hoy comenzamos a estudiar el lenguaje de programación conocido como Phyton. Desde ahora explicaré con mayor detalle estos ultimos dias.

INTRODUCCION

 

Un poquito de historia...


Python, bautizado así por la serie de peliculas "Monty Python" es uno de los lenguajes de programación mas usados en todo el mundo.

Fue creado por Guido van Rossum en los años 90:
"Estaba buscando un projecto de programación como "pasatiempo" que me mantubiera ocupado durante las semanas navideñas"
Python se puede considera el lenjuage de programación ideal para los principiantes, ya que este puede "escribir" un Software en una linea de codigo en lo que Java se nesecitarian unas 5 aproximandamente.

 

Como funciona Python?


Python funciona a base de comandos y lineas de programación. Un comando indica una acción especifica que Python debe ejercer en una linea.

Python interpreta tu entrada, y el el caso de que haya un error o incoherencia, este te explica que es lo lo que no cuadra en tu codigo para corregirlo.

 

Variables y almacenamiento de datos.


En python, existen variables, en la cuales puedes almacenar datos y darles un nombre especifico.

La sintaxis para estas variables es:
Variable = Dato

Existen 2 tipos de datos clave para almacenar: los numeros y las strings.

Los numeros son autoexplicativos, simplemente se almacena un valor numerico y se les da un nombre, por ejemplo >>x = 3

Tambien puedes emplear operaciones aritmeticas si lo deseas, como >>x = 2+3

Las strings, o cadenas en español, puede contener letras, números, y símbolos, en forma de una expresión. es importante que la string este expresada entre "comillas", para ser considerada como tal.

un ejemplo seria >>y = "niggación Barria" (chiste interno.)

Cabe destacar que las cadenas se pueden "sumar" con el signo "+", esto es util para unir diferentes tipos de datos, que veremos mas adelante.

es algo asi como >>y = "niggación " + "Barria"

 

Operaciones logicas y Booleanas.


True y False ,o verdadero y falso en español resultan ser otros tipos de datos utiles a la hora de programar. y si bien puedes almacenarlo directamente dentro de una variable, tambien puedes obtenerlo calculandolo con otros datos usando operaciones logicas.

Las operaciones logicas son comparaciones entre 2 datos que pueden ser verdaderas o falsas. se usan operadores logicos para obtener el resultados. estos operadores son:
  • < (Menor que)
  • > (Mayor que)
  • <= (Menor o igual que)
  • >= (Mayor o igual que)
  • == (Igual a)
  • != (Diferente de)
Un ejemplo de esto seria:

>> x = 0 < 6
x = false

>> y = 5 != 3
y = true

 

Comandos importantes


Python cuenta con una infinidad de comandos , pero por ahora veremos solo 2 que me parecen los mas importantes:

 El comando mas usado en Python podria considerarse el comando print, su utilidad es escribir en pantalla una variable, un dato o un mensaje que pueda ser visto por el usuario de nuestro codigo.

Otro comando bastante usado es el comando if, es una sentencia condicional que ejecuta un código específico después de controlar si la expresión es verdadera, y caso contrario si es falsa.

 

Help(), import y muchas cosas mas.


Python esta lleno de comandos, tantos que explicarlos llevaria mucho tiempo. Los invito a investigar tambien por su cuenta, y ver los comandos que se pueden ejecutar en python, y por si no entienden alguno, pueden usar el comando help(comando) en Python para encontrar ayuda acerca de ello.

y por si los comando que hay en Python no son suficientes, o por lo menos no los nesecitados, Python cuenta con muchas librerias con comandos mas especificos, como por ejemplo la libreria random, dedicada a los numeros pseudo-aleatorios. Para usar comandos de estas librerias, pueden usar import.nombre_de_la_libreria para usar comandos.

Pongamonos manos a la obra!


Armate con un Python Scripter, y pongamonos a escribir lineas de codigo. Uno de los codigos mas simples de programar es la de preguntar tu nombre:

>>print ("Hola!")
>>print ("Cual és su nombre?")
>>miNombre = raw_input()
>>print (miNombre + "?, que nombre mas extraño.")


Al correr este codigo, primero se mostrar'a en pantalla un saludo, y luego una pregunta que incita a introducir un nombre en la pantalla de comando. Luego, el comando raw_imput toma lo escrito por el usuario y lo almacena en la variable "miNombre", para luego mostrar un mensaje que confirma que recibio el valor, mas una "opinión" acerca de este.

Ahora probemos con algo mas complicado:

>>print ("Cual és tu nota?")
>>nota = input()
>>nota = int(nota)
>>if nota >= 4:
>>print ("Estas Aprobado, felicidades!")

>>if nota < 4:
>>print ("Estas Reprobado, esfuerzate mas.")


Esto es casi lo mismo que el ejercicio anterior, solo que ahora, lo que te piden que introduzcas es un valor numerico entero. al tomar este valor, se utiliza unos operadores logicos, junto con el comando if. Gracias a esto, si la nota es mayor o igual a 4, Python escribe la felicitación, pero si es menor a 4, el codigo te informa de que fuiste reprobado por el programa.

Finalmente, les mostrare un pequeño desafio que tuve que hacer hoy en clase: crea un juego de "Piedra, papel y tijeras", en el que compita con una computadora.



Primero, importe de la libreria random, para randomizar los movimientos de la computadora. Luego, pedi que se introdujera el movimiento a base de un numero (piedra era 1, papel 2, y tijera 3) y que almacenara el dato en la variable "jugada".

dependiendo de la jugada, y de la de la coputadora, se mostrarian 2 mensajes diciendo nuestros movimientos.

luego, con comandos if, puse en una linea los casos en la  que la computadora ganara, para que si eso fuera verdad, se mostraria un mensaje recalcando esto.  Los mismo para los casos en los que el jugador ganara.

 

Opinion personal


Bueno, puedo decir que utilizar Python es bastante simple, te da bastante libertad, esta super  simplificado. Ojalá que pueda seguir aprendiendo mas acerca de esto los siguientes dias, y poder darles mas info al respecto. Siganme esta semana, porque voy a seguir actualizando esto, y si todo sale bien, el viernes les tendré una sorpresa :D

C'YA~ (y mesa tambien.)


domingo, 18 de enero de 2015

Matlab V (Final): Simulacion y visualizacion y juego de la vida

Hoy es el ultimo dia de Matlab, y como ultimo contenido terminamos de ver la visualizacion de graficos tipo "pcolor" y simulaciones a travez del tiempo con el comando "pause".
Supongamos que tenemos una barra metálica inicialmente a 0º. El extremo izquierdo siempre se mantiene a 0º, pero el extremo derecho se sube a 100º y el calor empieza a propagarse hacia la izquierda.
 

Para simular esto, supondremos que la barra estácompuesta por segmentos, y que a cada paso, un segmento pasa a tener la temperatura promedio con los que lo rodean. 
Grafico longitud de la barra X tiempo, donde el color azul representa la temperatura 0º, y el rojo 100º.
Con estos comandos, tuvimos que recrear el juego de la vida de John Horton Conway, nombre que me sonó, ya que era un comando que estaba en el sandbox "The Powder Toy" que solia jugar unos años atras (altamente recomendado.)

Las reglas de este juego son simples:

Se juega sobre un tablero infinito de celdas. Inicialmente algunas celdas están vivas, y el resto muertas.
 
En cada jugada, para cada celda se calcula el número de vecinos vivos que la rodean (v) y se aplica el siguiente algoritmo para calcular el nuevo estado para esa celda:
  • žSi la celda está viva y v<2, muere por soledad.
  • žSi la celda está viva y v≥4, muere por sobrepoblación.
  • žSi la celda está muerta y v=3, pasa a estar viva.
  • žEn cualquier otro caso, mantiene su estado.



una vez calculadas todas las celdas afectadas, se pasa a la siguiente generación, y el ciclo se repite una y otra vez hasta el infinito.

"Glider" (cuerpo que se mueve de manera infinita) programado en Matlab por mi (y mis profes,claro).
Y con esta ultima actividad, terminamos la semana de Matlab y abrimos paso a la semana de Python (Yay!).

Esten atentos a mas actualizaciones del blog en esta ultima semana, porque empezaré a entregar muchisimo mas detalle en estas proximas entradas xD

CYA (y mesa tambien).


jueves, 15 de enero de 2015

Juego Flash #2: A dance of fire and ice

http://fizzd.itch.io/a-dance-of-fire-and-ice

Dia 9: Matlab IV: Matrices, Cuadrado magico y sistema de ecuaciones.

Hoy en clase vimos lo que eran las matrices. Las matrices son el almacenamiento bidimensional de numeros a travez de filas y columnas.

Usando matrices tuvimos que programar un Cuadrado magico. Un cuadrado magico es una tabla que al sumar sus filas, columnas y diagonales por separado, todas dan el mismo resultado.


Tambien vimos como escribir sistemas de ecuaciones como si de matrices se tratara, y asi poder trabajar con ellas en MatLab.


miércoles, 14 de enero de 2015

Dia 8: Matlab III: scripts, funciones y el problema del granizo.

hoy en Matlab comenzamos a ver como hacer scripts o M-files, algo bastante util para definir funciones personalizadas, y simplificar ciertas acciones a la hora de utilizar el programa.

Tambien observamos una situacion matematica un poco extraña.
Un granizo cae desde altura n y sigue las siguientes reglas:
ž-Si está a una altura n par, baja a altura n/2
ž-Si está a altura n impar, sube a altura 3n+1
Algo importante de destacar es que para toda altura inicial que sea mayor que 1, el granizo llega eventualmente al suelo, que es la altura 1.

Dada esta información, y atravez de los scripts, debiamos escribir una función “demora(n)” que entregara el
número de pasos que demora la caída desde altura n, y despues utilizar la función "Scatter" (graficador de puntos) para visualizar esta demora dependiendo de n a medida que ganara altura.
 La secuencia  es aleatoria?
Esto fue lo que visualizamos.

Al parecer, la secuencia sigue un patron con diferentes curvaturas, algunas que van de manera ascendente, y otras decendientes.