Un programa «foolproof»

La clase pasada de Ken una compañera y yo decidimos hacer la tarea 10 de la máquina del tiempo de Ken. Un poco retadora la situación pero pudimos hacerlo bien al final despues de muchos errores.

En este programa mi compañera y yo pudimos demostrar el conocimiento de muchos «Mastering Topics». Y me gustó mucho la experiencia del «Pair programming», ya que nunca lo había experimentado como tal.

El programa que hicimos consiste en pedirle al usuario 10 números, para después con estos hacer una serie de operaciones y obtener su suma, promedio y desviación estandar. Pero nosotros no quisimos quedarnos solo con eso, así que decidimos hacer el programa «foolprof». Esto consiste en que si el usuario del programa comete un error, el programa no haga un «crash» que haga que el usuario tenga que reinciar el programa, y que los datos que el usuario dió de alta no se pierdan.

Nuestro código fue el siguiente:

#create a list of floats

import math

print ("Welcome, please enter numbers: ")

this=[]
number=1

def ciclo():
    global number
    while(True):
        try:
            a=float(input("Number "+str(number)+": "))
            this.append(a)
            number=number+1
            break
        except:
            print ("That's not a valid input")

ciclo()
ciclo()
ciclo()
ciclo()
ciclo()
ciclo()
ciclo()
ciclo()
ciclo()
ciclo()

print(this)
suma=0

for x in this:
    suma=suma+x

print ("The total sum of the numbers is: "+str(suma))

prom=suma/10

print ("The average is: "+str(prom))

indice=0
that=[]

def est():
    global indice
    global prom
    element=(this[indice]-prom)**2
    that.append(element)
    indice=indice+1

est()
est()
est()
est()
est()
est()
est()
est()
est()
est()
sumaa=0
for y in that:
    sumaa=sumaa+y

desviacion= math.sqrt(sumaa/10)

print ("The standart deviation is: "+str(desviacion))

Lo primero que decidimos hacer fue empezar a pensar una manera en la cual si el usuario escribe un valor erroneo, no se pierda la información escrita por este. Entonces decidimos hacer una función llamada «ciclo» la cual lo que hace es basicamente pedirle un número al usuario y asignarselo a la variable «a», para despues agregarlo a la lista previamente creada «this».

Eso es la funcionalidad básica del programa, pero si se hubiera quedado hasta allí si el usuario escribe un texto no válido el programa gritaría errores. Entonces decidimos hacer un ciclo while. Este hace que mientras el comando «break» no rompa el ciclo, este no se detiene.  Dentro del ciclo utilizamos el valor «try»  para lo que es la entrada del usuario, y si este «try» falla, te manda un mensaje que dice que tu entrada no es valida, y vuelve a empezar el ciclo. Como podemos observar el valor que escribió el usuario se guarda en la lista «this» .

Después de terminar esto, nos llegó el segundo reto, como poder que el texto del input cambie cada vez que se ejecuta. Me refiero a que te aparezca «number 1» y paara el segundo número «number 2» y así sucesivamente.

Para poder hacer esto, creamos una variable global llamada número, y la incluimos en el «input» del usuario, para despues sumarle 1 para el siguiente. La función tiene que ser global para que las modificaciones que se le hacen (el sumarle 1) se guarde afuera de la función y del ciclo. Cuando vamos a utilizar una variable global dentro de una función, tenemos que decirle al programa que la busque fuera de la función, por eso se le pone «global number» al iniciar la función.

Despúes de definir la función la llamamos diez veces para que guarde los diez números. Despues de llamar la función diez veces, la imprimimos para que le muestre al usuario los números que el escribió. Y despues hicimos un ciclo for para la suma, para que después se imprima el resultado.

Para el promedio lo único que hicimos fue dividir el resultado de la suma entre diez, y después lo imprimimos.

de relación típica

El tercer reto fué la desviación estandar, que se nos ocurrió hacerlo mediante que otra cosa, funciones. Para esta función llamamos a dos variables globales, índice y prom. Índice lo utilizamos para localizar los numeros de la lista mediante el valga la redundancia, indice. Element es (x1-x(prom))^2, entonces se debe de repetir una vez por cada número de la lista. Element es igual al valor x de la lista (this[indice]) menor el promedio elevado al cuadrado, después este resultado lo «apendeamos» a la lista «that» que es la lista para estos valores, y le sumamos uno al indice. Tenemos que repetir esta función diez veces para todos los números, para después utilizar un ciclo for para sumar todos los valor de la lista «that». Después solo queda dividir ese resultado entre diez, y sacarle raiz para después imprimirlo.

PROBLEMAS DURANTE EL RETO

funny-picture-programmers-problems1

