Descomposición: Print
Descomposición: Print
Descomposición: Print
Es muy común que un programa sea tan largo y complejo que no puede ser asignado a un solo desarrollador, y en su lugar
un equipo de desarrolladores trabajarán en el. El problema, debe ser dividido entre varios desarrolladores de una manera en que
se pueda asegurar su eficiencia y cooperación.
Es inconcebible que más de un programador deba escribir el mismo código al mismo tiempo, por lo tanto, el trabajo debe de ser
dividido entre todos los miembros del equipo.
Este tipo de descomposición tiene diferentes propósitos, no solo se trata de compartir el trabajo, sino también de compartir la
responsabilidad entre varios desarrolladores.
Cada uno debe escribir un conjunto bien definido y claro de funciones, las cuales al ser combinadas dentro de un módulo (esto
se clarificara un poco mas adelante) nos dará como resultado el producto final.
Esto nos lleva directamente a la tercera condición: si se va a dividir el trabajo entre varios programadores, se debe descomponer
el problema para permitir que el producto sea implementado como un conjunto de funciones escritas por separado
empacadas juntas en diferentes módulos.
De Python mismo: varias funciones (como print() ) son una parte integral de Python, y siempre están disponibles
sin algún esfuerzo adicional del programador; se les llama a estas funciones funciones integradas.
De los módulos preinstalados de Python: muchas de las funciones, las cuales comúnmente son menos utilizadas que las
integradas, están disponibles en módulos instalados juntamente con Python; para poder utilizar estas funciones el
programador debe realizar algunos pasos adicionales (se explicará acerca de esto en un momento).
Directamente del código: tu puedes escribir tus propias funciones, colocarlas dentro del código, y usarlas libremente.
Existe una posibilidad más, pero se relaciona con clases, se omitirá por ahora.
Tu primer función
¿Cómo es que se crea dicha función?
def nombreFuncion():
cuerpoFuncion
def mensaje():
print("Ingresa un valor: ")
La función es muy sencilla, pero completamente utilizable. Se ha nombrado mensaje , pero eso es opcional, tu
puedes cambiarlo. Hagamos uso de ella.
Se comienza aquí.
Se termina aquí.
Esto significa que Python lee la definición de la función y la recuerda, pero no la ejecuta sin permiso.
def mensaje():
print("Ingresa un valor: ")
Se comienza aquí.
Ingresa un valor:
Se termina aquí.
untos Clave
1. Una función es un bloque de código que realiza una tarea especifica cuando la función es llamada (invocada). Las funciones
son útiles para hacer que el código sea reutilizable, que este mejor organizado y más legible. Las funciones contienen parámetros
y pueden regresar valores.
Funciones integradas las cuales son partes importantes de Python (como lo es la función print() ). Puedes ver una
lista completa de las funciones integradas de Python en la siguiente liga: https://docs.python.org/3/library/functions.html.
También están las que se encuentran en módulos pre-instalados (se hablará acerca de ellas en el Módulo 5 de este
curso).
Funciones definidas por el usuario las cuales son escritas por los programadores para los programadores, puedes
escribir tus propias funciones y utilizarlas libremente en tu código.
Las funciones lambda (aprenderás acerca de ellas en el Módulo 6 del curso).
3. Las funciones propias se pueden definir utilizando la palabra reservada def y con la siguiente sintaxis:
Se puede definir una función sin que haga uso de argumentos, por ejemplo:
También es posible definir funciones con argumentos, como la siguiente que contiene un solo parámetro:
Ejercicio 1
Revisar
¿Qué es lo que ocurre cuando se invoca una función antes de ser definida? Ejemplo:
hola()
def hola():
print("hola!")
Revisar
Ejercicio 3
def hola():
print("hola")
hola(5)
Revisar
Se genera una excepción (la excepción TypeError ) - la función hola() no toma argumentos.
Un parámetro es una variable, pero existen dos factores que hacen a un parámetro diferente:
Los parámetros solo existen dentro de las funciones en donde han sido definidos, y el único lugar donde un
parámetro puede ser definido es entre los paréntesis después del nombre de la función, donde se encuentra la palabra
reservada def .
La asignación de un valor a un parámetro de una función se hace en el momento en que la función se manda
llamar o se invoca, especificando el argumento correspondiente.
def funcion(parametro):
###
Recuerda que:
Se tendrá que modificar la definición def de la función, así es como se ve ahora:
def mensaje(numero):
###
Esta definición especifica que nuestra función opera con un solo parámetro con el nombre de numero . Se puede utilizar como
una variable normal, pero solo dentro de la función - no es visible en otro lugar.
def mensaje(numero):
print("Ingresa el número:", numero)
Se ha hecho buen uso del parámetro. Nota: No se le ha asignado al parámetro algún valor. ¿Es correcto?
Si, lo es.
Recuerda: especificar uno o mas parámetros en la definición de la función es un requerimiento, y se debe de cumplir durante
la invocación de la misma. Se debe proveer el mismo numero de argumentos como haya parámetros definidos.
Esto significa que se esta invocando la función pero esta faltando el argumento.
def mensaje(numero):
print("Ingresa un número:", numero)
mensaje(1)
De esta manera ya esta correcto. El código producirá la siguiente salida:
Ingresa un número: 1
¿Puedes ver como funciona? El valor del argumento utilizado durante la invocación ( 1 ) ha sido pasado a la función,
dándole un valor inicial al parámetro con el nombre de numero .
def mensaje(numero):
print("Ingresa un número:", numero)
numero = 1234
mensaje(1)
print(numero)
El parámetro llamado numero es una entidad completamente diferente de la variable llamada numero .
Ingresa un número: 1
1234
Ya se ha utilizado, pero Python ofrece mucho más. Se abordará este tema a continuación.
print(a, b, c)
miFuncion(1, 2, 3)
Nota: el paso de parámetros posicionales es usado de manera intuitiva por las personas en muchas situaciones. Por
ejemplo, es generalmente aceptado que cuando nos presentamos mencionamos primero nuestro nombre(s) y
después nuestro apellido, por ejemplo, "Me llamo Juan Pérez."
El concepto es claro: los valores pasados a los parámetros son precedidos por el nombre del parámetro al que se le
va a pasar el valor, seguido por el signo de = .
La posición no es relevante aquí, cada argumento conoce su destino con base en el nombre utilizado.
suma(1, 2, 3)
1 + 2 + 3 = 6
También, se puede reemplazar la invocación actual por una con palabras clave, como la siguiente:
suma(c = 1, a = 2, b = 3)
2 + 3 + 1 = 6
suma(3, c = 1, b = 2)
Vamos a analizarla:
3 + 2 + 1 = 6
Se cuidadoso, ten cuidado de no cometer errores. Si se intenta pasar mas de un valor a un argumento, ocurrirá un
error y se mostrará lo siguiente:
suma(3, a = 1, b = 2)
Observa el siguiente código. Es un código completamente correcto y funcional, pero no tiene mucho sentido:
suma(4, 3, c = 2)
Uno de los apellidos más comunes en Latinoamérica es González. Tomémoslo para el ejemplo.
Solo se tiene que colocar el nombre del parámetro seguido del signo de = y el valor por default.
presentar("Jorge", "Pérez")
¿Y? No parece haber cambiado algo, pero cuando se invoca la función de una manera inusual, como esta:
presentar("Enrique")
o así:
presentar (primerNombre="Guillermo")
no habrá errores, ambas invocaciones funcionarán, la consola mostrará los siguientes resultados:
Pruébalo.
Puedes hacerlo con mas parámetros, si te resulta útil. Ambos parámetros tendrán sus valores por default, observa el
siguiente código:
presentar ()
presentar(segundoNombre="Rodríguez")
La salida es:
Puntos Clave
1. Se puede pasar información a las funciones utilizando parámetros. Las funciones pueden tener tantos parámetros como sean
necesarios.
def hola(nombre):
print("Hola,", nombre)
hola("Greg")
holaTodos("Sebastián", "Felipe")
c = input("Calle: ")
cp = input("Código Postal: ")
cd = input("Ciudad: ")
Paso de argumentos posicionales en la cual el orden de los parámetros es relevante (Ejemplo 1).
Paso de argumentos con palabras clave en la cual el orden de los argumentos es irrelevante (Ejemplo 2).
Una mezcla de argumentos posicionales y con palabras clave (Ejemplo 3).
Ejemplo 1
def resta(a, b):
print(a - b)
resta(5, 2) # salida: 3
resta(2, 5) # salida: -3
Ejemplo 2
def resta(a, b):
print(a - b)
Ex. 3
def resta(a, b):
print(a - b)
Es importante recordar que primero se especifican los argumentos posicionales y después los de palabras clave. Es por esa
razón que si se intenta ejecutar el siguiente código:
3. Se puede utilizar la técnica de argumentos con palabras clave para asignar valores predefinidos a los argumentos:
def nombre(nombre, apellido="Pérez"):
print(nombre, apellido)
Ejercicio 1
intro()
Revisar
Ejercicio 2
intro(b="Sergio López")
Revisar
Ejercicio 3
intro("Susan")
Revisar
Ejercicio 4
suma(a=1, c=3)
Revisar
Por supuesto, las funciones, al igual que las funciones matemáticas, pueden tener resultados.
Para lograr que las funciones devuelvan un valor (pero no solo para ese propósito) se utiliza la instrucción return (regresar o
retornar).
Esta palabra nos da una idea completa de sus capacidades. Nota: es una palabra reservada de Python.
Cuando se emplea dentro de una función, provoca la terminación inmediata de la ejecución de la función, y un retorno
instantáneo (de ahí el nombre) al punto de invocación.
Nota: si una función no está destinada a producir un resultado, emplear la instrucción return no es obligatorio, se
ejecutará implícitamente al final de la función.
De cualquier manera, se puede emplear para terminar las actividades de una función, antes de que el control llegue a la última
línea de la función.
felizAñoNuevo()
Tres ...
Dos...
Uno...
¡Feliz año nuevo!
felizAñoNuevo(False)
Se modificará el comportamiento de la función; la instrucción return provocará su terminación justo antes de los deseos. Esta
es la salida actualizada:
Tres ...
Dos...
Uno ...
funcion():
return expresión
Provoca la terminación inmediata de la ejecución de la función (nada nuevo en comparación con la primer variante).
Además, la función evaluará el valor de la expresión y lo devolverá (de ahí el nombre una vez mas) como el
resultado de la función.
Sus datos no representan valor razonable alguno; en realidad, no es un valor en lo absoluto; por lo tanto, no debe
participar en ninguna expresión.
print(None + 2)
Solo hay dos tipos de circunstancias en las que None se puede usar de manera segura:
valor = None
if valor == None:
print("Lo siento, no tienes ningún valor")
No olvides esto: si una función no devuelve un cierto valor utilizando una cláusula de expresión return , se asume
que devuelve implícitamente None .
print(strangeFunction(2))
print(strangeFunction(1))
True
None
No te sorprendas la próxima vez que veas None como el resultado de la función, puede ser el síntoma de un error
sutil dentro de la función.
El primero es: ¿Se puede enviar una lista a una función como un argumento?
¡Por supuesto que se puede! Cualquier entidad reconocible por Python puede desempeñar el papel de un
argumento de función, aunque debes asegurarte de que la función sea capaz de hacer uso de él.
Entonces, si pasas una lista a una función, la función tiene que manejarla como una lista.
def sumaDeLista(lst):
sum = 0
sum += elem
return sum
y se invoca así:
print(sumaDeLista([5, 4, 3]))
Regresará 12 como resultado, pero habrá problemas si la invocas de esta manera riesgosa:
print(sumaDeLista(5))
¡Si, por supuesto! Cualquier entidad reconocible por Python puede ser un resultado de función.
[4, 3, 2, 1, 0]
Vamos a profundizar un poco más en los problemas relacionados con las variables en las funciones. Esto es
esencial para crear funciones efectivas y seguras.
Escenario
Tu tarea es escribir y probar una función que toma un argumento (un año) y devuelve True si el año es un año
bisiesto, o False sí no lo es.
Nota: también hemos preparado un breve código de prueba, que puedes utilizar para probar tu función.
El código utiliza dos listas: una con los datos de prueba y la otra con los resultados esperados. El código te dirá si
alguno de tus resultados no es válido.
def isYearLeap(year):
if year%4==0 and (not year%100==0 or year%400==0):
return True
Objetivos
Familiarizar al estudiante con nociones y algoritmos clásicos.
Mejorar las habilidades del estudiante para definir y usar funciones.
Escenario
Un número natural es primo si es mayor que 1 y no tiene divisores más que 1 y si mismo.
¿Complicado? De ningúna manera. Por ejemplo, 8 no es un número primo, ya que puedes dividirlo entre 2 y 4 (no
podemos usar divisores iguales a 1 y 8, ya que la definición lo prohíbe).
Por otra parte, 7 es un número primo, ya que no podemos encontrar ningún divisor para el.
La función:
Se llama isPrime .
Toma un argumento (el valor a verificar).
Devuelve True si el argumento es un número primo, y False de lo contrario.
Sugerencia: intenta dividir el argumento por todos los valores posteriores (comenzando desde 2) y verifica el resto: si
es cero, tu número no puede ser un número primo; analiza cuidadosamente cuándo deberías detener el proceso.
Si necesitas conocer la raíz cuadrada de cualquier valor, puedes utilizar el operador ** . Recuerda: la raíz cuadrada
de x es la misma que x0.5
def isPrime(num):
EsPrimo=True
for x in range(2, num):
if num%x==0:
EsPrimo=False
break
return EsPrimo
Puntos clave
1. Puedes emplear la palabra clave return para decirle a una función que devuelva algún valor. La
instrucción return termina la función, por ejemplo:
2. El resultado de una función se puede asignar fácilmente a una variable, por ejemplo:
def deseos():
return "¡Felíz Cumpleaños!"
d = deseos()
# Ejemplo 1
def deseos():
print("Mis deseos")
return "¡Felíz Cumpleaños!"
# Ejemplo 2
def deseos():
print("Mis Deseos")
return "¡Feliz Cumpleaños!"
3. Puedes usar una lista como argumento de una función, por ejemplo:
def HolaaTodos(myList):
for nombre in myList:
print("Hola,", nombre)
def createList(n):
myList = []
for i in range(n):
myList.append(i)
return myList
print(createList(5))
Ejercicio 1
def hola():
return
print("¡Hola!")
hola()
Revisar
Ejercicio 2
def isInt(data):
if type(data) == int:
return True
elif type(data) == float:
return False
print(isInt(5))
print(isInt(5.0))
print(isInt("5"))
Revisar
Ejercicio 3
print(evenNumLst(11))
Revisar
Ejercicio 4
def listUpdater(lst):
updList = []
for elem in lst:
elem **= 2
updList.append(elem)
return updList
l = [1, 2, 3, 4, 5]
print(listUpdater(l))
Existe un método especial en Python el cual puede extender el alcance de una variable incluyendo el cuerpo de
las funciones para poder no solo leer los valores de las variables sino también modificarlos.
global name
global name1, name2, ...
El utilizar la palabra reservada dentro de una función con el nombre o nombres de las variables separados por
comas, obliga a Python a abstenerse de crear una nueva variable dentro de la función; se empleará la que se puede
acceder desde el exterior.
En otras palabras, este nombre se convierte en global (tiene un alcance global, y no importa si se esta leyendo o
asignando un valor).
El código en editor nos enseña algo. Como puedes observar, la función cambia el valor de su parámetro. ¿Este
cambio afecta el argumento?
Yo obtuve 1
Yo ahora tengo 2
La conclusión es obvia - al cambiar el valor del parámetro este no se propaga fuera de la función (más
específicamente, no cuando la variable es un valor escalar, como en el ejemplo).
Esto también significa que una función recibe el valor del argumento, no el argumento en sí. Esto es cierto para los
valores escalares.
Vale la pena revisar cómo funciona esto con las listas (¿Recuerdas las peculiaridades de asignar rodajas de listas
en lugar de asignar la lista entera?)
def miFuncion(miLista1):
print(miLista1)
miLista1 = [0, 1]
miLista2 = [2, 3]
miFuncion(miLista2)
print(miLista2)
[2, 3]
[2, 3]
def miFuncion(miLista1):
print(miLista1)
del miLista1[0]
miLista2 = [2, 3]
miFuncion(miLista2)
print(miLista2)
No se modifica el valor del parámetro miLista1 (ya se sabe que no afectará el argumento), en lugar de ello se
modificará la lista identificada por el.
[2, 3]
[3]
Intentémoslo:
Si el argumento es una lista, el cambiar el valor del parámetro correspondiente no afecta la lista (Recuerda:
las variables que contienen listas son almacenadas de manera diferente que las escalares).
Pero si se modifica la lista identificada por el parámetro (Nota: ¡La lista no el parámetro!), la lista reflejará el
cambio.
Puntos Clave
1. Una variable que existe fuera de una función tiene alcance dentro del cuerpo de la función. (Ejemplo 1) al menos que la
función defina una variable con el mismo nombre. (Ejemplo 2, y Ejemplo 3), por ejemplo:
Ejemplo 1:
var = 2
def multByVar(x):
return x * var
print(multByVar(7)) # salida: 14
Ejemplo 2:
def mult(x):
var = 5
return x * var
print(mult(7)) # salida: 35
Ejemplo 3:
def multip(x):
var = 7
return x * var
var = 3
print(multip(7)) # salida: 49
2. Una variable que existe dentro de una función tiene un alcance solo dentro del cuerpo de la función (Ejemplo 4), por ejemplo:
Ejemplo 4:
def sum(x):
var = 7
return x + var
print(sum(4)) # salida: 11
print(var) # NameError
3. Se puede emplear la palabra reservada global seguida por el nombre de una variable para que el alcance de la variable sea
global, por ejemplo:
var = 2
print(var) # salida: 2
def retVar():
global var
var = 5
return var
print(retVar()) # salida: 5
print(var) # salida: 5
Ejercicio 1
def message():
alt = 1
print("Hola, mundo!")
print(alt)
Revisar
Ejercicio 2
a = 1
def fun():
a = 2
print(a)
fun()
print(a)
Revisar
Ejercicio 3
a = 1
def fun():
global a
a = 2
print(a)
fun()
a = 3
print(a)
Revisar
Ejercicio 4
a = 1
def fun():
global a
a = 2
print(a)
a = 3
fun()
print(a)
Revisar
Primero, se asegura que los datos que sean ingresados sean correctos, de lo contrario la salida será:
None
Segundo, observa como el símbolo de diagonal invertida ( \ ) es empleado. Si se termina una línea de código con
el, Python entenderá que la línea continua en la siguiente.
Esto puede ser útil cuando se tienen largas líneas de código y se desea que sean mas legibles.
Sin embargo, hay algo que omitimos: las medias en sistema inglés. La función no es útil para personas que utilicen
libras, pies y pulgadas.
¿Qué podemos hacer por ellos?
Escribimos dos funciones sencillas para convertir unidades del sistema inglés al sistema métrico. Comencemos
con las pulgadas.
def lbakg(lb):
return lb * 0.45359237
print(lbakg(1))
0.45359237
Haremos lo mismo ahora con los pies y pulgadas: 1 pie = 0.3048 m , y 1 pulgada = 2.54 cm = 0.0254 m .
print(piepulgam(1, 1))
0.3302
print(piespulgam(6, 0))
Esta es la salida:
1.8288000000000002
Es muy posible que en ocasiones se desee utilizar solo pies sin pulgadas. ¿Python nos ayudará? Por supuesto que
si.
print(piepulgam(6))
1.8288000000000002
Finalmente, el código es capaz de responder a la pregunta: ¿Cual es el IMC de una persona que tiene 5'7" de altura
y un peso de 176 lbs?
def lbsakg(lb):
return lb * 0.45359237
return None
La respuesta es:
27.565214082533313
En la escuela aprendimos que la suma arbitraria de dos lados tiene que ser mayor que la longitud del tercer lado.
No será algo difícil. La función tendrá tres parámetros - uno para cada lado.
Regresará True si todos los lados pueden formar un triángulo, y False de lo contrario. En este
caso, esUnTringulo es un buen nombre para dicha función.
True
False
if a + b <= c or b + c <= a or \
c + a <= b:
return False
return True
print(esUnTriangulo(1, 1, 1))
print(esUnTriangulo(1, 1, 3))
Se ha negado la condición (se invirtieron los operadores relacionales y se reemplazaron los or s con and s,
obteniendo una expresión universal para probar triángulos).
Un tipo de secuencia es un tipo de dato en Python el cual es capaz de almacenar mas de un valor (o ninguno si la secuencia
esta vacía), los cuales pueden ser secuencialmente (de ahí el nombre) examinados, elemento por elemento.
Debido a que el bucle for es una herramienta especialmente diseñada para iterar a través de las secuencias, podemos definirlas
de la siguiente manera: una secuencia es un tipo de dato que puede ser escaneado por el bucle for .
Hasta ahora, has trabajado con una secuencia en Python, la lista. La lista es un clásico ejemplo de una secuencia de Python.
Aunque existen otras secuencias dignas de mencionar, las cuales se presentaran a continuación.
La segunda noción - la mutabilidad - es una propiedad de cualquier tipo de dato en Python que describe su disponibilidad para
poder cambiar libremente durante la ejecución de un programa. Existen dos tipos de datos en Python: mutables e inmutables.
Los datos mutables pueden ser actualizados libremente en cualquier momento, a esta operación se le denomina "in situ".
In situ es una expresión en Latín que se traduce literalmente como en posición, en el lugar o momento. Por ejemplo, la siguiente
instrucción modifica los datos "in situ":
list.append(1)
Imagina que una lista solo puede ser asignada y leída. No podrías adjuntar ni remover un elemento de la lista. Si se agrega un
elemento al final de la lista provocaría que la lista se cree desde cero.
Se tendría que crear una lista completamente nueva, la cual contenga los elementos ya existentes mas el nuevo elemento.
El tipo de datos que se desea tratar ahora se llama tupla. Una tupla es una secuencia inmutable. Se puede comportar como una
lista pero no puede ser modificada en el momento.
Observa el ejemplo:
tupla1 = (1, 2, 4, 8)
print(tupla1)
print(tupla2)
(1, 2, 4, 8)
Nota: cada elemento de una tupla puede ser de distinto tipo (punto flotante, entero, cadena, etc.).
tuplaVacia = ()
Si se desea crear una tupla de un solo elemento, se debe de considerar el hecho de que, debido a la sintaxis (una tupla debe de
poder distinguirse de un valor entero ordinario), se debe de colocar una coma al final:
tuplaUnElemento1 = (1, )
tuplaUnElemento2 = 1.,
El quitar las comas no arruinará el programa en el sentido sintáctico, pero serán variables no tuplas.
1000
(1, 10)
10
100
1000
Las similitudes pueden ser engañosas - no intentes modificar en contenido de la tupla ¡No es una lista!
miTupla.append(10000)
del miTupla[0]
miTupla[1] = -10
¿Qué es un diccionario?
El diccionario es otro tipo de estructura de datos de Python. No es una secuencia (pero puede adaptarse fácilmente a un
procesamiento secuencial) y además es mutable.
Para explicar lo que es un diccionario en Python, es importante comprender de manera literal lo que es un diccionario.
Un diccionario en Python funciona de la misma manera que un diccionario bilingüe. Por ejemplo, se tiene la palabra en español
"gato" y se necesita su equivalente en francés. Lo que se haría es buscar en el diccionario para encontrar la palabra "gato".
Eventualmente la encontrarás, y sabrás que la palabra equivalente en francés es "chat".
En el mundo de Python, la palabra que se esta buscando se denomina clave(key) . La palabra que se obtiene del diccionario es
denominada valor .
print(dict)
print(numerosTelefono)
print(diccionarioVacio)
En este primer ejemplo, el diccionario emplea claves y valores las cuales ambas son cadenas. En el segundo, las claves con
cadenas pero los valores son enteros. El orden inverso (claves → números, valores → cadenas) también es posible, así como la
combinación número a número.
La lista de todos los pares es encerrada con llaves, mientras que los pares son separados por comas, y las claves y valores por
dos puntos.
El primer diccionario es muy simple, es un diccionario Español-Francés. El segundo es un directorio telefónico muy pequeño.
Los diccionarios vacíos son construidos por un par vacío de llaves - nada inusual.
El diccionario entero se puede imprimir con una invocación a la función print() . El fragmento de código puede producir la
siguiente salida:
¿Has notado que el orden de los pares impresos es diferente a la asignación inicial?, ¿Qué significa esto?
Primeramente, recordemos que los diccionarios no son listas - no guardan el orden de sus datos, el orden no tiene significado (a
diferencia de los diccionarios reales). El orden en que un diccionario almacena sus datos esta fuera de nuestro control. Esto es
normal. (*)
NOTA
print(dict['gato'])
print(numerosTelefono['Suzy'])
El obtener el valor de un diccionario es semejante a la indexación, gracias a los corchetes alrededor del valor de la
clave.
Nota:
Si una clave es una cadena, se tiene que especificar como una cadena.
Las claves son sensibles a las mayúsculas y minúsculas: 'Suzy' sería diferente a 'suzy' .
chat
5557654321
Ahora algo muy importante: No se puede utilizar una clave que no exista. Hacer algo como lo siguiente:
print(numerosTelefono['presidente'])
Afortunadamente, existe una manera simple de evitar dicha situación. El operador in , junto con su
acompañante, not in , pueden salvarnos de esta situación.
No y si.
No, porque un diccionario no es un tipo de dato secuencial - el bucle for no es útil aquí.
Si, porque hay herramientas simples y muy efectivas que pueden adaptar cualquier diccionario a los
requerimientos del bucle for (en otras palabras, se construye un enlace intermedio entre el diccionario y una
entidad secuencial temporal).
El primero de ellos es un método denominado keys() , el cual es parte de todo diccionario. El método retorna o
regresa una lista de todas las claves dentro del diccionario. Al tener una lista de claves se puede acceder a todo
el diccionario de una manera fácil y útil.
La función sorted()
¿Deseas que la salida este ordenada? Solo hay que agregar al bucle for lo siguiente:
Nota la manera en que la tupla ha sido utilizada como una variable del bucle for .
También existe un método denominado values() , funciona de manera muy similar al de keys() , pero regresa
una lista de valores.
print(french)
Como el diccionario no es capaz de automáticamente encontrar la clave de un valor dado, el rol de este método es
algo limitado.
cheval
chien
chat
Se va a reemplazar el valor "chat" por "minou" , lo cual no es muy adecuado, pero funcionará con nuestro
ejemplo.
Observa:
print(dict)
La salida es:
Nota: este es un comportamiento muy diferente comparado a las listas, las cuales no permiten asignar valores a
índices no existentes.
dict['cisne'] = 'cygne'
print(dict)
EXTRA
También es posible insertar un elemento al diccionario utilizando el método update() , por ejemplo:
dict.update({"pato" : "canard"})
print(dict)
Eliminado claves
¿Puedes deducir como eliminar una clave de un diccionario?
Nota: al eliminar la clave también se removerá el valor asociado. Los valores no pueden existir sin sus claves.
Esto se logra con la instrucción del .
A continuación un ejemplo:
del dict['perro']
print(dict)
EXTRA
dict.popitem()
Línea 1: crea un diccionario vacío para ingresar los datos: el nombre del alumno es empleado como clave,
mientras que todas las calificaciones asociadas son almacenadas en una tupla (la tupla puede ser el valor de
un diccionario, esto no es un problema).
Línea 3: se ingresa a un bucle "infinito" (no te preocupes, saldrémos de el en el momento indicado).
Línea 4: se lee el nombre del alumno.
Línea 5-6: si el nombre es exit , nos salimos del bucle.
Línea 8: se pide la calificación del alumno (un valor entero en el rango del 1-10).
Línea 10-11: si el nombre del estudiante ya se encuentra en el diccionario, se alarga la tupla asociada con la
nueva calificación (observa el operador +=).
Línea 12-13: si el estudiante es nuevo (desconocido para el diccionario), se crea una entrada nueva, su valor
es una tupla de un solo elemento la cual contiene la calificación ingresada.
Línea 15: se itera a través de los nombres ordenados de los estudiantes.
Línea 16-17: inicializa los datos necesarios para calcular el promedio (sumador y contador).
Línea 18-20: Se itera a través de la tupla, tomado todas las calificaciones subsecuentes y actualizando la
suma junto con el contador.
Línea 21: se calcula e imprime el promedio del alumno junto con su nombre.
1. Las Tuplas son colecciones de datos ordenadas e inmutables. Se puede pensar en ellas como listas inmutables. Se definen con
paréntesis:
miTupla = (1, 2, True, "una cadena", (3, 4), [5, 6], None)
print(miTupla)
miLista = [1, 2, True, "una cadena", (3, 4), [5, 6], None]
print(miLista)
Cada elemento de la tupla puede ser de un tipo de dato diferente (por ejemplo, enteros, cadenas, boleanos, etc.). Las tuplas
pueden contener otras tuplas o listas (y viceversa).
tuplaVacia = ()
miTup1 = 1,
print(type(miTup1)) # salida: <class 'tuple'>
miTup2 = 1
5. Las tuplas son inmutables, lo que significa que no se puede agregar, modificar, cambiar o quitar elementos. El siguiente
fragmento de código provocará una excepción:
miTupla = 1, 2, 3,
del miTupla
6. Puedes navegar a través de los elementos de una tupla con un bucle (Ejemplo 1), verificar si un elemento o no esta presente en
la tupla (Ejemplo 2), emplear la función len() para verificar cuantos elementos existen en la tupla (Ejemplo 3), o incluso unir o
multiplicar tuplas (Ejemplo 4):
# Ejemplo 1
t1 = (1, 2, 3)
print(elem)
# Ejemplo 2
t2 = (1, 2, 3, 4)
print(5 in t2)
print(5 not in t2)
# Ejemplo 3
t3 = (1, 2, 3, 5)
print(len(t3))
# Ejemplo 4
t4 = t1 + t2
t5 = t3 * 2
print(t4)
print(t5)
EXTRA
También se puede crear una tupla utilizando la función integrada de Python tuple() . Esto es particularmente útil cuando se
desea convertir un iterable (por ejemplo, una lista, rango, cadena, etcétera) en una tupla:
print(miTup)
lst = [2, 4, 6]
tup = tuple(lst)
De la misma manera, cuando se desea convertir un iterable en una liste, se puede emplear la función integrada de Python
denominada list() :
tup = 1, 2, 3,
lst = list(tup)
1. Los diccionarios son *colecciones indexadas de datos, mutables y desordenadas. (*En Python 3.6x los diccionarios están
ordenados de manera predeterminada.
Cada diccionario es un par de clave : valor. Se puede crear empleado la siguiente sintaxis:
miDictionario = {
clave1 : valor1,
clave2 : valor2,
clave3 : valor3,
2. Si se desea acceder a un elemento del diccionario, se puede hacer haciendo referencia a su clave colocándola dentro de
corchetes (ejemplo 1) o utilizando el método get() (ejemplo 2):
polEspDict = {
"kwiat" : "flor",
"woda" : "agua",
"gleba" : "tierra"
elemento2 = polEspDict.get("woda")
3. Si se desea cambiar el valor asociado a una clave especifica, se puede hacer haciendo referencia a la clave del elemento, a
continuación se muestra un ejemplo:
polEspDict = {
"zamek" : "castillo",
"woda" : "agua",
"gleba" : "tierra"
}
polEspDict["zamek"] = "cerradura"
4. Para agregar o eliminar una clave (junto con su valor asociado), emplea la siguiente sintaxis:
print(miDirectorioTelefonico) # salida: {}
Además, se puede insertar un elemento a un diccionario utilizando el método update() , y eliminar el ultimo elemento con el
método popitem() , por ejemplo:
polEspDict.popitem()
5. Se puede emplear el bucle for para iterar a través del diccionario, por ejemplo:
polEspDict = {
"zamek" : "castillo",
"woda" : "agua",
"gleba" : "tierra"
# gleba
6. Si deseas examinar los elementos (claves y valores) del diccionario, puedes emplear el método items() por ejemplo:
polEspDict = {
"zamek" : "castillo",
"woda" : "agua",
"gleba" : "tierra"
7. Para comprobar si una clave existe en un diccionario, se puede emplear la palabra reservada in :
polEspDict = {
"zamek" : "castillo",
"woda" : "agua",
"gleba" : "tierra"
if "zamek" in polEspDict:
print("SI")
else:
print("NO")
8. Se puede emplear la palabra reservada del para eliminar un elemento, o un diccionario entero. Para eliminar todos los
elementos de un diccionario se debe emplear el método clear() :
polEspDict = {
"zamek" : "castillo",
"woda" : "agua",
"gleba" : "tierra"
print(len(polEspDict)) # salida: 3
print(len(polEspDict)) # salida: 2
print(len(polEspDict)) # salida: 0
polEspDict = {
"zamek" : "castillo",
"woda" : "agua",
"gleba" : "tierra"
copyDict = polEspDict.copy()
Ejercicio 1
miTup = (1, 2, 3)
print(miTup[2])
Revisar
tup = 1, 2, 3
a, b, c = tup
print(a * b * c)
Revisar
El programa imprimirá 6 en pantalla. Los elementos de la tupla tup han sido "desempaquetados" en las variables a , b , y c .
Ejercicio 3
Completa el código para emplear correctamente el método count() para encontrar la cantidad de 2 duplicados en la tupla
siguiente.
tup = 1, 2, 3, 2, 4, 5, 6, 2, 7, 2, 8, 9
duplicados = # tu código
print(duplicados) # salida: 4
Revisar
tup = 1, 2, 3, 2, 4, 5, 6, 2, 7, 2, 8, 9
duplicates = tup.count(2)
print(duplicado) # salida: 4
Ejercicio 4
Escribe un programa que "una" los dos diccionarios ( d1 y d2 ) para crear uno nuevo ( d3 ).
# tu código
print(d3)
Revisar
Solución Muestra:
d1 = {'Adam Smith':'A', 'Judy Paxton':'B+'}
d3 = {}
d3.update(elemento)
print(d3)
Ejercicio 5
t = # tu código
print(t)
Revisar
Solución muestra:
l = ["carro", "Ford", "flor", "Tulipán"]
t = tuple(l)
print(t)
Ejercicio 6
# tu código
print(colDict)
Revisar
Solución Muestra:
colores = (("verde", "#008000"), ("azul", "#0000FF"))
colDict = dict(colores)
print(colDict)
Ejercicio 7
copyMiDict = myDict.copy()
miDict.clear()
print(copyMiDict)
Revisar
Ejercicio 8
Revisar
rojo : (255, 0, 0)