Operaciones Binarias en Python

viernes, 15 de agosto de 2008

En Python podemos operar con numeros binarios también. Primero recordemos un poco:
por temas de simplificacion vamos a trabajar hasta con cuatro bits.

Decimal

Binario

0

0000

1

0001

2

0010

3

0011

4

0100

5

0101

6

0110

7

0111

8

1000

9

1001

10

1010

11

1011

12

1100

13

1101

14

1110

15

1111


Es un poco complicado trabajar con numeros binarios, en Python simulamos trabajar con ellos pero se trabaja con numero decimales. Esto es así:

Operador AND
>>> 14 & 5
4

internamente esto opera:


14 = 1110
AND
5 = 0101
------
4 = 0100

De izquierda a derecha:
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
1 AND 0 = 0


>>> 9 & 3
1

Internamente:

9 = 1001
AND
3 = 0011
--------
1 = 0001

De derecha a izquierda:
1 AND 1 = 1
0 AND 1 = 0
0 AND 0 = 0
1 AND 0 = 0

Operador OR
>>> 14 | 5
15


14 = 1110
OR
5 = 0101
--------
15 = 1111


De derecha a izquierda:
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 1
1 OR 0 = 1

>>> 9 | 3
11


9 = 1001
OR
3 = 0011
--------
1 = 0001


De derecha a izquierda:
1 OR 1 = 1
0 OR 1 = 0
0 OR 0 = 0
1 OR 0 = 0


Operador XOR
>>> 14 ^ 5
11

14 =     1110

XOR
5 = 0101
--------
15 = 1011
De derecha a izquierda:
0 OR 1 = 1
1 OR 0 = 1
1 OR 1 = 0
1 OR 0 = 1


>>> 9 ^ 3

10

9 =      1001

XOR
3 = 0011
--------
1 = 1010

1 XOR 1 = 0
0 XOR 1 = 1
0 XOR 0 = 0
1 XOR 0 = 1


Google por dentro

miércoles, 2 de julio de 2008

Un documento imperdible para los seguidores de Google hecho por el canal de television TN
Mirá lo que nos espera cuando entremos a Google.

Parte 1


Parte 2


y...? que dicen? comenten que opinan

Momentos historicos en Internet

sábado, 28 de junio de 2008

Me enteré de cosas que jamás habia ni eschcuchado, los momentos van desde como fue que empezó a expandirse las webcam hasta el "download day", ¡BUENISIMO! acá el link.

...

Conjuntos en Python

miércoles, 25 de junio de 2008

Como en Python todo es un objeto, los conjuntos no son la excepcion. A traves de métodos, podremos operar entre conjuntos.

Todo lo que esté con el símbolo indica que no es necesario leerlo, pero puede resultar interesante para aquellos que no saben en que consiste cada operacion.

Declaración

Primero, ¿como declaramos un conjunto?
En python, cualquier objeto iterable lo podemos "transformar" en un conjunto.

>>> T = (1,2,3,4,5,5)
>>> conjuntoT = set(T) #Con set() definimos el conjunto
>>> conj
untoT
set([1, 2, 3, 4, 5])

>>> L = [1,2,3,4,5,5]
>>> conjuntoL = set(L)
>>> conjuntoL

set([1, 2, 3, 4, 5])


>>> C = 'Hola Mundo'
>>> conjuntoC = set(C)

>>> conjuntoC

set([
'a', ' ', 'd', 'H', 'M', 'l', 'o', 'n', 'u'])


Por definicion de la teoría de conjuntos los elementos perteneciente a un conjunto no se re repiten, fijense en los dos primeros casos en T y L se repite el 5 y en conjuntoT y conjuntoL, solo hay un 5. Lo mismo pasa en el tercer ejemplo.


Unión
>>> A = set([1,2,3,4,5])
>>> B = set([3,4,5,6,7])
>>> A|B
set([1, 2, 3, 4, 5, 6, 7])


Definicion: Dado un conjuto A y un conjuto B cualquiera. La unión de conjuntos A y B (se denota AB)consiste en un nuevo conjunto el cual contiene todos los elementos A y B.

