Categorías
Programación Proyecto Incubadora

Proyecto incubadora

¿Qué es este proyecto?

El «Proyecto Incubadora» tal y como su propio nombre indica, trata de crear una incubadora (tarea que nosotros no desarrollamos), y acto seguido, programarla para que cumpla diversos requisitos. Primeramente se probará para ver si su funcionamiento es correcto y, en el caso que así sea, ya comenzaríamos con el proyecto. La idea principal de este proyecto es desarrollar esta incubadora para así, restaurar la gallina canaria, puesto que está en peligro de extinción.

Material necesario

  • Chip ESP8266 D1 Mini. Es un chip Wi-Fi de bajo coste con una pila de protocolos TCP/IP (Protocolo de Control de Transmisión/Protocolo de Internet) y un microcontrolador.
  • Módulo Relé de 2 canales. Necesitamos 2 relés, uno para la resistencia que regula la temperatura; y otro para el motor, puesto que se activa con el tiempo.
  • Un cable USB. Se emplea para conectar el ESP8266 al ordenador en el que tenemos el código con el que vamos a programar.

Programa que utilizamos

Nosotros empleamos el programa de Arduino IDE para la programación de este proyecto. En el apartado «Lenguajes de Programación» se pueden encontrar diferentes tipos de variables para Programación.

Esquema general de funcionamiento

La idea principal sería con un sensor DHT 22 medir la temperatura de la incubadora, y regularla con la resistencia. Por otra parte, se mide también el tiempo para que el motor de media vuelta cada 8 horas, así los huevos están en movimiento, a una velocidad de 3,5 rpm.

Esquema de Montaje

Aquí tenemos ambos dispositivos, el Relé y el ESP8266 respectivamente. Primeramente, seleccionamos los pines que queremos utilizar en el Relé, que son todos los de la derecha. Se conectaría el GND del Relé con el GND del ESP8266. Luego, se conectaría el VCC del Relé al 5V del ESP8266. Finalmente, los pines IN1 e IN2, se conectarían a los pines digitales D1 y D2 del ESP8266.

Líneas de código

Esta sería la primera parte del código, donde incluimos todas las librerías necesarias para que todo funcione correctamente. La librería del DHT y las librerías wifi y NTP que ya están incorporadas en el Arduino IDE. (La librería *DHT* ha de ser descargada de Internet)

*Aquí adjunto el enlace para descargar la librería DHT: https://github.com/adafruit/DHT-sensor-library.git

El «#define» se utiliza para definir todo aquello que vayamos a emplear en las líneas de código.
La constante «char*» la utilizamos para poner el nombre de la red Wi-fi y la contraseña, que en nuestro caso, no tenemos.

La variable tipo float la utilizamos para que nos indique un número real, en este caso, el tiempo y la temperatura.

La variable tipo int la utilizamos para almacenar un valor entero.

Finalmente, la última línea de código nos indica nuestro servidor que, en nuestro caso sería El de Europa Zona Oeste, y las coordenadas de Canarias.
En el «void setup» irán las funciones que deberán ejecutarse por orden.

Primero comprobamos el estado del WiFi. Acto seguido, indicamos los valores máximos y mínimos de temperatura que, han de estar entre 39º y 27º aproximadamente. Finalmente, «llamamos» a los pines que definimos al principio.
En el «void loop» pondremos todo aquello que queremos que se repita en bucle.

Aquí indicamos los valores del tiempo y, dependiendo de la temperatura, si se activa el relé o no.
Categorías
Dispositivos IoT Programación Sensor DHT22

Dispositivos IoT

Sensor DHT22

¿QUÉ ES UN SENSOR DHT22?

El DHT22 es un sensor digital que permite realizar la medición de temperatura y humedad.

Estos sensores disponen de un procesador interno que realiza el proceso de medición, por lo que resulta muy sencillo obtener la medición desde un microprocesador como Arduino.

El DHT22 presenta las siguientes características:

  • Mide temperaturas entre -40º y 125º, con una precisión de 0.5ºC
  • Mide la humedad entre 0 y 100% con una precisión del 2 al 5%
  • Frecuencia de muestreo de 2 muestras por segundo (2Hz)

