Python 5
Python 5
Cuando se desea mostrar o imprimir algo en consola se utiliza print() . Cuando se desea leer el valor
de una variable se emplea input() , combinados posiblemente con int() o float() .
También se ha hecho uso de algunos métodos, las cuales también son funciones, pero declarados de una
manera muy especifica.
Ahora aprenderás a escribir tus propias funciones, y como utilizarlas. Escribiremos varias de ellas juntos,
desde muy sencillas hasta algo complejas. Se requerirá de tu concentración y atención.
Muy a menudo ocurre que un cierto fragmento de código se repite muchas veces en un programa. Se
repite de manera literal o, con algunas modificaciones menores, empleando algunas otras variables
dentro del programa. También ocurre que un programador ha comenzado a copiar y pegar ciertas partes
del código en más de una ocasión en el mismo programa.
Puede ser muy frustrante percatarse de repente que existe un error en el código copiado. El programador
tendrá que escarbar bastante para encontrar todos los lugares en el código donde hay que corregir el
error. Además, existe un gran riesgo de que las correcciones produzcan errores adicionales.
Definamos la primer condición por la cual es una buena idea comenzar a escribir funciones propias: si
un fragmento de código comienza a aparecer en más de una ocasión, considera la posibilidad de
aislarlo en la forma de una función invocando la función desde el lugar en el que originalmente se
encontraba.
Puede suceder que el algoritmo que se desea implementar sea tan complejo que el código comience a
crecer de manera incontrolada y, de repente, ya no se puede navegar por él tan fácilmente.
Se puede intentar solucionar este problema comentando el código, pero pronto te darás cuenta que esto
empeorará la situación - demasiados comentarios hacen que el código sea más difícil de leer y
entender. Algunos dicen que una función bien escrita debe ser comprensible con tan solo una
mirada.
Un buen desarrollador divide el código (o mejor dicho: el problema) en piezas aisladas, y codifica cada
una de ellas en la forma de una función.
Esto simplifica considerablemente el trabajo del programa, debido a que cada pieza se codifica por
separado y consecuentemente se prueba por separado. A este proceso se le llama
comúnmente descomposición.
Existe una segunda condición: si un fragmento de código se hace tan extenso que leerlo o entenderlo
se hace complicado, considera dividirlo pequeños problemas por separado e implementa cada uno
de ellos como una función independiente.
Esta descomposición continua hasta que se obtiene un conjunto de funciones cortas, fáciles de
comprender y probar.
Descomposición
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
Observa el fragmento de código en el editor.
El mensaje enviado a la consola por la función print() es siempre el mismo. El código es
funcional y no contiene errores, sin embargo imagina tendrías que hacer si tu jefe pidiera
cambiar el mensaje para que fuese mas cortés, por ejemplo, que comience con la
frase "Por favor," .
Tendrías que tomar algo de tiempo para cambiar el mensaje en todos los lugares donde
aparece (podrías hacer uso de copiar y pegar, pero eso no lo haría mas sencillo). Es muy
probable que cometas errores durante el proceso de corrección, eso traería frustración a
ti y a tu jefe.
Para que esto funcione, dicho código debe ser invocado cada vez que se requiera.
a = int(input())
b = int(input())
c = int(input())
Tu primer función
¿Cómo es que se crea dicha función?
def nombreFuncion():
cuerpoFuncion
def mensaje():
print("Ingresa un valor: ")
def mensaje():
print("Ingresa un valor: ")
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: ")
a = int(input())
b = int(input())
c = int(input())
Cuando se invoca una función, Python recuerda el lugar donde esto ocurre y salta hacia dentro
de la función invocada.
El cuerpo de la función es entonces ejecutado.
Al llegar al final de la función, Python regresa al lugar inmediato después de donde ocurrió la
invocación.
Recuerda: Python lee el código de arriba hacia abajo. No va a adelantarse en el código para determinar si
la función invocada esta definida mas adelante, el lugar correcto para definirla es antes de ser invocada.
Se ha movido la función al final del código. ¿Podrá Python encontrarla cuando la ejecución llegue a la
invocación?
No intentes forzar a Python a encontrar funciones que no están definidas en el lugar correcto.
def mensaje():
print("Ingresa un valor: ")
mensaje = 1
El asignar un valor al nombre "mensaje" causa que Python olvide su rol anterior. La función con el
nombre de mensaje ya no estará disponible.
def mensaje():
print("Ingresa un valor: ")
mensaje()
def mensaje():
print("Ingresa un valor: ")
mensaje()
a = int(input())
mensaje()
b = int(input())
mensaje()
c = int(input())
El modificar el mensaje de entrada es ahora sencillo: se puede hacer con solo modificar el código una
única vez - dentro del cuerpo de la función.
Puntos 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.
3. Las funciones propias se pueden definir utilizando la palabra reservada def y con la siguiente
sintaxis:
def tuFuncion (parámetros opcionales):
# el cuerpo de la función
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
Ejercicio 2
¿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:
Enriquezcamos la función anterior agregándole un parámetro, se utilizará para mostrar al usuario el valor
de un número que la función pide.
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.
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)
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)
Ingresa un número: 1
1234
Aquí esta:
mensaje("teléfono", 11)
mensaje("precio", 5)
mensaje("número", "número")
Ejecuta el código, modifícalo, agrega mas parámetros y ve como esto afecta la salida.
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."
presentar("Luke", "Skywalker")
presentar("Jesse", "Quick")
presentar("Clark", "Kent")
Ahora imaginemos que la función esta siendo utilizada en Hungría. En este caso, el código
sería de la siguiente manera:
presentar("Quick", "Jesse")
presentar("Kent", "Clark")
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 = .
introduction(apellido="Skywalker", primerNombre="Luke")
Inténtalo tu mismo.
suma(1, 2, 3)
1 + 2 + 3 = 6
Hasta ahorita es un ejemplo puro de un argumento posicional.
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
suma(3, a = 1, b = 2)
suma(4, 3, c = 2)
Todo es correcto, pero el dejar solo un argumento con palabras clave es algo extraño -
¿Qué es lo que opinas?
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")
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 ()
Y esta es la salida esperada:
presentar(segundoNombre="Rodríguez")
La salida es:
Pruébalo.
Puntos Clave
1. Se puede pasar información a las funciones utilizando parámetros. Las funciones pueden tener tantos
parámetros como sean necesarios.
hola("Greg")
holaTodos("Sebastián", "Felipe")
c = input("Calle: ")
cp = input("Código Postal: ")
cd = input("Ciudad: ")
resta(5, 2) # salida: 3
resta(2, 5) # salida: -3
Ejemplo 2
def resta(a, b):
print(a - b)
3. Se puede utilizar la técnica de argumentos con palabras clave para asignar valores predefinidos a los
argumentos:
Ejercicio 1
intro()
Revisar
Mi nombre es Bond. James Bond.
Ejercicio 2
intro(b="Sergio López")
Revisar
Ejercicio 3
intro("Susan")
Revisar
Ejercicio 4
suma(a=1, c=3)
Revisar
Efectos y resultados: la instrucción return
Todas las funciones presentadas anteriormente tienen algún tipo de efecto: producen un texto y lo envían
a la consola.
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.
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.
print("Tres ...")
print("Dos ...")
print("Uno ...")
if not deseos:
return
print("¡Feliz año nuevo!")
felizAñoNuevo()
Tres ...
Dos...
Uno...
felizAñoNuevo(False)
Tres ...
Dos...
Uno ...
funcion():
return expresión
def funcion_aburrida():
return 123
x = funcion_aburrida()
Vamos a investigarlo.
La instrucción return , enriquecida con la expresión (la expresión es muy simple aquí), "transporta" el
valor de la expresión al lugar donde se ha invocado la función.
El resultado se puede usar libremente aquí, por ejemplo, para ser asignado a una variable.
def funcion_aburrida():
return 123
funcion_aburrida()
No olvides:
Espera un segundo, ¿Significa esto que también hay resultados inútiles? Sí, en cierto sentido.
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 .
Vamos a probarlo.
print(strangeFunction(2))
print(strangeFunction(1))
Esto es lo que vemos en la consola:
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]))
print(sumaDeLista(5))
Esto se debe al hecho de que el bucle for no puede iterar un solo valor entero.
Efectos y resultados: listas y funciones - continuación
La segunda pregunta es: ¿Puede una lista ser el resultado de una función?
¡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.
Tiempo estimado
10-15 minutos
Nivel de dificultad
Fácil
Objetivos
Familiarizar al estudiante con:
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.
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):
for i in range(len(testData)):
yr = testData[i]
print(yr,"->",end="")
result = isYearLeap(yr)
if result == testResults[i]:
print("OK")
else:
print("Error")
Tiempo estimado
15-20 minutos
Nivel de dificultad
Medio
Requisitos previos
LABORATORIO 4.1.3.6
Objetivos
Familiarizar al estudiante con:
La parte inicial de la función está lista. Ahora, haz que la función devuelva None si los
argumentos no tienen sentido.
Por supuesto, puedes (y debes) utilizar la función previamente escrita y probada (LAB
4.1.3.6). Puede ser muy útil. Te recomendamos que utilices una lista con los meses.
Puedea crearla dentro de la función; este truco acortará significativamente el código.
Hemos preparado un código de prueba. Amplíalo para incluir más casos de prueba.
def isYearLeap(year):
for i in range(len(testYears)):
yr = testYears[i]
mo = testMonths[i]
if result == testResults[i]:
print("OK")
else:
print("Error")
Tiempo estimado
20-30 minutos
Nivel de dificultad
Medio
Requisitos previos
LAB 4.1.3.6
LAB 4.1.3.7
Objetivos
Familiarizar al estudiante con:
Proyectar y escribir funciones con parámetros.
Utilizar la sentencia return.
Construir un conjunto de funciones de utilidad.
Utilizar las funciones propias del estudiante.
Escenario
Tu tarea es escribir y probar una función que toma tres argumentos (un año, un mes y un
día del mes) y devuelve el día correspondiente del año, o devuelve None si cualquiera de
los argumentos no es válido.
Debes utilizar las funciones previamente escritas y probadas. Agrega algunos casos de
prueba al código. Esta prueba es solo el comienzo.
def isYearLeap(year):
Nivel de dificultad
Medio
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.
Por otra parte, 7 es un número primo, ya que no podemos encontrar ningún divisor para
el.
Tu tarea es escribir una función que verifique si un número es primo o no.
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.
Datos de prueba
Salida esperada:
2 3 5 7 11 13 17 19
def isPrime(num):
if isPrime(i + 1):
print()
Tiempo estimado
10-15 minutos
Nivel de dificultad
Fácil
Objetivos
Mejorar las habilidades del estudiante para definir, utilizar y probar funciones.
Escenario
El consumo de combustible de un automóvil se puede expresar de muchas maneras diferentes. Por
ejemplo, en Europa, se muestra como la cantidad de combustible consumido por cada 100 kilómetros.
En los EE. UU., se muestra como la cantidad de millas recorridas por un automóvil con un galón de
combustible.
Tu tarea es escribir un par de funciones que conviertan l/100km a mpg(milas por galón), y viceversa.
Las funciones:
Datos de prueba
Salida esperada:
60.31143162393162
31.36194444444444
23.52145833333333
3.9007393587617467
7.490910297239916
10.009131205673757
Sandbox
Code
def l100kmtompg(liters):
#
# coloca tu código aqui
#
def mpgtol100km(miles):
#
# coloca tu código aqui
#
print(l100kmtompg(3.9))
print(l100kmtompg(7.5))
print(l100kmtompg(10.))
print(mpgtol100km(60.3))
print(mpgtol100km(31.4))
print(mpgtol100km(23.5))
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def l100kmtompg(liters):
#
# coloca tu código aqui
#
def mpgtol100km(miles):
#
# coloca tu código aqui
#
print(l100kmtompg(3.9))
print(l100kmtompg(7.5))
print(l100kmtompg(10.))
print(mpgtol100km(60.3))
print(mpgtol100km(31.4))
print(mpgtol100km(23.5))
Console
def l100kmtompg(liters):
#
def mpgtol100km(miles):
print(l100kmtompg(3.9))
print(l100kmtompg(7.5))
print(l100kmtompg(10.))
print(mpgtol100km(60.3))
print(mpgtol100km(31.4))
print(mpgtol100km(23.5))
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:
return a * b
return
2. El resultado de una función se puede asignar fácilmente a una variable, por ejemplo:
def deseos():
d = deseos()
# Ejemplo 1
def deseos():
print("Mis deseos")
# Ejemplo 2
def deseos():
print("Mis Deseos")
# ¡Feliz Cumpleaños!
3. Puedes usar una lista como argumento de una función, por ejemplo:
def HolaaTodos(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
return False
print(isInt(5))
print(isInt(5.0))
print(isInt("5"))
Revisar
True
False
None
Ejercicio 3
def evenNumLst(ran):
lst = []
if num % 2 == 0:
lst.append(num)
return lst
print(evenNumLst(11))
Revisar
[0, 2, 4, 6, 8, 10]
Ejercicio 4
def listUpdater(lst):
updList = []
elem **= 2
updList.append(elem)
return updList
l = [1, 2, 3, 4, 5]
print(listUpdater(l))
Revisar
[1, 4, 9, 16, 25]
Vamos a conducir algunos experimentos para mostrar como es que Python define los
alcances y como los puedes utilizar para tu beneficio.
def scopeTest():
x = 123
scopeTest()
print(x)
¿Conozco a la variable? 1
1
La respuesta es: una variable que existe fuera de una función tiene alcance dentro
del cuerpo de la función.
def miFuncion():
var = 2
print("¿Conozco a la variable?", var)
var = 1
miFuncion()
print(var)
El resultado ha cambiado tambiénm el código arroja una salida con una ligera diferencia:
¿Conozco a la variable? 2
1
Una variable que existe fuera de una función tiene un alcance dentro del cuerpo de
la función, excluyendo a aquellas que tienen el mismo nombre.
También significa que el alcance de una variable existente fuera de una función solo
se puede implementar dentro de una función cuando su valor es leído. El asignar un
valor hace que la función cree su propia variable.
def miFuncion():
var = 1
miFuncion()
print(var)
global name
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).
def miFuncion():
global var
var = 2
var = 1
miFuncion()
print(var)
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?
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)
[2, 3]
[3]
Intentémoslo:
def miFuncion(n):
print("Yo obtuve", n)
n += 1
var = 1
miFuncion(var)
print(var)
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
2
Funciones Simples: Calcular el IMC
Definamos una función que calcula el Índice de Masa Corporal (IMC).
La nueva función tendrá dos parámetros. Su nombre será imc , pero si prefieres utilizar
otro nombre, adelante.
Codifiquemos la función.
print(imc(52.5, 1.65))
La función hace lo que deseamos, pero es un poco sencilla - asume que los valores de
ambos parámetros son significativos. Se debe comprobar que son confiables.
Vamos a comprobar ambos y regresar None si cualquiera de los dos es incorrecto.
print(imc(52.5, 1.65))
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.
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))
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?
return lb * 0.45359237
return None
La respuesta es:
27.565214082533313
Sandbox
Code
def imc(peso, altura):
if altura < 1.0 or altura > 2.5 or \
peso < 20 or peso > 200:
return None
print(imc(352.5, 1.65))
1
2
3
4
5
6
7
8
9
def imc(peso, altura):
if altura < 1.0 or altura > 2.5 or \
peso < 20 or peso > 200:
return None
Console
return None
print(imc(352.5, 1.65))
Algunas funciones simples: continuación
Ahora trabajaremos con triángulos. Comenzaremos con una función que verifique si tres
lados de ciertas longitudes pueden formar un triángulo.
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))
if a + b <= c:
return False
if b + c <= a:
return False
if c + a <= b:
return False
return True
c2 = a2 + b2
return False
return c ** 2 == a ** 2 + b ** 2
return a ** 2 == b ** 2 + c ** 2
print(esUnTrianguloRectangulo(5, 3, 4))
print(esUnTrianguloRectangulo(1, 3, 4))
Observa como se establece la relación entre la hipotenusa y los dos catetos. Se eligió el
lado mas largo y se aplico el Teorema de Pitágoras para verificar que todo estuviese en
orden. Esto requiere tres revisiones en total.
if esUnTriangulo(a, b, c):
else:
p = (a + b + c) / 2
return None
return heron(a, b, c)
0.49999999999999983
No, no lo es. Son solo los cálculos de valores punto flotantes. Pronto se discutirá el
tema.
if esUnTriangulo(a, b, c):
0! = 1 (¡Si!, es verdad.)
1! = 1
2! = 1 * 2
3! = 1 * 2 * 3
4! = 1 * 2 * 3 * 4
n! = 1 * 2 ** 3 * 4 * ... * n-1 * n
def factorialFun(n):
if n < 0:
return None
if n < 2:
return 1
producto = 1
producto *= i
return producto
print(n, factorialFun(n))
1 1
2 2
3 6
4 24
5 120
fib1 = 1
fib2 = 1
fib3 = 1 + 1 = 2
fib4 = 1 + 2 = 3
fib5 = 2 + 3 = 5
fib6 = 3 + 5 = 8
fib7 = 5 + 8 = 13
def fib(n):
if n < 1:
return None
if n < 3:
return 1
elem1 = elem2 = 1
sum = 0
for i in range(3, n + 1):
sum = elem1 + elem2
elem1, elem2 = elem2, sum
return sum
Analiza el codigo del bucle for cuidadosamente, descifra como se mueven las
variables elem1 y elem2 a través de los números subsecuentes de la serie Fibonacci.
1 -> 1
2 -> 1
3 -> 2
4 -> 3
5 -> 5
6 -> 8
7 -> 13
8 -> 21
9 -> 34
Este termino puede describir muchos conceptos distintos, pero uno de ellos, hace
referencia a la programación computacional.
Tanto el factorial como la serie Fibonacci, son las mejores opciones para ilustrar este
fenómeno.
El número ith se refiere al número i-1, y así sucesivamente hasta llegar a los primeros dos.
¿Puede ser empleado en el código? Por supuesto que puede. Puede hacer el código mas
corto y claro.
def fib(n):
if n < 1:
return None
if n < 3:
return 1
Si, existe algo de riesgo. Si no se considera una condición que detenga las
invocaciones recursivas, el programa puede entrar en un bucle infinito. Se debe ser
cuidadoso.
n! = 1 × 2 × 3 × ... × n-1 × n
Es obvio que:
n! = (n-1)! × n
Aquí esta:
def factorialFun(n):
if n < 0:
return None
if n < 2:
return 1
return n * factorialFun(n - 1)
def fib(n):
if n < 1:
return None
if n < 3:
return 1
elem1 = elem2 = 1
sum = 0
return sum
Puntos Clave
1. Una función puede invocar otras funciones o incluso a sí misma. Cuando una función se invoca a si
misma, se le conoce como recursividad, y la función que se invoca a si misma y contiene una condición
de terminación (la cual le dice a la función que ya no siga invocándose a si misma) es llamada una
función recursiva.
2. Se pueden emplear funciones recursivas en Python para crear funciones limpias, elegantes, y dividir
el código en trozos más pequeños. Sin embargo, se debe tener mucho cuidado ya que es muy fácil
cometer un error y crear una función la cual nunca termine. También se debe considerar que las
funciones recursivas consumen mucha memoria, y por lo tanto pueden ser en ocasiones ineficientes.
Al emplear la recursividad, se deben de tomar en cuenta tanto sus ventajas como desventajas.
La función factorial es un ejemplo clásico de como se puede implementar el concepto de recursividad:
def factorial(n):
if n == 1: # la condición de terminación
return 1
else:
return n * factorial(n - 1)
print(factorial(4)) # 4 * 3 * 2 * 1 = 24
Ejercicio 1
def factorial(n):
return n * factorial(n - 1)
print(factorial(4))
Revisar
La función no tiene una condición de terminación, por lo tanto Python arrojara una excepción
( RecursionError: maximum recursion depth exceeded )
Ejercicio 2
def fun(a):
if a > 30:
return 3
else:
return a + fun(a + 3)
print(fun(25))
Revisar
56
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.).
¿Cómo crear una tupla?
¿Es posible crear una tupla vacía? Si, solo se necesitan unos paréntesis:
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
print(miTupla[0])
print(miTupla[-1])
print(miTupla[1:])
print(miTupla[:-2])
print(elem)
¿Cómo utilizar una tupla? continuación
¿Qué más pueden hacer las tuplas?
La salida es la siguiente:
9
(1, 10, 100, 1000, 10000)
(1, 10, 100, 1, 10, 100, 1, 10, 100)
True
True
Una de las propiedades de las tuplas mas útiles es que pueden aparecer en el lado
izquierdo del operador de asignación. Este fenómeno ya se vio con anterioridad,
cuando fue necesario encontrar una manera de intercambiar los valores entre dos
variables.
Observa el siguiente fragmento de código:
var = 123
t1 = (1, )
t2 = (2, )
t3 = (3, var)
Muestra tres tuplas interactuando en efecto, los valores almacenados en ellas "circulan"
entre ellas. t1 se convierte en t2 , t2 se convierte en t3 , y t3 se convierte en t1 .
t2 = miTupla * 3
print(len(t2))
print(t1)
print(t2)
print(10 in miTupla)
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 .
diccionarioVacio = {}
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.
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'])
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'])
diccionarioVacio = {}
###
¿Cómo utilizar un diccionario? El método keys()
¿Pueden los diccionarios ser examinados utilizando el bucle for , como las listas o tuplas?
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).
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
Sandbox
Code
dict = {"gato" : "chat", "perro" : "chien", "caballo" : "cheval"}
1
2
3
4
5
dict = {"gato" : "chat", "perro" : "chien", "caballo" : "cheval"}
for spanish, french in dict.items():
print(spanish, "->", french)
Console
dict = {"gato" : "chat", "perro" : "chien", "caballo" : "cheval"}
Observa:
dict['gato'] = 'minou'
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
dict.update({"pato" : "canard"})
print(dict)
Eliminado claves
¿Puedes deducir como eliminar una clave de un diccionario?
A continuación un ejemplo:
del dict['perro']
print(dict)
EXTRA
dict.popitem()
dict['gato'] = 'minou'
print(dict)
Las tuplas y los diccionarios pueden trabajar juntos
Se ha preparado un ejemplo sencillo, mostrando como las tuplas y los diccionarios pueden trabajar
juntos.
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.
grupo = {}
while True:
if nombre == 'exit':
break
if nombre in grupo:
grupo[nombre] += (calif,)
else:
grupo[nombre] = (calif,)
for nombre in sorted(grupo.keys()):
sum = 0
contador = 0
sum += calif
contador += 1
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,
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)
# 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)
Cada diccionario es un par de clave : valor. Se puede crear empleado la siguiente sintaxis:
miDictionario = {
clave1 : valor1,
clave2 : valor2,
clave3 : valor3,
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"
item = polEspDict["zamek"] # salida: cerradura
4. Para agregar o eliminar una clave (junto con su valor asociado), emplea la siguiente
sintaxis:
print(miDirectorioTelefonico) # salida: {}
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"
}
for item in polEspDict:
# woda
# gleba
Ejercicio 1
miTup = (1, 2, 3)
print(miTup[2])
Revisar
Ejercicio 2
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 ).
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
¿Cuál es la salida del siguiente programa?
colores = {
Revisar
rojo : (255, 0, 0)
Tiempo estimado
30-60 minutos
Nivel de dificultad
Medio/difícil
Objetivos
Perfeccionar las habilidades del estudiante al emplear Python para resolver problemas
complejos.
La integración de técnicas de programación en un solo programa consistente de varias partes.
Escenario
Tu tarea es escribir un simple programa que simule jugar a tic-tac-toe (nombre en inglés) con el
usuario. Para hacerlo más fácil, Hemos decidido simplificar el juego. Aquí están nuestras reglas:
+-------+-------+-------+
| | | |
| 1 | 2 | 3 |
| | | |
+-------+-------+-------+
| | | |
| 4 | X | 6 |
| | | |
+-------+-------+-------+
| | | |
| 7 | 8 | 9 |
| | | |
+-------+-------+-------+
Ingresa tu movimiento: 1
+-------+-------+-------+
| | | |
| O | 2 | 3 |
| | | |
+-------+-------+-------+
| | | |
| 4 | X | 6 |
| | | |
+-------+-------+-------+
| | | |
| 7 | 8 | 9 |
| | | |
+-------+-------+-------+
+-------+-------+-------+
| | | |
| O | X | 3 |
| | | |
+-------+-------+-------+
| | | |
| 4 | X | 6 |
| | | |
+-------+-------+-------+
| | | |
| 7 | 8 | 9 |
| | | |
+-------+-------+-------+
Ingresa tu movimiento: 8
+-------+-------+-------+
| | | |
| O | X | 3 |
| | | |
+-------+-------+-------+
| | | |
| 4 | X | 6 |
| | | |
+-------+-------+-------+
| | | |
| 7 | O | 9 |
| | | |
+-------+-------+-------+
+-------+-------+-------+
| | | |
| O | X | 3 |
| | | |
+-------+-------+-------+
| | | |
| 4 | X | X |
| | | |
+-------+-------+-------+
| | | |
| 7 | O | 9 |
| | | |
+-------+-------+-------+
Ingresa tu movimiento: 4
+-------+-------+-------+
| | | |
| O | X | 3 |
| | | |
+-------+-------+-------+
| | | |
| O | X | X |
| | | |
+-------+-------+-------+
| | | |
| 7 | O | 9 |
| | | |
+-------+-------+-------+
+-------+-------+-------+
| | | |
| O | X | X |
| | | |
+-------+-------+-------+
| | | |
| O | X | X |
| | | |
+-------+-------+-------+
| | | |
| 7 | O | 9 |
| | | |
+-------+-------+-------+
Ingresa tu movimiento: 7
+-------+-------+-------+
| | | |
| O | X | X |
| | | |
+-------+-------+-------+
| | | |
| O | X | X |
| | | |
+-------+-------+-------+
| | | |
| O | O | 9 |
| | | |
+-------+-------+-------+
¡Has Ganado!
Requerimientos
Implementa las siguientes características:
El tablero debe ser almacenado como una lista de tres elementos, mientras que cada elemento es
otra lista de tres elementos (la lista interna representa las filas) de manera que todos los cuadros
puedas ser accedidos empleado la siguiente sintaxis:
board[fila][columna]
Cada uno de los elementos internos de la lista puede contener 'O' , 'X' , o un digito
representando el número del cuadro (dicho cuadro se considera como libre).
La apariencia de tablero debe de ser igual a la presentada en el ejemplo.
Implementa las funciones definidas para ti en el editor.
Para obtener un valor numérico aleatorio se puede emplear una función integrada de Python
denominada randrange() . El siguiente ejemplo muestra como utilizarla (El programa imprime 10
números aleatorios del 1 al 8).
for i in range(10):
print(randrange(8))
def DisplayBoard(board):
# y lo muestra en la consola
def EnterMove(board):
# la función acepta el estado actual del tablero y pregunta al usuario acerca de su movimiento,
def MakeListOfFreeFields(board):
# la función examina el tablero y construye una lista de todos los cuadros vacíos
# la lista esta compuesta por tuplas, cada tupla es un par de números que indican la fila y columna
def DrawMove(board):
#
¡Felicidades, has completado el Módulo 4!
¡Bien hecho! Has llegado al final del Módulo 4 y también has terminado una parte importante de tu
educación sobre programación en Python. A continuación se presenta un corto resumen de los objetivos
cubiertos en el módulo:
Ahora estas listo para tomar el quiz del módulo e intentar el desafío final: Examen del Módulo 4, el cual
te ayudará a determinar que tanto has aprendido hasta ahora.
¡Felicidades!
Has completado la Parte 1 del curso: Fundamentos de
Programación en Python.
¡Bien hecho! Has llegado al final de la Parte 1 del Curso: Fundamentos de Programación en Python, y
has completado una parte importante de tu educación sobre la programación en Python.
Ahora estas listo para tomar el examen de certificación PCEP - Programador Certificado en Python
Nivel Básico, el cual es un paso que te acerca a la certificación PCAP - Programador Certificado en
Python Nivel Asociado así como el comenzar una carrera en el desarrollo de software, la programación
en Python y tecnologías relacionadas.