Tambien podría haberse hecho A.union(B)

Interseccion
>>> A = set([1,2,3,4,5])
>>> B = set([3,4,5,6,7])
>>> A&B

set([3, 4, 5])


Definicion: Dado un conjuto A y un conjuto B cualquiera. La intersección de conjuntos A y B (se denota A B) consiste en un nuevo conjunto el cual contiene todos los elementos que tengan en común A y B.

Tambien podría haberse hecho A.intersection(B)

Diferencia
>>> A = set([1,2,3,4,5])
>>> B = set([3,4,5,6,7])

>>> A-B
set([1, 2])


Definicion: Dado un conjuto A y un conjuto B cualquiera. La diferencia entre un conjuntos A y B (se denota A-B) consiste en un nuevo conjunto el cual contiene todos los elementos de A y que no pertenezcan a B.

Tambien podría haberse hecho A.difference(B)


Diferencia Simétrica
>>> A = set([1,2,3,4,5])
>>> B =
set([3,4,5,6,7])
>>> A^B

set([1, 2, 6, 7, 8])


Definición: Dado un conjuto A y un conjuto B cualquiera. La diferencia simétrica de conjuntos A y B (se denota A Δ B) consiste en un nuevo conjunto el cual contiene todos los elementos de A y B que no tengan en comun.

Tambien podría haberse hecho A.symmetric_difference(B)

¿Es subconjunto?
>>> B = set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> A = set([1,2,3,4,5])
>>> A.issubset(B)
True
>>> B.issubset(A)
False


Definición: Un conjuto A es subconjunto de B cuando todos los elementos de A tambien pertenecen a B.