El primer problema que tuvimos obviamente fue el que se nos ocurriera como hacer las funciones para que estas sirvieran, después de un rato pensando, pudimos llegar a una respuesta, que no sirvió, para después arreglarla y que si funcionara.

Después tuvimos un error en el cual el ciclo while para la lista se quedaba ciclado imprimiendo que habia un error, tras mucho pensar nos dimos cuenta que fué una falta de parentesis en el «input». Después cuando quisimos hacer que el texto del input cambiara conforme los números, este mismo error apareció. Nos dimos cuenta que no reconocía la variable «number» porque no la estaba buscando fuera de la función. Entonces al declarar la variable como global se solucionó el problema.

Estos fueron nuestros tres mayores problemas, que afortunadamente pudimos resolver. Obviamente tuvimos muchos más problemas pequeños que fuimos solucionando conforme íbamos trabajando.

Nos quedamos los dos al final con una experiencia muy grata de aprender todo esto de la programación.

 

Fuentes:

https://docs.python.org/2/tutorial/errors.html

http://www.ditutor.com/estadistica/desviacion_estandar.html

 

h0cudhV

SDKLSDKVSDKN

Tipos de Variables en Python.

En el lenguaje de programación de Python, hay ciertos tipos de «objetos» que almacenan información. Estos se llaman variables, y se les asigna cierta información para poder accerderla y/o modificarla de manera rápida y efectiva.

58550080

Hay muchos tipos de variables en este lenguaje, empecemos con las tres más importantes.

STRING

Este tipo de variables es la que puede guardar texto y números, por lo que siempre se utiliza al asignarle un texto a una variable. Por ejemplo al pedir al usuario que le asigne su nombre a una variable.

#string
nombre=str(input(«Dame tu nombre: «))
print(nombre)

Al correr esto me pedirá introducir mi nobre, lo asignará a la variable, y después lo va a imprimir.

Las variables tipo string pueden ser «operadas» con operadores matemáticos, por ejemplo si sumamos dos variables string, las va a concatenar, y si las multiplicamos las repetirá. Ojo solo se pueden sumar y restar más no multiplicar ni dividir

#string
nombre=str(input(«Dame tu nombre: «))
apellido=str(input(«Dame tu apellido: «))
print(nombre+» «+apellido)

Este código es lo mismo que el anterior solo que también me pide el apellido, y al final lo concatena.

FLOAT

Esta variable sirve para guardar números decimales, es muy utilizado para sumas, restas y demás operaciones que necesiten exactitud decimal.

INTEGER

Esta variable sirve para guardar números enteros, sin decimales, se utiliza para asignar valores de fechas, o para ciclos.

Los valores integer y float se pueden operar sin problemas, pero no se pueden imprimir siendo un valor de número, por lo que se tiene que convertir a string antes de imprimirlo. Para esto se utiliza el comando:

  • srt(variable)

#string
nombre=str(input(«Dame tu nombre: «))
apellido=str(input(«Dame tu apellido: «))
edad=int(input(«Dame tu edad: «))
print(«Tu nombre es: «+nombre+» «+apellido)
print («Tu edad es :»+str(edad))

Como se puede ver en el último print convertimos el integer «edad» a string temporalmente para poder imprimirlo.

Despues de estos tres tipos de variables básicas hay más tipos como son:

Listas

Es una lista de strings, se indexan desde el cero, y se puede cambiar, y actualizar.

Ejemplo: x=[1,2,3]

Tuples

Es lo mismo que las listas, solo que los valores en este no se pueden cambiar ni actualizar.

Ejemplo: x=(1,2,3)

Diccionario

Es como una lista, solo que cada elemento de esta está asociado a una palabra clave, mediante la cual puedes llamar al valor. La diferencia contra la lista es que en la lista solo puedes encontrar los elementos que hay en ella por su indexación, osea el numero que tienen asignado, que como ya dijimos empieza desde el cero. Y en el diccionario no es así, aquí puedes encontrar el elemento de manera más sencilla mediante su palabra clave.

Ejemplo: dict = {‘Name’: ‘Zara’, ‘Age’: 7, ‘Class’: ‘First’}

Cabe mencionar que Python tambien tiene un tipo de valor que se llama booleano, y este solo tiene dos valores; True y False. Este tipo de valor se utiliza en los ciclos y en condicionales.

inheritance1

SDKLSDKVSDKN

Starting a new adventure: Python

This week I started learning the programming language Python3. Unlike other programming languages Python is more user friendly, and it has easy commands. I’m pumped to learn programming, and hopefully one day be able to create my own program.

YRBRRRI

I started this adventure learning the basics on Lynda.com, the tutorials on python.org, and with the help of my classmates, and professor.

Let’s hope we all can make it, passing the course