Archive for the 'Python' Category

Statistics v0.1 Beta

Os acodáis de aquel programa del que os hablé hace un tiempo que había hecho con Python. Pues bien después de dedicarle más tiempo lo he mejorado bastante. En primer lugar seguí los consejos Adri (ver comentario) para corregir algunas partes del código original. Luego seguí añadiéndole más funcionalidades y a la vez probándolas. Sigue leyendo para ver la lista de cambios y el código fuente.

Continuar leyendo ‘Statistics v0.1 Beta’

PyQt4 con Python 3 en Archlinux

Aunque la transición a esta nueva rama por parte del equipo de Archlinux está siendo prácticamente perfecta aún quedan algunos paquetes oficiales por modificar. PyQt, el paquete que contiene las librerías para programas con Python y Qt aún no ha sido actualizado para ser compatible con esta rama y sólo ser encuentra como módulo para Python2.

Tras un rápida búsqueda por el foro de la distribución y en AUR encontré un paquete que nos permite utilizar este módulo en ambas ramas de Python. Cómo siempre podéis instalarlo a mano o con la ayuda de yaourt.

yaourt -S pyqt-py3and2

Tras compilar e instalar el paquete ya tendremos el módulo disponible en Python 3.

Módulos de Python3

Rangos infinitos con itertools en Python

Seguramente si has programado alguna vez en Python hayas tenido que utilizar la función range(). Es muy útil ya que te permite ya que te permite crear rangos de determinadas cifras. Por sí solo puede que no le encontremos gran utilidad pero unido al bucle for la cosa cambia. Nos permite crear bucles con determinados rangos. Un ejemplo sería el siguiente:

for i in range(10):
  print(i)

Continuar leyendo ‘Rangos infinitos con itertools en Python’

[Offtopic] Project Euler, una web interesante

Creo que fue vía twitter cómo conocí esta web. Project Euler es una web pensada para programadores (y matemáticos) en la que se proponen una serie de problemas que tienen que ser resueltos utilizando el ordenador ya que o bien hay que hacer muchas operaciones o se trabaja con cifras muy grandes. La clave para resolver estos problemas es desarrollar un buen algoritmo para posteriormente traducirlo al lenguaje de programación que prefieras. Cuando te registras en la web, en tu pérfil puedes seleccionar el lenguaje con el que más trabajas. En mi caso y por ser el que mejor manejo, Python.

La web no es muy conocida, sólo hay 566 usuarios españoles registrados para que os hagáis una idea, pero está genial. Actualmente cuenta con 314 problemas y van añadiendo nuevos cada poco tiempo. La dificultad es ascendente, es decir, la web está pensada para que a la vez que resuelvas problemas vayas aprendiendo nuevas cosas que necesitarás para niveles posteriores. Eso sí, eres libre de hacer el problema que quieras. Puedes llevar el orden que más te apetezca y si te quedas atascado en alguno siempre puedes seguir avanzando y volver a él más tarde.

De momento llevo resueltos 14 problemas, los diez primeros son bastante sencillos pero luego la cosa se empieza a poner interesante. Os animo a que os registréis y comentéis si os ha gustado.

+ Project Euler

Primer mini-programa en Python: Statistics

He avanzado bastante con Python. Ya me he acostumbrado a los cambios que introdujo la rama 3.0 y creo que puedo decir que ya se pensar un poco más como lo haría un programador. Aquí os dejo un pequeño programa que he hecho aplicando los conocimientos sobre las listas, variables, condiciones y sobre todo los bucles for. He intentado dejar el código lo más ordenado posible con algunos comentarios aclarando lo que hace cada función.

print(">> Statistics v0.1 Alpha")
print(">> Iyán Méndez Veiga")
print(">> me@iyanmv.com")
print("---------------------")

# Todos los datos estadísticos son almacenados en la lista 'datos'. Dentro de esta se almacenan el resto de información, introducida por el usuario o calculada, en otras listas y enteros.

def lineas(n):
  for i in range(n):
    print()

datos = [
         [],   #Valores (0)
         [],   #Frecuencias Absolutas (1)
         [],   #Frecuencias Relativas (2)
         [],   #Frecuencias Abs Acumuladas (3)
         [],   #Frecuencias Rel Acumuladas (4)
         0.0,    #Número total de datos (5)
         [],   #Xi x Ni (6)
         0.0,  #Suma de todos los productos de Xi x Ni (7)
         0.0,  #Media aritmética (8)
         0.0,  #Moda (9)
         0.0,  #Mediana (10)
        ]