Estas características son aceptables para que sea posible usarlo en proyectos reales de monitorización o registro, que requieran una precisión media.

Esta imagen muestra un dispositivo DHT22 mostrando todos sus componentes y pines.

¿CÓMO FUNCIONA UN DHT22?

Estos sensores poseen integrado un sensor que nos permite medir humedad relativa y el aire circundante o temperatura mediante un termistor. Muestra los datos mediante una señal digital en el pin de datos.

Estos se emplean en aplicaciones de control automático de temperatura, aire acondicionado…

Utilizar el sensor DHT22 con Arduino es muy sencillo, puesto que a nivel de software dispone de librerías para Arduino que puedes encontrar fácilmente y, en cuanto al hardware, solamente es necesario conectar el pin VCC de alimentación (3-5V), el pin GND a Tierra (0V) y el pin de datos (DATA) a un pin digital en el Arduino.

Cada DHT22 se calibra para obtener solamente los coeficientes de calibración que se encuentran grabados en su memoria OTP; asegurándose así de tener una alta estabilidad y fiabilidad. El protocolo de comunicación entre el sensor y el microcontrolador utiliza un único cable, preferiblemente, apantallado (blindado) conocido como 1-wire; y requiere también de un pin de datos.

Debemos proteger el sensor para que no reciba la luz directa del sol.

Una de sus desventajas es que solamente puede obtener nuevos datos cada dos segundos.

Aquí tenemos un sensor conectado a un Arduino UNO.

ESQUEMA DE MONTAJE

La conexión del DHT22 está compuesta de 4 patillas, de las cuales usaremos 3, VCC, Output (DATA) y GND.

Conectar el sensor es sencillo, simplemente alimentamos desde Arduino al sensor a través de los pines GND (Tierra) y VCC (5V) del mismo. Por otro lado, conectamos la salida DATA, o también llamada Output, a una entrada digital de Arduino. Necesitaremos poner una resistencia de 10K entre VCC y el Pin DATA.

Estos son los pines de un DHT22
Forma de conectar los pines al Arduino.
NOTA: El pin Output, se puede conectar a cualquier entrada (5,6,9…)

¿CÓMO PROGRAMAR UN DHT22?

Primeramente, debemos conectar el sensor a un Arduino, en nuestro caso, al Arduino UNO del que disponemos. Una vez tenemos ambos componentes, alimentamos al sensor mediante el Arduino con el pin VCC (5V) y el GND (Tierra). Acto seguido, conectamos la salida Output (DATA) a una de las entradas digitales del Arduino, que en nuestro caso fue la 5. Finalmente, una vez montado todo correctamente, conectamos el Arduino y comenzamos a programar.

Como este sensor posee una librería ya existente para el Arduino, elegimos el apartado “DHTtester” (a modo de ejemplo) para así mostrar su funcionamiento.

Aquí adjunto el enlace para acceder y poder descargar la librería DHT para trabajar con Arduino: https://github.com/adafruit/DHT-sensor-library

Comenzamos con la explicación acerca de las líneas de código y variables para programar:

Una vez se haya cargado el “DHTtester”, editamos el pin digital para que coincidiera con la entrada digital del Arduino que habíamos elegido, que en este caso era el 5, tal y como observamos en #define DHTPIN 5 // Digital pin connected to the DHT sensor. En el caso de que fuese otro pin, se escribiría el número de dicho pin que hemos elegido
Al principio de la captura anterior, podemos observar “// Initialize DHT sensor; cuya función es, como su propio nombre indica, inicializar el sensor.

