viernes, 10 de octubre de 2008

Python: ordenar un array de forma aleatoria

Hacía mucho que no escribía nada, así que como no se muy bien que poner, a parte de que ya he empezado en prisión los cursos, y que de 5 alumnos que tenía en el primer turno, ya sólo me quedan 3, pues 2 de ellos han pasado a sección abierta, más comúnmente conocido como tercer grado.

Aparte de esto también me he apuntado a la autoescuela, pero ya comentaré esto otro día. porque el pacto de precios entre ellas se merece una entrada entera.

La cuestión es que llevo mucho tiempo sin programar nada, así que me he decidido a hacer algo, más concretamente un juego de cartas para jugar online, así aprendo/practico programación gráfica, en red, y de la de siempre también, claro.

Bien, pues cuando tenía que barajar las cartas, me paré en seco, ostia, parece un algoritmo complicado, y en python no hay un método shuffle ni nada de eso. Al final el algorito era una chorrada, en 5 lineas esta hecho, pero me asusto por un momento, todo hay que decirlo.

Lo único que hay que hacer es crear un array temporal, elegimos un numero entre 1 y el numero de cartas de la baraja, y la metemos en el array temporal, y claro, quitamos la carta de la baraja.
Repetimos, por que la segunda vez, el numero aleatorio estará entre 1 y 39, etc etc. nos queda algo así (self.listadoCartas sería la baraja).


import random

def barajar(self):
    listaTemp=[]
for indice in range(len(self.listadoCartas)):
numeroAleatorio=random.randint(0,len(self.listadoCartas)-1)
listaTemp.append(self.listadoCartas[numeroAleatorio])
self.listadoCartas.remove(self.listadoCartas[numeroAleatorio])
self.listadoCartas=listaTemp


ACTUALIZACIÓN 16/10/2008
Leyendo un manual de python por encima, he visto que, como no, hay una función que hace justo lo que yo quiero, y el nombre es ..... shuffle(), XDD. incluso hay otra que se llama choice() que nos elige un elemento al azar de un array, ya sea de enteros, de cartas, o de lo que sea.

Yo buscaba la función en los métodos del array, pero esta en las funciones de random. En resumen, que al final, el código nos queda algo más sencillo:


import random

def barajar(self):
    random.suffle(self.listadoCartas)

martes, 29 de julio de 2008

El principio del fin


Mañana terminamos las clases en prisión hasta el curso que viene, y como todos los años, espero poder hacer algo más especial para el último día. Lo normal suele ser hacer una merendola, traer unos sanwiches, con unas cocacolas, o lo que sea, pero por motivos de seguridad esta prohibido introducir comida. Motivos de seguridad es el comodín para permitir o no permitir algo. La monjita que hace los cursos de manualidades y pintura suele traer pastas o palmeritas de chocolate de vez en cuando, pero claro, ¿qué peligro puede haber en que una hija de Dios traiga comida?.

Otra posibilidad es comprar las cosas en el economato, pues eso si esta permitido, pero sólo los internos y los funcionarios pueden comprar ahí, y nosotros no somos ni unos ni otros. Hace algunos años, cuando se podía pagar con dinero real, si podía comprar cosas, y a muy buen precio, cocacolas frías a 25 céntimos, café a 20 céntimos o helados magnum a 60 céntimos. El precio puede ser ese ya que compran en macros y no hay margen de beneficio para nadie, y el sueldo de la gente que trabaja allí, es muy bajo. No es la primera vez que los funcionarios hacen la compra en el economato, para ahorrar dinero, y se llevan todas las natillas, o yogures del economato, y hacen enfurecer a más de uno. Pero como comentaba, ahora ya no usan dinero real, ni billetes de papel exclusivo de la prisión, sino que usan tarjetas electrónicas, en parte para luchar contra el trafico de drogas, etc.

Como tampoco puedo comprar dentro, lo de la merendola se ha terminado, así que haré lo que he hecho en ocasiones anteriores, llevar un juego sencillo, y dejarles jugar durante la hora de clase, el xmoto suele ser la opción elegida, pues es fácil de jugar, y entretenido. Con esto terminamos el curso, nos veremos otra vez en octubre esperando no ver las mismas caras, y en Basauri eso es bastante sencillo, por ser una prisión preventiva, aunque no se muy bien que es lo que previene, pero eso para otro día mejor.

Hoy mismo me ha llegado la noticia de un ex-alumno que salió en libertad, y acaba de dar con su cuerpo en Nanclares de nuevo, por conducir sin carné de conducir, sin seguro, etc etc.
Como estoy apuntado en una academia de estadística, este año me lo pasaré en Bilbao en agosto también, por primera vez en mi vida, nunca antes había pasado un verano lejos de Haro, la tierra de mis amores, tierra de gamberradas y tierra de libertad, que esta poco valorada en estos días de oscuridad.

miércoles, 16 de julio de 2008

Fotografia, cosas que no puedes hacer con una compacta


Las cámaras compactas suelen tener un modo manual muy reducido, si es que lo tienen, y aunque la mayoría de la gente no lo eche en falta, vamos a ver un ejemplo de una fotografía que una compacta de gama media no puede obtener, simplemente porque no nos deja hacer enfoque automático.

Las cámaras compactas hacen casi todo de forma manual, y el enfoque es lo más importante, con lo que cuando pulsamos el botón a la mitad, la cámara mide la luz con el fotómetro, después de eso, enfoca, y luego calcula que diafragma se necesita, y que velocidad de obturación. Algunas cámaras de gama alta te permiten cambiar los dos últimos, pero el enfoque me temo que no, aunque no lo se del todo seguro.
Con las reflex esto cambia, tenemos control total, aunque bien es cierto que el autofocus es lo normal, no es obligatorio, y vamos a ver un ejemplo de para que puede servir enfocar manualmente. Supongamos que queremos sacar un pájaro a través de una reja, enfocando el pájaro que está más lejos. Con las compactas esto no puede hacerse, porque la cámara enfocara lo que encuentre primero, o lo que ocupe más, en este caso la reja.

En esta prueba que hice el otro día pasaba algo parecido, quería sacar una hoja de viña, pero desenfocada, mientras que las flores del fondo las quería perfectamente nítidas. Hice dos fotos, una con autofocus, y otra sin él, el resultado no esta mal.


Con autofocus

Sin autofocus