def recopilacionDatosCuant():
  print("Bienvenido a Statistics. Has seleccionado el modo variables cuantitativas. Sigue los pasos descritos para realizar un estudio estadístico")
  seguir = True
  # Proceso para añadir los valores y frecuencias que deseé el usuario
  while seguir == True:
    lineas(1)
    valor = float(input("Inserte valor de la variable: "))
    datos[0].append(valor)
    frecuencia = float(input("Inserte frecuencia absoluta: "))
    datos[1].append(frecuencia)
    lineas(1)
    if input("> ¿Añadir más valores? s/n ") == "n":
      seguir = False

def recopilacionDatosCualit():
  print("Bienvenido a Statistics. Has seleccionado el modo variables cualitativas. Sigue los pasos descritos para realizar un estudio estadístico")
  seguir = True
  # Proceso para añadir los valores y frecuencias que deseé el usuario
  while seguir == True:
    lineas(1)
    valor = str(input("Inserte valor de la variable: "))
    datos[0].append(valor)
    frecuencia = float(input("Inserte frecuencia absoluta: "))
    datos[1].append(frecuencia)
    lineas(1)
    if input("> ¿Añadir más valores? s/n ") == "n":
      seguir = False

def analizandoDatosCuant():
  "Esta función calcula todo lo necesario para futuros estudios estadísticos"
  # En un mismo bucle se calcula el número total de datos y las frecuencias absolutas acumuladas.
  datos[5] = 0.0
  frecAbsAcu = 0.0
  for i in datos[1]:
    datos[5] += i
    frecAbsAcu += i
    datos[3].append(frecAbsAcu)

  # Aquí se calculan y guardan las frecuencias relativas.
  for i in datos[1]:
    frecRel = i/datos[5]
    datos[2].append(frecRel)

  # Aquí se calculan las frec. rel. acumuladas.
  freRel = 0
  for i in datos[2]:
    datos[4].append(frecRel)
    frecRel += i

  # Aquí se calculan los productos de Xi x Ni y el sumatorio de los mismos.
  count = 0
  while count < len(datos[0]):
    producto = float(datos[0][count]) * float(datos[1][count])
    datos[6].append(producto)
    datos[7] += float(producto)
    count += 1

def analizandoDatosCualit():
  "Esta función calcula todo lo necesario para futuros estudios estadísticos"
  # En un mismo bucle se calcula el número total de datos y las frecuencias absolutas acumuladas.
  datos[5] = 0.0
  frecAbsAcu = 0.0
  for i in datos[1]:
    datos[5] += i
    frecAbsAcu += i
    datos[3].append(frecAbsAcu)

  # Aquí se calculan y guardan las frecuencias relativas.
  for i in datos[1]:
    frecRel = i/datos[5]
    datos[2].append(frecRel)

  # Aquí se calculan las frec. rel. acumuladas.
  freRel = 0
  for i in datos[2]:
    datos[4].append(frecRel)
    frecRel += i

def parametrosCentralizacionCuant():
  "Cálculo de media aritmética, Moda y Mediana"
  # Calculando la media aritmética "datos[8]":
  datos[8] = datos[7] / datos[5]

  # Calculando la moda "datos[9]":
  for i in range(len(datos[0])-1):
    if datos[1][i] > datos[9]:
      datos[9] = datos[1][i]

  # Calculando la mediana "datos[10]":
  nDatos = datos[5] / 2.0
  n = 0
  for i in datos[3]:
    n += 1
    if i < nDatos:
      continue
    elif i == nDatos:
      datos[10] = (float(datos[0][n-1]) + float(datos[0][n])) / 2
      break
    else:
      datos[10] = datos[0][n-1]
      break

def parametrosCentralizacionCualit():
  "Cálculo de la Moda"
  # Calculando la moda "datos[9]":
  for i in range(len(datos[0])-1):
    maxima = 0
    if datos[1][i] > maxima:
      maxima += datos[1][i]
      datos[9] = datos[0][i]