Encontramos también la función “void setup () { “, que se ejecuta al iniciar o al hacer un reset en el procesador y; la función “void loop () { “, que ocurre como una especie de bucle.

Finalmente, aparece también la función “float h = dht.readHumidity();” ; cuyo significado de esta función es medir el valor de la humedad en decimales. Ocurre exactamente lo mismo con las otras dos variables tipo float que están justo debajo, es decir, que muestra la Temperatura, tanto en Celsius como en Fahrenheit, en decimales.
En el segundo “párrafo” del código, empleamos la condición “if (isnan(h) || isnan(t) || isnan(f))” , para, en el caso de encontrar algún error, detenerse lo más pronto posible y así volver a intentarlo de nuevo.

Nuevamente encontramos una variable “float” para escribir el índice de calor en decimales.

Por último, encontramos líneas de código con la función “Serial.print”, que se emplea para mostrar los valores una vez iniciado el sensor y, en la última línea del código, la función “Serial.println” para indicar un salto a la siguiente línea.
Este apartado que hemos elegido se basa en medir la temperatura, en grados Celsius (ºC) y Fahrenheit (ºF), al igual que la humedad. Para comprobar la variación de temperatura y humedad, hemos tapado el sensor; y así observamos como aumenta ligeramente la temperatura y la humedad
Categorías
Lenguajes de programación Programación Python

Lenguajes de programación

¿QUÉ ES PYTHON?

Python es un lenguaje de programación interpretado (se ejecuta sin necesidad de ser procesado por el compilador y se detectan errores durante su ejecución) de tipado dinámico (las variables se comprueban durante su ejecución) cuya función es centrarse en una sintaxis que favorezca un código legible. Se trata de un lenguaje multiparadigma; ya que soporta programación funcional, imperativa y orientada a objetos; y está disponible en varias plataformas.

TIPOS BÁSICOS DE DATOS

Los diferentes tipos básicos de datos en Python son diferentes tipos de números.

NÚMEROS ENTEROS

Son aquellos números que no tienen decimales, ya sean positivos o negativos. En Python, se pueden representar mediante el tipo “int” (entero) o el tipo “long” (largo). La única diferencia es que el tipo “long” permite alcanzar números más grandes; aunque no es recomendable utilizarlo a menos que sea para no malgastar memoria. El tipo “int” de Python se implementa a bajo nivel mediante un tipo “long” de C; por lo que, dependiendo de la plataforma, se almacena utilizando 32 bits o 64 bits. El tipo “long” de Python permite almacenar cualquier tipo de número, limitado por la memoria disponible.

-Al asignar un número a una variable, ésta pasará a ser tipo “int”

# type(entero) daría int

entero = 23

-También podemos indicar que se almacene en tipo “long”, añadiendo un “L” al final.

# type(entero) daría long

entero = 23L

-El literal que se asigna a la variable también se puede expresar como octal (poniendo un 0 delante)

# 027 octal = 23 en base 10

entero = 027

-Y también, puede expresarse como hexadecimal (poniendo un 0x delante)

# 0x17 hexadecimal = 23 en base 10

entero = 0x17

NÚMEROS REALES

Son aquellos números que tienen decimales. En Python se expresa mediante el tipo “float”; que se implementa a bajo nivel mediante una variable de tipo “double” de C; es decir, utilizando 64 bits. 

-Para representar un número real en Python se escribe primero la parte entera, seguido de un punto, y luego la parte final.

real = 0.2703

-También puede expresarse en notación científica

real = 0.1e-3

NÚMEROS COMPLEJOS

Los números complejos son aquellos que tienen parte imaginaria. Usan un tipo “Complex” en Python, donde se almacenan usando coma flotante, debido a que estos números son una extensión de los números reales. En concreto, se almacenan en una estructura “C” compuesta por dos variables tipo “double”, una para los reales y otra para los imaginarios.

-Se representan de la siguiente forma:

complejo = 2.1 + 7.8j

OPERADORES ARITMÉTICOS

OperadorDescripciónEjemplo
+Sumar = 3 + 2 # r es 5
Restar = 4 – 7 # r es -3
Negaciónr = -7 # r es -7
*Multiplicaciónr = 2 * 6 # r es 12
**Exponenter = 2 ** 6 # r es 64
/Divisiónr = 3.5 / 2 # r es 1.75
//División enterar = 3.5 // 2 # r es 1.0
%Módulor = 7 % 2 # r es 1

-La división da como resultado un número real, mientras que la división entera da como resultado la parte entera.

-El operador de módulo (%) devuelve el resto de la división entre dos números.

-Si queremos obtener los decimales se podría hacer de dos maneras diferentes:

  • Bien indicando los decimales

r = 3.0 / 2

  • O bien utilizando la función “float”

r = float(3) / 2

OPERADORES LÓGICOS

Actúan sobre las representaciones en binario de los operandos, es decir, si vemos una operación; por ejemplo, entre 4 y 5, en realidad es como si fuese una operación entre 100 y 101; puesto que sería en código binario.

OperadorDescripciónEjemplo
&andr = 3 & 2 # r es 2
|orr = 3 | 2 # r es 3
^xorr = 3 ^ 2 # r es 1
~notr = ~3 # r es 0
<<Desplazamiento a la izquierdar = 3 << 1 # r es 6
>>Desplazamiento a la derechar = 3 >> 1 # r es 1

La operación 3&2; en código binario sería 11 y 10. El operador «and» devuelve 1 si el primer bit operando es 1 y el segundo bit operando es 1; es decir, como en 11 y 10; el primer dígito es 1 en ambos; pues el primer dígito del resultado sería 1 y, como en el segundo dígito ambos no tienen el 1, pues el primer dígito del resultado sería 0. Entonces, el resultado sería 10 (en binario), que corresponde al 2 en números en decimales. Por ello, el resultado de 3&2 es igual a 2.

El operador «or» es muy parecido al operador «and»; pero la única diferencia es que no es necesario que ambos dígitos sean 1. En los números 11 y 10, el primer dígito en ambos es 1, por lo que el primer dígito del resultado sería 1. En el segundo dígito de cada número, hay un 1 y un 0; por lo tanto, al haber un 1, el segundo dígito del resultado será 1. Entonces, el resultado será 11 (en binario), que corresponde al 3 en números decimales. Por ello, el resultado de 3|2 es 3.

El operador «xor» es parecido al operador «or» pero con una característica importante, puesto que para que el resultado sea 1, ambos dígitos deben ser distintos.. En los números 11 y 10; el primer dígito de cada uno es 1, por lo que el primer dígito del resultado será 0. En el segundo dígito de cada número, es 1 y 0, por lo que, al ser diferentes, el segundo dígito del resultado sería 1. Entonces, el resultado será 01 (en binario), que corresponde al 1 en números decimales. Por ello, el resultado de 3^2 es 1

El operador «not» sirve para negar uno a uno cada bit, es decir, los 0 cambian a 1 y los 1 cambian a 0. En el número decimal 3, en código binario 11, sería 00, que es números decimales sería 0, por ello, ~ 3 es 0

Los operadores de desplazamiento sirven para trasladar los bits «x» posiciones a la izquierda o a la derecha, por ejemplo, 3<<1. El 3 es 11 en código binario; por lo que desplazamos todos los dígitos hacia la izquierda una vez, por lo que se quedaría 110, que corresponde a 6 en números decimales. Por ello, el resultado de 3<<1 es 6. Lo mismo en el caso de que fuese 3>>1. Se trasladan todos los dígitos hacia la derecha una vez, por lo que se quedaría 01, que corresponde a 1 en números decimales. Por ello, el resultado de 3>>1 es 1

CADENAS

Es un texto encerrado entre comillas simples (‘cadena’) o dobles (“cadena”). Dentro de estas se pueden caracteres especiales escapándolos con ‘\’, como el caracter de nueva línea ‘\n’ o el de tabulación ‘\t’.

Una cadena puede estar precedida por el carácter ‘u’ o el carácter ‘r’ dependiendo si es una cadena que utiliza codificación Unicode y una cadena raw (cruda). Las cadenas raw se distinguen de las normales  en que los caracteres escapados mediante ‘\’ no se sustituyen por sus contrapartidas. Esto es bastante útil para las expresiones regulares.

unicode = u»äóè»

raw = r»\n»

-Las cadenas también admiten operadores como la suma y la multiplicación.

a = «uno» y b = «dos»

c = a + b # c es «unodos»

c = a * 3 # c es «unounouno»

BOOLEANOS

Solamente pueden tener dos valores: True y False. En realidad, el tipo “bool” es una subclase del tipo “int”.

Existen diferentes tipos de operadores que trabajan con valores booleanos:

OPERADORES LÓGICOS O CONDICIONALES 

OperadorDescripciónEjemplo
and¿se cumple a y b?r = True and False # r es False
or¿se cumple a o b?r = True or False # r es True
notNo ar = not True # r es False

OPERADORES RACIONALES

OperadorDescripciónEjemplo
==¿son iguales a y b?r = 5 == 3 # r es False
!=¿son distintos a y b?r = 5 != 3 # r es True
<¿es a menor que b?r = 5 < 3 # r es False
>¿es a mayor que b?r = 5 > 3 # r es True
<=¿es a menor o igual que b?r = 5 <= 5 # r es True
>=¿es a mayor o igual que b?r = 5 >= 3 # r es True

ESTRUCTURAS DE CONTROL

  • Sentencia IF (Si): Si se cumple la expresión condicional se ejecuta el bloque de sentencias seguidas.
  • Sentencia ELIF (De lo contrario si): De lo contrario si se cumple la expresión condicional se ejecuta el bloque de sentencias seguidas
  • Sentencia ELSE (De lo contrario): De lo contrario se cumple sin evaluar ninguna expresión condicional y ejecuta el bloque de sentencias seguidas.

numero = int(raw_input(«\nIngresa un número entero, por favor: «))

if numero < 0:

    numero = 0

    print ‘El número ingresado es negativo cambiado a cero.\n

elif numero == 0:

    print ‘El número ingresado es 0.\n

elif numero == 1:

    print ‘El número ingresado es 1.\n

else:

    print ‘El número ingresado es mayor que uno.\n

  • Bucle FOR: itera sobre los elementos de cualquier secuencia, en el orden que aparecen en la secuencia.

animales = [‘gato’, ‘perro’, ‘serpiente’]

for animal in animales:

    print «El animal es: {0}, tamaño de palabra es: {1}».format(

        animal, len(animal))

  • Bucle WHILE: permite repetir la ejecución de un grupo de instrucciones mientras se cumpla la condición.

suma, numero = 0, 1

while numero <= 10:

    suma = numero + suma

    numero = numero + 1

print «La suma es » + str(suma)

  • Sentencias TRY EXCEPT: este tipo de sentencias nos permiten “atrapar” excepciones o errores sin que el programa falle o se detenga.
12345678910111213import math def RaizCuadrada(numero):try:    return math.sqrt(numero)except ValueError:    return ‘Error: No se puede calcular la raíz cuadrada de ‘ + str(numero) print(RaizCuadrada(4))print(RaizCuadrada(13))print(RaizCuadrada(100))print(RaizCuadrada(-1))print(RaizCuadrada(25)) 

-Nos saltaría un error al intentar calcular la raíz cuadrada de -1; y para ello existen estas estructuras.

  • Sentencia BREAK: se puede usar en bucles for y while y simplemente termina el bucle actual y continúa con la ejecución de la siguiente instrucción 

# Primer ejemplo

for letra in «Python»:

    if letra == «h»:

        break

    print («Letra actual : » + letra)

  • Sentencia CONTINUE : al aparecer, este regresa al comienzo del bucle, ignorando todos los estamentos que quedan en la iteración actual del bucle e inicia la siguiente iteración.

# segundo ejemplo

for letra in «Python»:

    if letra == «h»:

        continue

    print («Letra actual : » + letra)

ESTRUCTURAS DE DATOS

Python es uno de los lenguajes más populares hoy en día gracias a su facilidad y velocidad con la que se desarrolla; y también a su orden y simplicidad.

Este lenguaje de datos posee diferentes estructuras de datos:

LISTAS

Son estructuras de datos muy flexibles en las que podemos mezclar valores de varios tipos. Tienen una declaración sencilla y es dirigido por un formato JSON estándar (JavaScript Object Notation); un formato de texto sencillo para el intercambio de datos.

>>> [1, 2, 3, 4]

[1, 2, 3, 4]

>>> [«hola», «mundo»]

[«hola», «mundo»]

>>> [0, 1.5, «hola»]

[0, 1.5, «hola»]

>>> [0, 1.5, «hola»]

[0, 1.5, «hola»]

-Las dos operaciones básicas en las listas son “Append” y “Extend”; cuya diferencia es que “Append” agrega un elemento al final de la lista, mientras que “Extend” es capaz de agregar otra lista al final de la lista.

  • “Append”

>>> lista = [‘a’,’b’]

>>> lista.append(‘c’)

>>> stack

[‘a’, ‘b’, ‘c’]

  • “Extend”

>>> lista = [‘a’, ’b’, ‘c’]

>>> lista.extend([‘d’, ‘e’, ‘f’])

>>> lista

[‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’]

Con las listas podemos hacer un montón de operaciones también:

  • “index”: nos devuelve la posición en la lista del elemento indicado.

>>> lista = [‘a’,‘b’,‘c’,’b’, ‘a’]

>>> lista.index(‘b’)

1

  • “insert”: inserta un elemento en la lista según el índice deseado.

#[‘b’, ‘c’, ‘b’]

>>> lista.insert(2, ‘a’)

>>> lista

[‘b’, ‘c’, ‘a’, ‘b’]

  • “remove”: elimina un elemento de la lista según el índice deseado

#[‘b’, ‘c’, ‘a’, ‘b’]

>>> lista.remove(2, ‘a’)

>>> lista

[‘b’, ‘c’, ‘b’]

  • “pop”: devuelve el último elemento de la lista y, posteriormente lo remueve de ella.

#[‘b’, ‘c’, ‘b’]

>>> lista.pop()

‘b’

>>> lista

[‘b’, ‘c’]

  • “count”: devuelve la cuenta de elementos actuales de la lista.

#[‘b’, ‘c’, ‘b’]

>>> lista.count(´b’)

2

  • “sort”: ordenan un arreglo tal y como se indique. Se pueden ordenar de diferentes maneras:

-Por orden ascendente

>>> mi_lista.sort()

>>> mi_lista

[‘a’, ‘b’, ‘b’, ‘c’]

-Por orden descendente

>>> mi_lista.sort(reverse=True)

>>> mi_lista

[‘c’, ‘b’, ‘b’, ‘a’]

-Invirtiendo el orden de los elementos sin ordenarlos

>>> my_list = [‘a’, ‘c’, ‘b’]

>>> my_list.reverse()

>>> my_list

[‘b’, ‘c’, ‘a’]

TUPLAS

Son parecidas a las listas; pero la diferencia es que las Tuplas son inmutables. Estas consisten en varios valores separados por comas.

>>> a = (1, 2, 3)

>>> a[0]

1

  • Función “LEN”

>>> len(a)

3

>>> a[1:]

2, 3

SETS

Son listas sin un orden específico; pero los elementos son únicos, es decir, que no se repiten. 

>>> x = set([3, 1, 2, 1])            aunque también se puede poner como >>> x = {3, 1, 2, 1}

set([1, 2, 3])

  • Sets con la función “ADD”

>>> x = set([1, 2, 3])

>>> x.add(4)

>>> x

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

  • Sets con la función “IN”

>>> x = set([1, 2, 3])

>>> 1 in x

True

>>> 5 in x

False

STRINGS

Podemos manipular “strings” de igual manera en la que se manipulan las listas. 

  • Strings con la función “LEN”: cuenta los caracteres de cualquier entrada que se añada.

>>> len(“abrakadabra”)

11

  • También puede encontrar partes del “string” que le indiquemos.

>>> a = “helloworld”

>>> a[1] #primer caracter

‘e’

>>> a[1:5] #caracteres del uno al cinco

“ello”

>>> a[:5] #caracteres del primero al quinto

“hello”

>>> a[5:] #caracteres del quinto al último

“world”

>>> a[-2:] # los últimos dos caracteres de la cadena

‘ld’

>>> a[:-2] # toda la cadena menos dos caracteres

‘helloworld’

>>> a[::-1] # revertir el orden de la cadena

  • Strings con el operador “IN”

>>> ‘hell’ in ‘hello’

True

>>> ‘full’ in ‘hello’

False

>>> ‘el’ in ‘hello’

True

DICCIONARIOS

Actúan de manera similar a una lista, excepto que el índice de este no necesariamente ha de ser un número entero.

>>> a = {‘x’ : 1, ‘y’ : 2, ‘z’ : 3}

>>> a[‘x’]

1

>>> a[‘z’]

3

>>> b = {}

>>> b[‘x’] = 2

>>> b[2] = ‘foo’

>>> b[(1, 2)] = 3

>>> b

{(1, 2): 3, ‘x’ : 2, 2: ‘foo’}

  • Diccionarios con comando “DEL”

>>> a = {‘x’ : 1, ‘y’ : 2, ‘z’ : 3}

>>> del a[‘x’]

>>> a

{‘y’ : 2, ‘z’ : 3}

  • Diccionarios con el método “KEYS”, “VALUE” e “ITEMS”: El método “Keys” devuelve todas las llaves al diccionario. El método “Value” devuelve todos los valores dentro del diccionario; y el método “Items” devuelve todos los pares “llave-valor” al diccionario.

>>> a.keys()

[‘x’, ‘y’, ‘z’]

>>> a.values()

[1, 2, 3]

>>> a.items()

[(‘x’ , 1), (‘y’ , 2), (‘z’ , 3)]

  • Diccionarios con la notación “FOR…IN”

>>> for key in a: print key

x

y

>>> for key, value in a.items() : print key, value

x 1

y 2

  • Diccionarios con la estructura “IN”: buscan dentro del diccionario una palabra.

>>> ‘x’ in a

True

>>> ‘p’ in a

False

>>> a.has_key(‘x’)

True

>>> a.has_key(‘p’)

False

SUBRUTINAS

Un procedimiento o subrutina es una porción de código dentro de un programa más grande que realiza una tarea específica y es, relativamente, independiente del resto del código. Suelen utilizarse para reducir la duplicación de códigos en un programa, permite reusar los códigos, descomponer problemas complejos en piezas simples, mejoran la lectura del código de un programa, oculta o regula parte de un programa…

Estos son ejecutados cuando son llamados por otros procedimientos, funciones o módulos.

-En Python, la definición de funciones se realiza mediante la instrucción “DEF” más un nombre de función descriptivo.

def mi_funcion(): 

    # aquí el algoritmo

-Una función no es ejecutada hasta que no sea invocada. Para invocar una función solamente es necesario llamarla por su nombre.

def mi_funcion(): 

    print «Hola Mundo» 

 funcion()

-Cuando una función haga un retorno de datos, estos pueden ser asignados a una variable.

def funcion(): 

    return «Hola Mundo» 

frase = funcion() 

print frase

DEFINIENDO FUNCIONES SOBRE LOS PARÁMETROS

Un parámetro es un valor que la función espera recibir cuando sea invocada; con el fin de ejecutar acciones en base al mismo. Los parámetros van separados por comas.

def mi_funcion(nombre, apellido): 

    # algoritmo

Existen diferentes tipos de variables:

VARIABLES LIBRES Y NO LOCALES

Si a la variable no se le asigna valor en un función, Python la considera libre y busca su valor en los niveles superiores a esa función. Si a la variable se le asigna un valor en algún nivel intermedio, la variable se considera no local y; si se le asigna en el programa principal, la variable se considera global

  • Variable libre global

def subrutina():

    print(a)

    return

a = 5

subrutina()

print(a)

  • Variable libre no local

def subrutina():

    def sub_subrutina():

        print(a)

        return

    a = 3

    sub_subrutina()

    print(a)

    return

    a = 4

  • Variable libre no definida

def subrutina():

    print(a)

    return

subrutina()

print(a)

VARIABLES DECLARADAS GLOBALES Y NO LOCALES

Si queremos asignar valor a una variable en una subrutina; pero queremos que Python no la considere local, debemos declararla como una función global o no local.

  • Variable declarada global

def subrutina():

    global a

    print(a)

    a = 1

    return

a = 5

subrutina()

print(a)

  • Variable declarada no local

def subrutina():

    def sub_subrutina():

        nonlocal a

        print(a)

        a = 1

        return

    a = 3

    sub_subrutina()

    print(a)

    return

a = 4

subrutina()

print(a)













Diseña un sitio como este con WordPress.com
Comenzar