Posts Tagged 'Programación'

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.

Seguir 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)

Seguir 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()

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.

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

Repasa matemáticas con Python (II)

Llevo varios días repasando matemáticas a la vez estoy leyendo el libro Aprenda a pensar como un programador con python. Para ir aplicando y asimilando ambos conceptos voy escribiendo pequeños programas en Python con los conceptos de matemáticas. En esta ocasión le tocó a la geometría plana. En realidad lo único que hace el programa es calcular el área de triángulos, cuadrados y polígonos regulares. Además, en el caso del cuadrado, permite calcular la longitud de la diagonal. Algo muy sencillo pero que permite poner en práctica el uso de condiciones, funciones y conversiones de variables tipo string a númericas (int).

El resultado en Python es este:

#!/usr/bin/env python
# -⁻- coding: UTF-8 -*-

import math

# Esta es una función que asigna un color normal (blanco) en la terminal.
def normal():
  print chr(27)+"[0m"

#Función para generar líneas vacias.
def nLineas(n):
  i=0
  while i != n:
    print
    i=i+1

# Funciones para resolver áreas.
def areaTriangulo(b,h):
  return (b*h)/2.0

def areaCuadrado(l):
  return l**2

def areaRegular(lados,lado,apotema):
  return (lados*lado*apotema)/2.0

def diagonalCuadrado(l):
  return math.sqrt(l**2+l**2)

lados=raw_input(chr(27)+"[0m"+"Escribe con que figura geométrica quieres trabajar (número de lados): ")

#En realidad todo el programa es una gran condición que sigue el orden en que se escribió. En cuanto se cumple una condición el programa se termina o pasa a la siguiente condición.
if int(lados) == 3:
  nLineas(1)
  print "Bien! Trabajaremos con el triangulo"
  print "¿Qué desea hacer?"
  print chr(27)+"[1;34m"+"Calcular área(1)?"
  print chr(27)+"[0m"+"Inserte opción:"
  trianguloOpcion=raw_input()
  nLineas(1)
  if int(trianguloOpcion) == 1:
    base=raw_input(chr(27)+"[1;31m"+"Inserte la longitud de la base: ")
    altura=raw_input("Inserte la altura del triángulo: ")
    nLineas(1)
    print chr(27)+"[1;32m"+'\t', "Resultado: ", areaTriangulo(float(base),float(altura))
    normal()
  else:
    print "Opción inválida"
elif int(lados) == 4:
  print "Bien! Trabajaremos con el cuadrado"
  print "¿Qué desea hacer?"
  print chr(27)+"[1;34m"+"Calcular área(1), longitud de la diagonal(2)?"
  print chr(27)+"[0m"+"Inserte opción:"
  cuadradoOpcion=raw_input()
  nLineas(1)
  if int(cuadradoOpcion) == 1:
    lado=raw_input(chr(27)+"[1;31m"+"Inserte la longitud del lado: ")
    nLineas(1)
    print chr(27)+"[1;32m"+'\t', "Resultado: ", areaCuadrado(float(lado))
    normal()
  elif int(cuadradoOpcion) == 2:
    lado=raw_input(chr(27)+"[1;31m"+"Inserte la longitud del lado: ")
    nLineas(1)
    print chr(27)+"[1;32m"+'\t', "Resultado: ", diagonalCuadrado(float(lado))
    normal()
  else:
    nLineas(1)
    print "Opción invalida"
elif int(lados) > 4:
  print "Se trabajará con poligonos regualares de más de cuatro lados"
  print "¿Qué desea hacer?"
  print chr(27)+"[1;34m"+"Calcular área(1)?"
  print chr(27)+"[0m"+"Inserte opción..."
  opcion=raw_input()
  nLineas(1)
  if int(opcion) == 1:
    apotema=raw_input(chr(27)+"[1;31m"+"Inserte la longitud de la apotema: ")
    lado=raw_input("Inserte la longitud del lado: ")
    nLineas(1)
    print chr(27)+"[1;32m"+'\t', "Resultado: ", areaRegular(int(lados),float(lado),float(apotema))
    normal()
else:
  nLineas(1)
  print "Error! Figura no conocida"

raw_input("Enter para salir")

Seguramente tenga algunos fallos y la sintaxis no sea la más clara posible pero bueno, estoy aprendiendo. 🙂 Si queréis probarlo lo mejor es copiar el código en un archivo de texto, guardarlo como prueba.py, darle permisos de ejecución (chmod +x prueba.py) y ejecutarlo en una terminal.

Repasa matemáticas con Python

Ahora que es la vuelta al cole no está mal repasar un poco matemáticas. Pero si a la vez puedes aprender a programar mucho mejor. El lenguaje perfecto para repasar matemáticas es Python. Puedes hacer programas que resuelvan problemas que has hecho el curso pasado. Por ejemplo, en algunos manuales que leí sobre este lenguaje explican como calcular la distancia entre dos puntos aplicando el Teorema de Pitágoras.

Seguir leyendo ‘Repasa matemáticas con Python’


Fedora 14

Visitas al blog

  • 731.598 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 70 suscriptores

Comentarios recientes

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

Guia de Usuario Fedora 14

Post-instalación de Arch Linux

Categorías

Fedora Blogger Network