def tablaFrecuenciaCuant():#Hay que mejorar esta sección MUCHO!!
  lineas(2)
  print("Valores: ", datos[0])
  print("Frecuencias Absolutas: ", datos[1])
  print("Frecuencias Relativas: ", datos[2])
  print("Frecuencias Abs. Acu.: ", datos[3])
  print("Frecuencias Rel. Acu.: ", datos[4])
  print("------------------------------------")
  print("Número total de datos: ", datos[5])
  print("La media aritmética es: ", datos[8])
  print("La moda es: ", datos[9])
  print("La mediana es: ", datos[10])
  lineas(1)
  print("------------------------------------")
  print(">> Statistics v0.1 Alpha")
  print(">> Iyán Méndez Veiga")
  print(">> me@iyanmv.com")

def tablaFrecuenciaCualit(): #Hay que mejorar esta sección MUCHO!!
  lineas(2)
  print("Valores: ", datos[0])
  print("Frecuencias Absolutas: ", datos[1])
  print("Frecuencias Relativas: ", datos[2])
  print("Frecuencias Abs. Acu.: ", datos[3])
  print("Frecuencias Rel. Acu.: ", datos[4])
  print("------------------------------------")
  print("Número total de datos: ", datos[5])
  print("La moda es: ", datos[9])
  lineas(1)
  print("------------------------------------")
  print(">> Statistics v0.1 Alpha")
  print(">> Iyán Méndez Veiga")
  print(">> me@iyanmv.com")

opcionInicial = input("¿Va a trabajar con variables cuantitativas(1) o cualitativas(2)? ")
lineas(1)
if opcionInicial == "1":
  recopilacionDatosCuant()
  analizandoDatosCuant()
  parametrosCentralizacionCuant()
  tablaFrecuenciaCuant()
elif opcionInicial == "2":
  recopilacionDatosCualit()
  analizandoDatosCualit()
  parametrosCentralizacionCualit()
  tablaFrecuenciaCualit()
else:
  print("Opción no validad. Fin del programa.")
  print("------------------------------------")
  print(">> Statistics v0.1 Alpha")
  print(">> Iyán Méndez Veiga")
  print(">> me@iyanmv.com")
  lineas(2)

lineas(1)

Si pueden echarle un vistazo y comentarme los fallos o las mejoras que se os ocurran me sería muy útil. Para las vacaciones tengo pensado añadirle los parámetros de dispersión (es un programa para realizar estadísticas), mejorar y mucho la tabla de frecuencias (ahora está un poco cutre presentada) y si me animo quizás hacerle una pequeña interfaz gráfica, aunque para esto último aún tengo que aprender un poco para hacerlo.

DescargaStatistics.py

“Hola Mundo” en Python 3

Mirando por internet me he dado cuenta de que pocas webs han actualizado el famoso “Hola Mundo” para el lenguaje de programación Python. Si bien es cierto que pocas distribuciones GNU/Linux han actualizado este lenguaje de programación a la versión 3. La recién salida del horno Fedora 14 trae Python 2.7, por ejemplo. No está de más ir actualizando nuestras aplicaciones a la nueva rama para que cuando la actualización se generalice no haya demasiados problemas. Así que aquí os dejo el Hola Mundo en Python 3.x.

#!/usr/bin/env python
# encoding: utf-8

#Recuerda que en Python 3.x, print deja de ser una declaración y pasa a ser una función, print().
print("Hola Mundo!")

+ print en Python 3 es print()

print en Python 3 es print()

Desde la reciente actualización de Python a la rama 3.x en Archlinux he leído por los foros los problemas que está teniendo la gente. También me han llegado correos y un comentario. En la mayoría de las ocasiones (por no decir todas) todos los problemas vienen dados por el cambio en print.

En Python 2.x print era considerado un statement (declaración) y se escribía de la siguiente forma:

print "Texto que queríamos mostrar"

En Python 3, print se convierte en una function (función) y pasa a escribirse de esta forma:

print ("Texto que queremos mostrar")

Como veis, se trata de un cambio importante y seguramente afecta a todos los programas escritos en Python, pero tiene fácil solución. En Archlinux, por ejemplo, casi todos los programas en Python que se encuentran en los repsositorios oficiales funcionan perfectamente. La cosa cambia con las paquetes que instalemos desde AUR donde, de momento, tendremos que recurrir a python2 para evitar problemas.

Hello Python3!

Conociendo este cambio a continuación os dejo unos ejemplos de cómo se escribía antes y cómo se debe escribir ahora:

print "La respuesta es", 2*2
print("La respuesta es", 2*2)