¿Es superconjunto?
>>> B = set([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> A = set([1,2,3,4,5])
>>> B.issuperset(A)
True
>>> A.issuperset(B)
False


Definición: Un conjunto B es superconjunto de A si y solo si A es subconjunto de B


Pertenencia
>>> A = set([1,2,3,4,5])
>>> 1 in A
True
>>> 1 not in A
False
>>> 10 in A
False
>>> 10 not in A
True


Definición: Matemáticamente no tiene una definición, pero podemos decir que es un termino que usamos para saber si un elemento está o no dentro de un conjunto.


Las operaciones las hicimos entre dos conjuntos, pero podemos operar con la cantidad de conjuntos que querramos.
Hasta acá las operaciones definidas por la teoría conjuntista, pero tambien existen otras en Python para hacer mas fácil la programación.

Agregar un elemento al conjunto
>>> A = set([1,2,3,4,5])
>>> A.add(0)
>>> A
set([0, 1, 2, 3, 4, 5])


Quitar un elemento al conjunto
>>> A = set([0,1,2,3,4,5])
>>> A.discard(2)
>>> A
set([0, 1, 3, 4, 5])


Quitar todos los elementos de un conjunto
>>> A = set([0,1,2,3,4,5])
>>> A.clear()
>>> A
set([])


Copiar un conjunto
>>> B = A #acá decimos que B es igual a A, por lo que cualquier cambio en A tambien se producirá en B y viceversa
>>> B
set([1, 2, 3, 4, 5])
>>> A
set([1, 2, 3, 4, 5])
>>> B.add(987)
>>> B
set([1, 2, 3, 4, 5, 987])
>>> A
set([1, 2, 3, 4, 5, 987])


Probablemente no querramos que pase eso, para resolver este problema existe el método .copy()
-----------------------------------------------

>>> A = set([1,2,3,4,5])
>>> B=A.copy()
>>> B
set([1, 2, 3, 4, 5])
>>> A
set([1, 2, 3, 4, 5])
>>> B.add(987)
>>> B
set([1, 2, 3, 4, 5, 987])
>>> A
set([1, 2, 3, 4, 5])


.update
A.intersection_update(B) equivale a hacer A = A & B o A &= B

A.defference_update(B) equivale a hacer A = A -B o A -= B

A.symmetric_difference_update(B) equivale a hacer A = A ^B o A^=B

A.update(B) equivale a hacer A = A | B o A |= B

¿Que es y por que Python?

martes, 17 de junio de 2008













Si llegaste acá existe un 97.905% de que ya sepas que es un lenguaje de programacion.
Estoy suscrito a una lista de correos llamada Pyar, que es una comunidad de Python en Argentina, su pagina es www.python.com.ar. En dicha lista Manuel Kaufmann hizo sin duda, la mejor pregunta para comenzar con una introducción a Python :


¿Cuales son las características de Python que más te gustan?

hubo aproximadamente 40 respuestas y cantidades de coincidencias:

  • La comunidad que siempre te da una mano.
  • La sintaxis.
  • Fácil de escribir, y fácil de leer.
  • Que es dinámico, y deja ser expresivo.
  • Gran cantidad de librerías y por ello, evitan tener que "reinventar la rueda".
  • Permite tanto, desarrollo de aplicaciones de escritorio como web, scripts.
  • Fácil de aprender.
  • Es libre.


Pocos lenguajes cuentan con estas características. Vamos de a poco.

La comunidad: así como nombré anteriormente la lista de Pyar, existen otras listas de correo y foros también, la mayoría siempre está dispuesta a ayudarte y con la mejor onda, que por propia experiencia no en todos lados se ve, esto supongo que se ve por la filosofía de Python.

La sintaxis: Para los que no saben, no voy a entrar muy en detalle porque van a salir corriendo gritando por la calle y vaya uno a saber que más. La sintaxis en un lenguaje tiene que ver con el orden en que se ponen las palabras. Por ejemplo, decir:
"casa voy a mañana tu"
es una sintaxis incorrecta en nuestro lenguaje, lo correcto en el castellano sería decir:
"mañana voy a tu casa"
Con los lenguajes de programación pasa lo mismo, la importancia de la sintaxis en un lenguaje radica en la facilidad de entender, aprender y la comodidad a la hora de escribir código.

La sintaxis de Python es realmente sencilla.
Para los que entienden un poco, no hay palabras reservadas para iniciar o finalizar bloques de programas, tampoco es necesario definir las variables.

Fácil de escribir, y fácil de leer: Esto también es importantisimo por lo ya antes mencionado. Que contenga esta particularidad hace que sea mucho mas fácil de aprender, programar. En resumen, con esta característica la vida programativa es sencillamente feliz.

Que es dinámico, y deja ser expresivo: Que un lenguaje sea dinámico significa que el mismo lenguaje encarga de liberar espacio en la RAM, entre otras cosas, lo que nos permite a nosotros como programadores solo preocuparnos por hacer nuestro programa. Esto no pasa en lenguajes estáticos como C, Pascal, JAVA, por decir algunos.
Que sea expresivo, básicamente quiere decir que escribimos poco código y damos muchas instrucciones.

Gran cantidad de librerías y por ello, evitan tener que "reinventar la rueda": Las librerías (bibliotecas o módulos) nos proporcionan a nosotros como programadores, funciones (tareas o actividades) que nuestro programa puede utilizar sin que nosotros las tengamos que escribirlas, útil ¿no?. Python cuenta con muchisimas librerías que nos ahorran bastante trabajo, por ejemplo una librería con la que podemos crear archivos .rar, o que nos permite manejar horas y fechas, interfaces gráficas, funciones random, etc.

Permite tanto, desarrollo de aplicaciones de escritorio como web, scripts: significa que tiene el potencial de poderlo usar para casi cualquier cosa, podemos desarrollar aplicaciones comerciales como un sistema de facturación, aplicaciones científicas como programas de matemática, en la bioinformática, desarrollo web y juegos.
Como dato anecdótico para que vean de lo que hablo Youtube fue hecha en Python y en su pagina oficial www.python.org dice que la NASA lo usa.

Fácil de aprender: bueno, creo que lo dejé claro con los puntos anteriores: su sintaxis y Fácil de escribir, y fácil de leer.

Es libre: Es decir, descargando el intérprete de Python podemos estudiar su código, modificarlo y hacer nuestro propio interprete.

Además de lo antes mensionado:
  • Programación Orientado a Objetos.
  • Programación Estructurada .
  • Un poco de programación funcional.
  • Es un lenguaje interpretado.
  • Multiplataforma: es decir, funciona en UNIX, Solaris, Linux, DOS, Windows, Mac OS, OS/2.

Espero haberle generado un poco de intriga a ver si se ponen a ver algo ;)

Documentación sobre Python en español:
Busquen porque hay mucho mas!
Espero que les haya servido de algo.

Empezar a programar

viernes, 13 de junio de 2008

Bueno, este es todo un tema. Voy a tratar de muy desde cero a ver...
Primero que nada, como sabrán... o no, para programar existen los lenguajes de programación.

¿Que son los lenguajes de programación?
voy a tratar de explicar esto de una forma fácil y sin entrar en detalles. Un lenguaje de programación es una "forma" de darle instrucciones a una maquina para que haga una actividad.


Existen muchisimos Lenguajes de Programación:

  • JAVA
  • Pascal
  • Python
  • C
  • C++
  • C#
  • Ruby
  • D
  • Visual Basic
  • Delphi
  • Smalltalk
  • ADA
  • Prolog
  • Lisp
Por nombrar solo algunos, para ser un programador no es necesario saberse todos los lenguajes que existen porque es imposible e innecesario.

¿por que existen muchos lenguajes de programación?
Bueno, como todo, a medida que el tiempo avanza, surgen nuevas necesidades sobre las cosas que ya existen y se hacen mas exigentes. de esta manera los lenguajes fueron evolucionando ya que había algunos de estos que no permitan ciertas cosas o se hacia muy tedioso para algunos casos la programación.
Hoy en día hay distintas clasificaciones de los lenguajes de programación, solo definiré una para no hacer esto tan largo y teórico.
Según su nivel
  1. Lenguajes de bajo nivel: estos lenguajes fueron los primeros en ser creados y posibilitan el manejo del hardware, manejar celdas de memoria y microprocesador. Suelen usarse estos lenguajes para la programación de dispositivos electrónicos. Realizar aplicaciones informáticas actuales con estos lenguajes es realmente muy complejo porque se necesitan muchisimos comandos solo para mostrar por ejemplo "hola mundo" por pantalla. Ejemplo de lenguaje de bajo nivel: Assembler, COBOL.
  2. Lenguajes de Alto nivel: se asemejan mas al lenguaje natural, esto los hace ser mas fáciles de entender, y se pueden desarrollar aplicaciones informáticas mucho mas rápido ya que no es necesario tantos comandos. Obviamente que en los lenguajes de alto nivel no se puede tener un control tanto control del hardware como con los de bajo nivel, pero eso muchas veces no es necesario. Ejemplo: C, C++, Python, etc.
¿Que lenguaje me conviene para empezar a programar?
Bueno, es todo un tema y no existe alguien que tenga la razón absoluta, existen distintas opiniones, yo creo que hay cuatro que son los mas recomendables para empezar y son Visual Basic, C, Pascal y Python.

  • Visual BASIC: es un lenguaje un poco viejo, adaptado por Microsoft. Tal vez sea lindo para empezar a programar ya que se hacen ventanas, botones, etc. Pero no es muy potente y ya no se usa en la actualidad. El problema que se creen ventanas y botones por doquier puede generar una "mala costumbre" cuando se quiera aprender otro lenguaje ya que no son así.
  • C: Lenguaje potente si los hay, este es un lenguaje el cual no está de moda pero tampoco se olvidara porque es uno de los lenguajes mas grandes y potentes que existen. Tal vez podría ser un poco complicado al principio para entender o tal vez no, en este caso hay de las dos situaciones.
  • Pascal: Un lenguaje intuitivo que fue creado con el fin de enseñar a programar, pero no tiene aplicaron en la actualidad, deben ser conciencie de que si se inclinan por este lenguaje, no les servirá para luego presentar un currículum.
  • Python: es un lenguaje muy potente y fácil de aprender, intuitivo, en la actualidad se usa mucho y para diversos proyectos, es un lenguaje con muchísimas ventajas y facilidades, pero en mi opinión también puede llegar a "mal acostumbrar" al momento de pasar a otros lenguajes por esas mismas facilidades.
Por supuesto que cada lenguaje tiene sus ventajas y desventajas, espero que hallan sacado algo de provecho de esto. En mi opinión personal Python es el mejor. Pero no se queden solo con este post y evalúen por ustedes mismos y saquen conclusiones.

Matemática Discreta

Muchos tal vez se estén preguntando que es la matemática discreta y hayan hechos chistes fáciles con eso, no se preocupen es natural, todos lo hemos hecho.
Recuerdo que en mi primera clase de matemática discreta en la facultad la profesora inició la clase diciendo: "Bueno, es difícil definir lo que es discreto..." [todos estábamos silenciosos esperado que era lo que iba a decir] "y lo verán con el tiempo" dijo la profesora, y creanme que nunca supimos en realidad lo que era. Como matemática discreta es una materia que me encantó, decidí averiguar por mi mismo.
Como ustedes, quise ponerme a buscar en Internet y me encontré con una sorpresa, tampoco había información muy clara sobre la definición. En wikipedia dice:
"Matemática discreta es la parte de la matemática encargada del estudio de los conjuntos discretos: finitos o infinitos numerables." bueno, es un poco redundante que una palabra se explique con la misma.
mas abajo:
"La matemática discreta estudia estructuras cuyos elementos pueden contarse uno por uno separadamente, sin dar lugar a números decimales ni procesos infinitos. Es decir, los procesos en matemática discreta son finitos y contables." Tal vez un poco mas claro para mí, pero no me aclara del todo el panorama. Esto es interesante: "la matemática discreta es la base de todo lo relacionado con los procesos digitales, y por tanto, se constituye en parte fundamental de la ciencia de la computación, una de las ramas de estudio impartidas en los estudios de Ingeniería Informática." además de Ingeniería Informática, también Ingeniería en Software e Ingeniería en sistemas de Información.

Lo realmente interesante de la matemática discreta mas allá de las definiciones es que tiene un gran contenido lógico que, si realmente se entiende cuando se la estudia, permite ver las cosas mucho mas racionalmente, que es lo que se busca en gran medida en las ingenierías, y mas hacen uso de la lógica las carreras que ya se nombraron debido a que en en estas ingenierías es necesario ser estructurado en los pensamientos, racional y con un buen poder de abstracción para el diseño de algoritmos. En las ingenierías dedicadas en cierta medida a la informática siempre se están trabajando en territorios de poco conocimiento en el cual es necesario ser estructurado con un buen grado de abstracción para poder entender los problemas a los que se enfrentan.

Esta disciplina estudia:

  • Lógica proposicional: Las proposiciones son enunciados los cuales podemos decir si son verdaderos o falsos. Por ejemplo:
    "el sol es amarillo" puedo decir si es V o F.
    "el sol es azul" también puedo decir si es V o F. "la flor" no puedo decir nada al respecto. "lloverá mañana" es una proposición pero habrá que esperar hasta mañana
    para saber si es V o F. "silla" tampoco es una proposición ya que no podemos determinar su valor de verdad o falsedad.
  • Conjuntos: Un conjunto es una colección de elementos (de cualquier tipo), por definirlo de alguna manera, aunque los que saben dicen que no tiene definición. Aquí se estudia las propiedades que tienen los conjuntos, como se puede operar entre dos o mas conjuntos.
  • Álgebra de Boole: esta se ocupa de las proposiciones y su valor de verdad, difiere del álgebra común.
  • Razonamientos.
  • Combinatoria
  • Grafos.
  • Relaciones binarias.
Entre muchas de otras cosas.

La matemática decreta en otro orden de cosas, te hace entender la matemática "convencional", la que todos conocemos.