print x,
print(x, end=" ")

print
print()

print >>sys.stderr, "fatal error"
print("fatal error", file=sys.stderr)

print (x, y)
print((x, y))

Python 3 | What’s New In Python 3.0

Python 3 llega a Archlinux

Con las últimas actualizaciones de paquetes, Archlinux ha actualizado Python a la rama 3.x. Aún se mantiene la rama 2.x, en concreto la versión 2.7, pero con el nombre del binario python2.

Esto significa que todas las aplicaciones ahora utilizarán por defecto la nueva rama de este lenguaje de programación. Pero que no cunda el pánico, se han actualizado también todos los paquetes que dependían de Python para que no haya problemas. Eso sí, sed pacientes con los paquetes de AUR hasta que se actualicen todos los pkbuild.

Una vez más, Archlinux apostando por la última tecnología sin descuidar la estabilidad.

Archlinux | Python is now Python 3

Calculando π con Python

¿Cuántos decimales creéis que se podrían calcular en 1 segundo? ¿Y en 0,024 s? Por supuesto esto depende de la potencia de vuestro ordenador. Si queréis comprarlo aquí os dejo un programa en Python que permite calcular los decimales de π que queramos.
#!/usr/bin/env python
# -⁻- coding: UTF-8 -*-
print "   πππππππππππ"
print "   π π     π"
print "     π     π"
print "     π     π"
print "  Pi Calcutator"
print

def arccot(x, unity):
    sum = xpower = unity // x
    n = 3
    sign = -1
    while 1:
        xpower = xpower // (x*x)
        term = xpower // n
        if not term:
            break
        sum += sign * term
        sign = -sign
        n += 2
    return sum

def pi(digits):
    unity = 10**(digits + 10)
    pi = 4 * (4*arccot(5, unity) - arccot(239, unity))
    return pi // 10**10

# En este caso se calculan los 1000 primeros decimales de π. Modifica este valor para calcular los que quieras.

print pi(1000)

# Comento esto por lo que dijo Adri. Siempre podéis modificarlo a vuestro gusto.
#decimales=int(raw_input("Inserte el número de decimales que desea calcular: "))
#print pi(decimales)

Si además queremos saber el tiempo ejecutamos el programa con el comando time delante. Por ejemplo, de esta forma:

time ./pi.py

 

Calculando π

 

Y a vosotros, ¿cuánto os tarda en calcular 1000 decimales?

Si quieres aprender a programar sé creativo

Llevo ya varias semanas leyendo y escribiendo programas en Python y si he aprendido algo en este tiempo es que una de las virtudes de todo buen programador es la creatividad. A la hora de crear un programa de cero te planteas un problema. Al nivel en el que estoy suele ser algo muy sencillo, por ejemplo, insertar un número y que el ordenador devuelva un número aleatorio con las cifras iguales al número que hayamos insertado. Luego buscas una solución y a partir de ahí empiezas a pensar las distintas posibles formas de realizarlo. ¿Cuál es mejor y por qué? Estas son las preguntas que debes responderte para escoger una u otra opción. Por supuesto la cosa se complica mucho en un programa de “verdad” donde no es un problema, sino cientos y son miles las posibles soluciones.

Continuar leyendo ‘Si quieres aprender a programar sé creativo’


Fedora 14

Visitas al blog

  • 651,523 visitas

Bienvenido!!

Estimado lector, en primer lugar, gracias por seguir mi blog y ayudar a mejorarlo. En esta bitácora encontrarás noticias, tutoriales y muchas cosas más sobre GNU/Linux y el Software Libre, sobre todo de dos distribuciones, Fedora y Arch Linux. No dudes en preguntar tus dudas, comentar las entradas o proponerme ideas para el blog. Más información en Acerca de
Creative Commons License
Esta obra está bajo una licencia de Creative Commons.

Introduce tu correo para suscribirte a este blog y recibir las entradas en tu correo.

Únete a otros 73 seguidores

Comentarios recientes

Marcos on Post-Instalación de Arch …
Dasn on NTP en ArchLinux
Maria on Borrón y cuenta nueva
iyan gonzalez on Borrón y cuenta nueva
Spanish Red on Fedora o Archlinux

Guia de Usuario Fedora 14

Post-instalación de Arch Linux

Categorías

Fedora Blogger Network


Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 73 seguidores