Вы находитесь на странице: 1из 42

UNIDAD 07

Funciones 

 
 
 
 
 
 
 
 
 
 
 
Ejercicios de Funciones en 
Python 
 
Elaborado por los Ayudantes de Cátedra  
UNIDAD 07
Funciones 

Ejercicios de Funciones en 


Python 
 
 

Ejercicio 1 
Una  compañía  de  telefonía  celular,  desea  realizar  un  programa  que  le  permita  obtener 
estadísticas de sus clientes para mejorar su servicio, en el cual se solicita lo siguiente: 
a)  Función  Cargar  celulares​,  que  recibe  una  lista  [[cedula,  nombre,  numero  de  celular 
minutos_hablados],[…],[…],[…]]  y  crea  un  diccionario  donde  la  clave  es  el  número  de 
cédula  del  usuario  y  el  valor  el  resto  de  los  datos;  teniendo  en  cuenta  que  una 
persona puede tener más de un numero celular; retorna el diccionario. 
def​ c ​ argarCelulares​(lista):
dic = {}
​for​ i ​in​ lista:
cedula = i[​0​]
nombre = i[​1​]
celular = i[​2​]
num_minutos = i[​3​]
​if​ cedula ​not​ ​in​ dic:
dic[cedula] =
{​"nombre"​:nombre,​"celulares"​:[celular],​"minutos_hablados"​:[num_minutos]}
​else​:
dic[cedula][​"celulares"​].append(celular)
dic[cedula][​"minutos_hablados"​].append(num_minutos)
​return​ dic
 
 
b)  Función  Total  de  minutos​,  que  recibe un numero de cedula, el diccionario del literal 
anterior,  valida  que  el  número  de  cédula  y  calcula  el  total  de  minutos  y  retorna  una 
lista  con  tuplas  con  el  número  de  celular  y  el  número  de  minutos  hablados  y 
suponiendo  que  cada  minuto  hablado  vale  $  0.04  calcular  el  total  a  pagar  por  lo 
minutos hablados. 
def​ t ​ otalMinutos​(cedula,diccionario):
totMinutos=​0
lis = []
​if​ cedula ​not​ ​in​ diccionario:
print(​"No registrado"​)
​else​:
dic = diccionario[cedula]
UNIDAD 07
Funciones 

​for​ i ​in​ range(len(dic[​"celulares"​])):


lis.append((dic[​"celulares"​][i],dic[​"minutos_hablados"​][i]))
totMinutos+=int(dic[​"minutos_hablados"​][i])
totPagar = totMinutos*​0.04
​return​ lis,totPagar
 
 
c)  Función  Reportes​,  que  recibe  un  diccionario,  un  nombre  de  archivo  y  genera  un 
archivo con el número de cédula, total de minutos hablados y total a pagar. 
def​ r​ eportes​(dic,nombre):
archivo = open(nombre,​"w"​)
​for​ cedula ​in​ dic:
totMinutos=​0
​for​ i ​in​ range(len(dic[cedula][​"celulares"​])):
totMinutos += int(dic[cedula][​"minutos_hablados"​][i])
totPagar = totMinutos*​0.04
archivo.write(cedula+​","​+str(totMinutos)+​","​+str(totPagar)+​"\n"​)
archivo.close()
 
Programa: 
lista=[[​"0931022065"​,​"Luis Carrasco"​,​"0989716146"​,​"20"​],[​"0101068971"​,​"Jose
Carrasco"​,​"0999984610"​,​"30"​],
[​"0931548799"​,​"Cristhian Lopez"​,​"0985512638"​,​"40"​],[​"0931022065"​,​"Luis
Carrasco"​,​"0989716145"​,​"60"​]]

print(​"""
Menu:
1.Importar Datos
2.Verificar Total a Pagar
3.Guardar
4. Salir
"""​)
opc = int(input(​"Ingrese opcion: "​))
while​ opc>=​1​ ​and​ opc<​4:​
​if​ opc==​1​:
dic = cargarCelulares(lista)
print(dic)
​if​ opc==​2​:
ced = input(​"Ingrese numero de cedula: "​)
lis, tot = totalMinutos(ced, dic)
​for​ i ​in​ lis:
print(i)
print(​"El total a pagar es: $"​, tot)
​if​ opc==​3​:
nombre = input(​"Ingrese el nombre del archivo a guardar: "​)
reportes(dic, nombre)
UNIDAD 07
Funciones 

print(​"""
Menu:
1.Importar Datos
2.Verificar Total a Pagar
3.Guardar
4. Salir
"""​)
opc = int(input(​"Ingrese opcion: "​))

 
 
Escrito por: Luis Carrasco 
 
 

 
   
UNIDAD 07
Funciones 

Ejercicio 2 
La pastelería “Dos hermanas” lo ha contratado a usted para que realiza un sistema que le 
permita  registrar  las  ventas  de  dulces,  pasteles  y  panes,  con  la  finalidad  de  saber 
cuántos les queda aún en stock. 
 
La  pastelería  le  proporciona  un  diccionario  con  el  nombre  del  producto  como  clave  y 
una lista con el precio y cantidad como valor. 
 
Usted deberá definir: 
 
a)  Función  calcular  producto.  Que  recibe  el  producto  que  el  usuario  desea  comprar, 
cantidad  y  el  diccionario  con  los  productos  en  stock.  Retorna  el  valor  a  pagar  por 
dicho  producto.  Tome  en  cuenta  que  al  vender  un  producto  debe  disminuir  la 
cantidad del mismo en el diccionario (stock). 
def​ ​calcularProducto​(producto, cantidad, dic_productos):
precio=dic_productos[producto][​0​]*cantidad
dic_productos[producto][​1​]-= cantidad
return​ precio 

 
b)  Función  consultar  producto.  Que  recibe  el  nombre  de  un  producto,  el  diccionario 
con los productos en stock e imprime el producto y la cantidad. 
def​ ​consultarProducto​(producto, dic_productos):
cantidad=dic_productos[producto][​1​]
print(​'{0:15} {1:5}'​.format(​"Producto"​,​"Cantidad"​))
print(​'{0:15} {1:5d}'​.format(producto,cantidad)) 
  
c)  Función  producto  válido.  ​Que  recibe  el  nombre  de  un  producto,  el  diccionario  con 
los  productos  en  stock  y  retorna  verdadero  si  está  disponible  y  falso  si  no  lo  está. 
Está disponible si el producto ingresado existe y tiene cantidad mayor a 0. 
def​ ​productoValido​(producto, dic_productos):
if​ (producto ​not​ ​in​ dic_productos.keys() ​or
dic_productos[producto][​1​] == ​0​):
​return​ ​False
return​ ​True 
  
d)  Función  listado  de  producto.  ​Que  recibe  el  diccionario  con  los  productos  en 
stock y muestra un listado con los productos, precio y cantidad correspondiente. 
def​ ​listaProductos​(dic_productos):
print(​"Lista de productos"​)
print(​'{0:20} {1:5} {2:7}'​.format(​"Producto"​,​"Precio"​,"
​ Cantidad"​))
for​ p,lista_p ​in​ dic_productos.items():
print(​'{0:20} {1:5.2f} {2:7.0f}'​.format(p,
UNIDAD 07
Funciones 

lista_p[​0​],lista_p[​1​])) 
  
e)  Función  registrar  producto.  Que  recibe  el  nombre  del producto, precio, cantidad, el 
diccionario  con  los  productos  en stock y lo almacena en el diccionario. Debe ver si el 
producto ya existe o no, en caso de que exista, solo aumenta la cantidad y cambia de 
precio. 
def​ ​registrarProducto​(producto, precio, cantidad,dic_productos):
if​ producto ​in​ dic_productos.keys():
dic_productos[producto][​0​]=precio
dic_productos[producto][​1​]+= cantidad
else​:
dic_productos[producto]=[precio,cantidad] 

 
*Recuerde  que  los  productos  no  pueden  tener  cantidades  negativas.  Para  las funciones 
en las que debe imprimir, use format. 
 
Para  el  programa  principal  utilice  un  menú  para  registrar  producto,  consultar  producto, 
vender  productos,  obtener  listado  de  productos  y  salir.  La  opción  de  vender  productos 
debe permitir calcular el total de todos los productos que desee comprar un cliente. 
 
 
Programa principal 
productos={​"Pan de dulce"​:[​0.12​,​100​], ​"Pan enrollado"​:[​0.12​,​100​],​"Pan
mixto"​:[​0.12​,​100​],​"Torta helada"​:[​5.00​,​20​],​"Torta de chocolate"​:[​4.30​,​15​],
"Cake"​:[​0.40​,​20​],​"Budin"​:[​0.50​,​3​],​"Cara sucia"​:[​0.20​,​30​]}
opcion=​0
while​ opcion!=​5​:
​if​ opcion==​1​:
producto=input(​"Ingrese nombre del producto: "​)
precio=float(input(​"Ingrese precio: "​))
cantidad = int(input(​"Ingrese cantidad: "​))
registrarProducto(producto,precio,cantidad, productos)
print(​"Ingreso exitoso"​)
​elif​ opcion==​2​:
producto = input(​"Ingrese nombre del producto: "​)
​while​(producto ​not​ i
​ n​ productos.keys()):
print(​"El producto no existe"​)
producto = input(​"Ingrese nombre del producto: "​)
consultarProducto(producto, productos)
​elif​ opcion==​3​:
total=​0

print(​"Ingrese T o t para terminar\n"​)


producto = input(​"Ingrese nombre del producto: "​)
​while​(producto!=​"T"​ ​and​ producto!=​"t"​):
​if​ ​not​ (productoValido(producto,productos)):
UNIDAD 07
Funciones 

print(​"El producto %s no está disponible\n"​ % producto)


​else​:
cantidad = int(input(​"Ingrese cantidad: "​))
​while​(productos[producto][​1​]<cantidad):
print(​"No quedan suficientes productos\n"​)
consultarProducto(producto,productos)
cantidad = int(input(​"Ingrese cantidad: "​))
total+=calcularProducto(producto,cantidad, productos)

print(​"Ingrese T o t para terminar\n"​)


producto = input(​"Ingrese nombre del producto: "​)
print(​"El total es: %.2f\n"​ % total)
​elif​ opcion==​4​:
listaProductos(productos)
​ ="​))
print(​"MENÚ"​.center(​30​, "
print(​"1. Registrar producto\n2. Consultar producto\n3. Vender productos\n4.
Listado de productos\n5. Salir"​)
opcion=int(input(​"Ingrese la opción que desea: "​))
 
 
Escrito por: Anni Santacruz  
 
 

 
   
UNIDAD 07
Funciones 

Ejercicio 3 
 
Escriba  una  función  EsPar(num)  en  Python  que  determine  si  un  número  es  par.  Luego 
escriba  un  programa  principal  que  muestre  los  números  pares  del  1 al 50 empleando la 
función creada y que estos estén en una lista en orden descendente. 
 
Solución: 
 

 
Output: 
 

 
 
Escrito por: Kevin Errazuriz 
 
 
 
 
 
 
 
 
 
 

 
   
UNIDAD 07
Funciones 

Ejercicio 4 
 
La  función  consta de construir un rombo, el cual esta compuesto por dos triángulos, uno 
arriba  y  otro  abajo.  Esta  recibe  como  parámetro  la  altura  de  uno  de  los  triángulos  para 
poder construir el rombo. 
 
def​ ​construirrombo​(h):
asterisco =​"*"​ ; esp= ​" "
espacio1 = h​-1
espacio2=​1
formula=​0
​for​ i ​in​ range(h):
formula = ​2​*i +​1
print(esp*espacio1,end=​" "​)
print(asterisco*formula)
espacio1-=​1
formula=formula​-2
​for​ i ​in​ range(h​-1​):
print(esp*espacio2,end=​" "​)
print(asterisco*formula)
espacio2+=​1
formula-=​2
h = int(input(​"ingrese la altura de los triángulos que forman el rombo: "​))
construirrombo(h)

 
ingrese la altura de los triángulos que forman el rombo: 5
*
***
*****
*******
*********
*******
*****
***

 
 
 
Escrito por: Luis Adrian Zamora Veliz 
 

 
 
 
UNIDAD 07
Funciones 

Ejercicio 5 
 
Juego Humanos vs Monstruos 
Se  le  pide implementar las siguientes funciones para completar el juego de Humanos vs 
Monstruos. 
 
Funcion escoger usuario  
Se  requiere  que  al  iniciar  el  juego  se  escoja  en  que  bando  se  va  a  jugar.  El  jugador 
puede  escoger  ser  humano  o  monstruo.  También  se  pedira  su  nombre,  y se le asignará 
un  arma  (si  es  humano)  o  habilidad  (si  es  monstruo)  de  una  lista  de  forma  aleatoria.  y 
cada  habilidad  o  arma  tendrá  asignado  un  número  que  indica  su  poder  de  daño  y  otro 
número  que  indica  sus  puntos  de  vida.  todos  los  jugadores  inician  con  nivel  0  (Lv  0). 
Todos  estos  datos  se  guardaran  en  una  lista.  Imprimir  un  resumen  con  todos  los  datos 
de mi personaje. 
 
# [‘arma o habilidad’, poder de daño, puntos de vida]

armas = [[​'cuchillo'​,​2​,​12​], [​'espada'​,​5​,​15​],


[​'mazo'​,​4​,​16​],[​'hacha'​,​8​,​10​],[​'armadura'​,​3​,​20​]]

habilidades = [[​'volar'​,​2​,​14​],[​'super
salto'​,​4​,​10​],[​'Garras'​,​9​,​9​],[​'Invisible'​,​6​,​15​],[​'Rayo
destructor'​,​11​,​20​]]
 
Solución 
import​ random
#Personaje
personaje = []

def​ ​escogerPersonaje​():
print(​'Escoja su bando\n1. Humano\n2. Monstruo'​)
tipo = input(​'(1/2)_'​)
​while​(int(tipo) != ​1​ ​and​ int(tipo) != ​2​):
tipo = input(​'(1/2)_'​)
nombre = input(​'Nombre de su personaje:_'​)
personaje.append(nombre)
suerte = random.randint(​0​,​4) ​
​if​ int(tipo) == ​2​:
opcion = habilidades[suerte]
​else​:
opcion = armas[suerte]
personaje.append(opcion[​0​])
personaje.append(opcion[​1​])
personaje.append(opcion[​2​])
print(​'Resumen de su personaje'​)
print(​"nombre "​ + personaje[​0​])
UNIDAD 07
Funciones 

print(​"Forma de ataque "​ + personaje[​1​])


​ ) + ​' pts'​)
print(​"Vida "​ + str(personaje[​3]

escogerPersonaje()
 
Funcion buscar contrincante 
Como  parte  del  juego,  usted  puede  buscar  un  contrincante aleatorio. La funcion debera 
crear  un  personaje  ficticio  del  otro  bando  (Si  es  humano,  peleara  con  un  monstruo) 
Entonces,  peleara  con  su  personaje,  reduciendo  la  vida  del  otro  por  cada  turno.  El 
primero  en  quedarse  sin  vida  dana  la  partida.  Además  usted  puede  realizar  un  ataque 
critico  donde  se  duplica  su  poder  de  ataque.  Este  ataque  critico  tiene  un  25%  de 
probabilidad de ocurrir en cada turno. al final mostrar quien gano. 
 
def​ ​BuscarPelea​(personaje):
contrincante = []
suerte = random.randint(​0​, ​4​)
critico = random.randint(​1​, 4 ​ ​)
​if​(personaje[​1​] == ​'Monstruo'​):
contrincante.append(​'Humano'​)
opcion = armas[suerte]
​else​:
contrincante.append(​'Monstruo'​)
opcion = habilidades[suerte]
contrincante.append(opcion[​0​])
contrincante.append(opcion[​1​])
contrincante.append(opcion[​2​])
print(​"Aparecio un "​ + contrincante[​0​])
​while​(contrincante[​3​]>​0​ ​or​ personaje[​4​] > ​0​):
print(​'Ataque de '​ + str(personaje[​0​]))
​if​(critico == ​1) ​ :
print(​'Ataque critico'​)
contrincante[​3​] = contrincante[​3​] - personaje[​3]
​ *​2
​else​:
contrincante[​3​] = contrincante[​3​] - personaje[​3]​
print(​'Ataque de contrincante'​)
personaje[​4​] = personaje[​4​] - contrincante[​2​]
​if​(contrincante[​3​] <= ​0)​ :
print(​"Gano el contrincante"​)
​elif​ (personaje[​4​] <= ​0)​ :
print(​"Ganaste"​)

BuscarPelea(personaje) 
 
Escrito por: Luis Fernando Zuñiga R 
 
   
UNIDAD 07
Funciones 

Ejercicio 6 
 
Las  empresas para recibir llamadas de servicio al cliente pueden 
solicitar  se  les  asigne  números  telefónicos  1800-nombre  de  tal 
forma  se  facilite  recordarlo  para  su  marcación  en  el  teclado 
telefónico. 
 
El  número  asignado  será  1800  seguido  de  seis  dígitos  que  se 
obtienen  de  las  letras  marcadas  en  el  teclado  de  un  teléfono 
convencional mostrado en la figura.  
 

CocaCola  1800 -  262226 

Cinemark  1800 -  246362 

 
 
a)  ​Realice  una  función  ​teclaLetra(letra)​,  que  permita  convertir  una  letra  a  su respectivo 
dígito de un teclado telefónico: 

 
Nota; Si ingresa algo distinto de una letra, la función debe retornar ​-1 

b)  R​ ealice  un  programa  que  permita  ingresar  el  nombre  de  la  empresa  y  muestre  el 
número telefónico 1800-nombre que le fue asignado. 
 
# Literal a

def​ ​teclaLetra​(letra):
letra = letra.upper()
letras = [​"ABC"​,​"DEF"​,​"GHI"​,​"JKL"​,​"MNO"​,​"PQRS"​,​"TUV"​,​"WXYZ"​]
numeros = [​2​,​3​,​4​,​5​,6
​ ​,​7​,8
​ ​,​9​]
tamaño = len(letras)
​for​ i ​in​ range(tamaño):
​if​ (letra ​in​ letras[i]):
​return​ numeros[i]
​return​ ​-1

# Literal b

empresa = input(​"Ingrese el nombre de una empresa: "​)


numTelefonico = ​"1800-"
UNIDAD 07
Funciones 

digitos = ​""

for​ letra ​in​ empresa:


num = teclaLetra(letra)
digitos = digitos + str(num)

#Necesito únicamente los 6 primeros digitos


numTelefonico = numTelefonico + digitos[​0​:​6​]
print(numTelefonico) 

 
Realizado por : Kevin Urgilés 
 
   
UNIDAD 07
Funciones 

Ejercicio 7 
 
Librería “La Iliada” ha adquirido 5 libros nuevos, requiere de un programa que le permita 
registrar los libros y que permita el ingreso de uno o más libros. 
Para lo cual se requiere implementar las siguientes funciones: 
1) Función  infoLibro​,  la  cual  recibirá  una  lista  con  la  información  de  cada  libro 
[“nombre  libro”-“nombre  autor”-“año  publicación”-“editorial”-“categoría”]  y  deberá 
de crear un diccionario con el siguiente formato: 
 
{'El  Alquimista':  {'Autor':  'Paulo  Coelho',  'Año  Publicación':  '1998',  'Editorial':  'Planeta', 
'Género': 'Novela'}} 
 
def​ ​infoLibro​(lista):
libros={}
​for​ info ​in​ ​lista:
separar=info.split(​"-"​)
nomLib=separar[​0​]
autor=separar[​1] ​
año=separar[​2​]

editorial=separar[​3]
genero=separar[​4​]
libros[nomLib]={​"Autor"​:autor​,​"Año
Publicación"​:a​ño,​"Editorial"​:editorial​,​"Género"​:genero​}
​return​ libros

 
 
2) Función  categoriasLibro​,  la  cual  agrupará  a  los  libros  de  acuerdo  a  sus 
categorías,  tomar  en  cuenta  que  existen  libros  que  presentan  2  categorías,  se 
deberá mostrar los libros con sus categorías en un diccionario. 
 
def​ ​categorias​(a,lista):
categoria={}
gen1=[]
gen2=[]
gen3=[]
​for​ libros ​in​ a:
genero=a[libros][​"Género"​].split(​"/"​)
​for​ gen ​in​ genero:
​if​ gen==​"Novela"​:
gen1.append(libros)
categoria[​"Novela"​]=gen1
​elif​ gen==​"Ficción"​:
gen2.append(libros)
categoria[​"Ficción"​]=gen2
​elif​ gen==​"Cuento"​:
gen3.append(libros)
UNIDAD 07
Funciones 

categoria[​"Cuento"​]=gen3
​ eturn​ categoria
r

 
#Programa principal 
 
lista=["El Alquimista-Paulo Coelho-1998-Planeta-Novela","Lo que el viento se
llevó- Margaret Mitchell-1936-Macmillan Publishers-Novela","Divina Comedia-
Dante Alighieri-1307-Océano exprés-Ficción/Cuento","La Metamorfosis- Franz
Kafka-1915-Kurt Wolff-Cuento/Novela","Los Miserables-Victor Hugo-1862-A.
Lacroix-Novela"]

print​(​"1. Registro de libros\n 2. Géneros\n 3. Agregar libros\n 4. Salir"​)


opcion=​0
while​ opcion!=​4​:
opcion=int(​input​(​"Ingrese una opcion: "​))
​if​ opcion==​1​:
a=infoLibro(lista)
​print​(a)
elif opcion==​2​:
b=categorias(a,lista)
​print​(b)
elif opcion==​3​:
opcion1 = ​"Si"
​while​ opcion1==​"Si"​:
datosLibro=​input​(​"Ingrese nombre del libro, autor, año, editorial y
género separado por una coma (,)): "​).split(​","​)
​while​ ​len​(datosLibro)!=​5​ ​and​ ​not​ datosLibro[​2​].isdigit():
​print​(​"Por favor, vuelva a ingresar los datos."​)
datosLibro = ​input​("​ Ingrese nombre del libro, autor, año,
editorial y género separado por una coma (,)): "​).split(​","​)
a[datosLibro[​0​]]={​"Autor"​:datosLibro[​1​],​"Año
Publicación"​:datosLibro[​2​],​"Editorial"​:datosLibro[​3​],​"Género"​:datosLibro[​4​]}
opcion1=​input​(​"Desea ingresar otro libro? (Si/No): "​).capitalize()
​print​(​"Libros ingresado con éxito"​,a)
​exit​()

Realizado por Renata Navia. 


 

 
   
UNIDAD 07
Funciones 

Ejercicio 8 
 
Parte 1 
Una empresa de seguros por fin de año a decidido otorgar un bono a sus trabajadores.  
Para  ello  lo  han  contratado  a  usted  para  que  los  ayude,  donde  usted  cuenta  con  una 
lista  de  tuplas  de  tamaño  n  con  el  siguiente  formato:  [(Nombre  Empleado,Años  de 
trabajo,edad),...]  (​Asuma  que  no  hay  nombres  repetidos​).  Con  esta  información  se  pide 
escribir  una  función  llamada  ​calcularBonos(listaEmpleados)  ​la  cual  recibe  la  lista  de 
tupla  y  permita  calcular  el  "bono"  para  otorgarle  a  cada  uno  de  los  empleados.  La 
fórmula  para  calcular  el  bono  es:  (300*Años)/100.  La  función  debe  retornar  una  lista  de 
tuplas de la siguiente manera: [(Nombre Empleado,Bono,edad),...] 
def​ ​calcularBonos​(listaEmpleados):
listaBonos=[]
​for​ tupla ​in​ listaEmpleados:
nombre,añosTrabajo,edad=tupla
bono=(​300​*añosTrabajo)/​100
listaBonos=listaBonos+[(nombre,bono,edad)]
​return​ listaBonos
 
Parte 2 
Escribir  una  función  llamada  ​calcularMáximoMinimo(listaBonos)  que  reciba  la  lista  de 
tuplas  generada  en  la  función  anterior,  donde  retorne  dos  tuplas  una  con  el 
nombre,edad  y  valor  del  bono  del  empleado  que  recibe  el  mayor  "bono"  y  otra  tupla 
con los datos del empleado que recibe menor “bono”. 
 
def​ ​calcularM​á​ximoMinimo​(listaBonos):
maximoBono=​0
empleadoMaximoBono=​""
edadEmpleadoMaxi=​0
minimoBono=​1000000000
empleadoMinimoBono=​""
edadEmpleadoMini=​0
​for​ tupla ​in​ listaBonos:
nombre,bono,edad=tupla
​if​ bono>maximoBono:
maximoBono=bono
empleadoMaximoBono=nombre
edadEmpleadoMaxi=edad
​if​ bono<minimoBono:
minimoBono=bono
empleadoMinimoBono=nombre
edadEmpleadoMini=edad
​return (​empleadoMaximoBono , edadEmpleadoMaxi , maximoBono ),( empleadoMinimoBono ,
edadEmpleadoMini , minimoBono)
UNIDAD 07
Funciones 

  
Parte 3 
Escriba  un  menú  donde  emplee  las  dos  funciones  realizadas.  La  primera  opción  me 
permitirá  calcular  cada  uno  de  los  bonos  de  los  bonos  de  los  empleados  y  mostrarlos 
por  pantalla.  La  segunda  opción  permite  obtener  la  información  del  empleado  que 
recibirá un mayor bono y los datos del empleado que recibirá un menor bono 
 
Menú: 
opcion=​""
while​(opcion!=​"3"​):
print​(​".:Bienvenidos al menú de Consultas:."​)
​print​(​"1. Calcular y consultar bonos"​)
​print​(​"2. Consultar datos del empleado con mayor y menor bono"​)
​print​(​"3. Salir"​)
​print​(​"-o-"​*10)
opcion=input(​"Ingrese una opción: "​)
​print​(​"-o-"​*10)

listaEmpleados=[(​"Juan"​,6,38),(​"Andrea"​,7,36),
(​"Anthonio"​,8,45),(​"Ignacio"​,9,50),(​"Simon"​,10,45)]
listaBonos=calcularBonos(listaEmpleados)

​if​ opcion==​"1"​:
​print​(​""​)
​for​ bonos ​in​ listaBonos:
(nombre,bono,edad)=bonos
​print​(​"-Nombre: "​+nombre+​", -Bono: "​+str(bono)+
", -Edad: "​+str(edad))
​print​(​""​)

​elif​ opcion==​"2"​:
empleadoMaximo,empleadoMinimo=calcularMáximoMinimo(listaBonos)
​print​(​"\n.:Datos del empleado con mayor bono:."​)
​print​(​"\t*Nombre: "​+empleadoMaximo[0]+​"\n\t*Edad:"
​+str(empleadoMaximo[1])+​"\n\t*Bono: "​+str(empleadoMaximo[2])+​"\n"​)
​print​(​"\n.:Datos del empleado con menor bono:."​)
​print​(​"\t*Nombre: "​+empleadoMinimo[0]+​"\n\t*Edad:"
​+str(empleadoMinimo[1])+​"\n\t*Bono: "​+str(empleadoMinimo[2])+​"\n"​)

​elif​ opcion==​"3"​:
​print​(​"\nGracias por su visita..!!"​)
​else​:
​print​(​"\nOpción incorrecta\n"​) 

 
 
 
UNIDAD 07
Funciones 

Prueba 
.:Bienvenidos​ ​al​ ​menú​ d ​ e​ Consultas:.
1.​ ​Calcular​ ​y​ ​consultar​ ​bonos
2.​ ​Concultar​ ​dos​ ​del​ ​empleado​ c​ on​ m
​ áximo​ ​bono
3.​ ​Salir
-​o--o--o--o--o--o--o--o--o--o-
Ingrese​ ​una​ ​opción:​ ​1
-​o--o--o--o--o--o--o--o--o--o-

-Nombre: ​Juan,​ -Bono: ​18.0​,​ -Edad: ​38


-Nombre: ​Andrea,​ -Bono: ​21.0​,​ -Edad: ​36
-Nombre: ​Anthonio,​ -Bono: ​24.0​,​ -Edad: ​45
-Nombre: ​Ignacio,​ -Bono: ​27.0​,​ -Edad: ​50
-Nombre: ​Simon,​ -Bono: ​30.0​,​ -Edad: ​45

.:Bienvenidos​ ​al​ ​menú​ d ​ e​ Consultas:.


1.​ ​Calcular​ ​y​ ​consultar​ ​bonos
2.​ ​Concultar​ ​dos​ ​del​ ​empleado​ c​ on​ m
​ áximo​ ​bono
3.​ ​Salir
-​o--o--o--o--o--o--o--o--o--o-
Ingrese​ ​una​ ​opción:​ ​2
-​o--o--o--o--o--o--o--o--o--o-

.:Datos​ ​del​ ​empleado​ ​con​ ​mayor​ bono:.


*Nombre:​ ​Simon
*Edad:​ ​45
*Bono:​ ​30.0

.:Datos​ ​del​ ​empleado​ ​con​ ​menor​ bono:.


*Nombre:​ ​Juan
*Edad:​ ​38
*Bono:​ ​18.0

.:Bienvenidos​ ​al​ ​menú​ d ​ e​ Consultas:.


1.​ ​Calcular​ ​y​ ​consultar​ ​bonos
2.​ ​Concultar​ ​dos​ ​del​ ​empleado​ c​ on​ m
​ áximo​ ​bono
3.​ ​Salir
-​o--o--o--o--o--o--o--o--o--o-
Ingrese​ ​una​ ​opción:​ ​3
-​o--o--o--o--o--o--o--o--o--o-
Gracias​ ​por​ ​su​ ​visita..!! 
 
Escrito por: Tony Veas Cervantes 
 

 
   
UNIDAD 07
Funciones 

Ejercicio 9 
Implemente  la  función  Binario(numero),  que  recibe  como  parámetro  un  número,  y  su 
función debe convertirlo a número binario. 
Para  transformar  un  número  a  binario  se  debe  dividir  el  número  por  2  y  almacenar  el 
resto,  proceso  que  se  repite  hasta  que  el  resultado  de  dicha  división  sea  0.  Finalmente, 
el número deseado es el recorrido en orden inverso de los restos almacenados. 
Ejemplo: 
Binario(​65​)
1000001
 

:  

 
 
 
 
 
Solución: 
def​ b​ inario​(numero):
num=​""
​while​ numero!=​0​:
residuo=numero%​2
numero=numero//​2
num+=str(residuo)
UNIDAD 07
Funciones 

​ eturn​ num[::​-1​]
r
numero=int(input(“Ingrese numero”))
print(binario(numero))
 
Escrito por: Karina Saylema 
 
 

 
   
UNIDAD 07
Funciones 

Ejercicio 10 
 
Se  desea  crear  un  sistema  que  permita  gestionar  las  denuncias  que  realizan  los 
ciudadanos  para  informar  sobre  hechos  de  corrupción  que  suceden  en  diferentes 
instituciones públicas. 
 
En  las  denuncias  que  realizan  los  ciudadanos,  se  deben  especificar  los  siguientes 
campos: 
 
● Nombre y apellido 
● Celular 
● Edad 
● correo electrónico 
● Descripción de la denuncia 
● Institución a la que denuncia 
 
Cuando  una  denuncia  es  realizada, se genera un id único para esa denuncia, el cual está 
compuesto  por  tres  letras  aleatorias  en mayúsculas y cuatro números aleatorios (un 
ejemplo  de  esto  sería  el  id  XAB2120).  Además,  para  cada  denuncia  se  registra  la 
fecha en que fue realizada. 
 
Para la creación del sistema, se solicita realizar lo siguiente:  
 
Parte 1 
 
Crear  la  función  ​validarCampo(contenido,campo),  ​donde  el  parámetro  contenido  es  el 
contenido  ingresado  por  el  usuario  y  el parámetro campo es el campo que se desea 
validar  (  por  ejemplo  al  ejecutar  ​validarCampo(“jorge1986@espol.edu”,”correo”),  ​se 
le  indica  a  la  función  que  debe  hacer  la  validación  de  correo  electrónico  con  el 
contenido  ​jorge1986@espol.edu.  ​Para  realizar  esta  función,  se  debe  considerar  las 
siguientes restricciones: 
 
● Si  se  valida  el  campo  ​nombre  y  apellido​,  el  contenido  debe  contener  solamente 
caracteres alfabéticos. 
● Si  se  valida  el  campo  ​celular,  se  debe  verificar  que  el  contenido  solo  contenga 
dígitos y que posea exactamente 10 dígitos. 
● Si  se  valida  el  campo  ​edad,  se  debe  verificar  que  el  contenido  solo  contenga 
dígitos  y  que  la  edad  ingresada  sea  mayor  o  igual  a  18 años y menor o igual a 75 
años. 
● Si  se  valida  el  campo  ​correo.  ​se  debe  verificar  que  el  contenido  tenga  un  arroba 
(@)  y  que  delante  del  arroba,  se  tenga  al  menos  una  palabra  o  nombre  de 
dominio. 
● Si  se  valida  el  campo  ​institución,  ​se  debe  verificar  que  el  contenido  solo  tenga 
caracteres alfanuméricos. 
 
UNIDAD 07
Funciones 

La  función  debe  retornar  un  valor  booleano  de  verdadero  cuando  el  contenido  cumpla 
las  restricciones  del  campo  solicitado,  caso  contrario  retornará  un  valor  booleano  de 
falso. 
 
Parte 2 
 
Para  registrar  los  datos  de  la  denuncia  ingresada,  se  debe  crear  la  función 
registrarDenuncia(listaDenuncias,listaContenido),  ​donde  el  parámetro 
listaDenuncias  es  la  lista  que  contiene  las  denuncias  que  han  sido  ingresadas  al 
sistema,  y  el  parámetro  listaContenido  es  una  lista  con  el  contenido  de cada campo 
solicitado  en  la  denuncia.  Esta  función  debe  registrar  la  denuncia  ingresada  por  el 
usuario en el siguiente formato: 
 
“id|nombres y apellidos|celular|edad|correo|descripcion|institución|fecha” 
 
Donde: 
 
● Id  Es  el  identificador  único  para  la  denuncia.  Este  id  debe  ser  creado  con  la 
función  ​generarID(listaDenuncias),  ​la  cual  recibe  como  parámetro  la  lista  de 
denuncias  del  sistema.  Esta  función  genera  el  id  en  el  formato  especificado  y 
además  verifica  que  el  id  generado  no  se  encuentre  en  la lista de  denuncias. En 
caso  de  que  no  se  encuentre  en  la  lista  de  denuncias,  la  función  retornará  el  id, 
caso  contrario  vuelve  a  generar  un  nuevo  id  aleatorio  y  vuelve  a  comprobar  si 
está o no en la lista. 
 
● fecha  es  la  fecha  actual  ​(día-mes-año)  en  la  que  fue  registrada  la  denuncia.  Para 
poder  obtener  la  fecha  actual,  se  puede  utilizar  la  función  ​datetime.now()  ​de  la 
librería  ​datetime  (  from  datetime  import  datetime).  Esta  función  tiene  algunas 
propiedades  como  year,  day  ,month,etc.,  que  le  permitirán  obtener  datos  de  la 
fecha actual. 
 
Finalmente,  la  función  ​registrarDenuncia  ​deberá  almacenar  la  denuncia  en  el  formato 
solicitado a la lista de denuncias del sistema. 
 
Parte 3 
Para  consultar  información  sobre  las  denuncias  que  se  han  realizado  en  el  sistema,  se 
debe  implementar  la  función  ​consultarDenuncia(listaDenuncias,id),  ​la  cual  recibe 
como  parámetros  la  lista  de  Denuncias  del  sistema  y  un  id  especificado  por  el 
usuario.  la  función  debe  buscar  la  denuncia  con  el  id  solicitado  en  la  lista  de 
Denuncias.  En  caso de encontrar la denuncia, la función debe imprimir la información 
de  la  denuncia  en  un  formato  legible  para  el  usuario,  caso  contrario,  la  función 
imprimirá un mensaje diciendo al usuario que no se ha encontrado la denuncia. 
 
Parte 4 
Finalmente,  utilizando  las  funciones  especificadas  anteriormente,  se  deberá 
implementar el sistema con un menú en el siguiente formato: 
UNIDAD 07
Funciones 

 
1. Ingresar Denuncia 
2. Consultar Denuncia 
3. Salir 
 
Solución 
 
from​ datetime ​import​ datetime
import​ random

def​ v ​ alidarCampo​(contenido, campo):


​if​ campo == ​"nombre"​:
​if​ contenido.replace(​" "​,​""​).isalpha():
​return​ ​True
​elif​ campo == ​"celular"​:
​if​ contenido.isdigit() ​and​ len(contenido) == 1 ​ 0​:
​return​ ​True
​elif​ campo == ​"edad"​:
​if​ contenido.isdigit() ​and​ int(contenido) >= 1 ​ 8​ ​and​ int(contenido) <= ​75​:
​return​ ​True
​elif​ campo == ​"correo"​:
indice = contenido.find(​"@"​)
postContenido = contenido[indice + ​1​:]
​if​ indice != ​-1​ ​and​ len(postContenido) > ​0​:
​return​ ​True
​elif​ campo == ​"institucion"​:
​if​ contenido.replace(​" "​,​""​).isalnum():
​return​ ​True
​return​ ​False

def​ ​generarID​(listaDenuncias):
repetida = ​True
id=​""
​while​ repetida == ​True​:
repetida = ​False
id = ​""
​for​ i ​in​ range(​3​):
letra = random.choice(​'abcdefghijklmnopqrstuvwxyz'​)
id += letra
​for​ i ​in​ range(​4​):
numero = random.randint(​0​, ​9​)
id += str(numero)
id = id.upper()
​for​ registro ​in​ listaDenuncias:
splitRegistro = registro.split(​"|"​)
​if​ splitRegistro[​0​] == id:
repetida = ​True
UNIDAD 07
Funciones 

​return​ id

def​ ​registrarDenuncia​(listaDenuncias, listaContenido):


id = generarID(listaDenuncias)
fecha = str(datetime.now().day) + ​"-"​ + str(datetime.now().month) + ​"-"​ +
str(datetime.now().year)
datos = ​"|"​.join(listaContenido)
datosDenuncia = id + ​"|"​ + datos + ​"|"​ + fecha
listaDenuncias.append(datosDenuncia)

def​ ​consultarDenuncia​(listaDenuncias, id):


encontrada = ​False
​for​ registro ​in​ listaDenuncias:
splitRegistro = registro.split(​"|"​)
​if​ id == splitRegistro[​0​]:
print(​"----INFORMACION DE LA DENUNCIA
{}-----"​.format(splitRegistro[​0​]))
print(​"Nombre y apellidos: "​, splitRegistro[​1​])
print(​"Celular: "​, splitRegistro[​2​])
print(​"Edad: "​, splitRegistro[​3​])
print(​"Correo: "​, splitRegistro[​4​])
print(​"Descripcion: "​, splitRegistro[​5​])
print(​"Institución denunciada: "​, splitRegistro[​6​])
​ )
print(​"Fecha de registro de denuncia: "​, splitRegistro[​7]
encontrada = ​True
​if​ encontrada != ​True​:
print(​"No se encontró la denuncia con el id solicitado"​)

listaDenuncias=[]
op = ​""
while​ op != ​"3"​:
print(​"SISTEMA DE GESTION DE DENUNCIAS"​)
print(​"1.Ingresar denuncia"​)
print(​"2.Consultar denuncia"​)
print(​"3.Salir"​)
op=input(​"Ingrese una opción: "​)

​if​ op==​"1"​:
print(​"!!INGRESO DE DENUNCIAS AL SISTEMA!!"​)
nombre=​""
​while​ validarCampo(nombre,​"nombre"​)==​False​:
nombre=input(​"Ingrese sus nombres y apellidos: "​)
celular=​""
​while​ validarCampo(celular,​"celular"​)==​False​:
celular=input(​"Ingrese su numero de celular: "​)
UNIDAD 07
Funciones 

edad=​""
​while​ validarCampo(edad,​"edad"​)==​False​:
edad=input(​"Ingrese su edad: "​)
correo=​""
​while​ validarCampo(correo,​"correo"​)==​False​:
correo=input(​"Ingrese su correo electronico: "​)
descripcion=input(​"Ingrese la descripcion de la denuncia: "​)
institucion=​""
​while​ validarCampo(institucion,​"institucion"​)==​False​:
institucion=input(​"Ingrese el nombre de la institucion a la que
denuncia: "​)
listaContenido=[nombre,celular,edad,correo,descripcion,institucion]
registrarDenuncia(listaDenuncias,listaContenido)
print(​"DENUNCIA REGISTRADA CON EXITO!!"​)
print(listaDenuncias)

​elif​ op==​"2"​:
id=input(​"Ingrese el id de la denuncia a consultar: "​)
consultarDenuncia(listaDenuncias,id)

​elif​ op==​"3"​:
print(​"SALIENDO DEL SISTEMA!!!!!"​)

​else​:
print(​"Ingrese una opcion correcta!"​)

 
Salida 
 
SISTEMA DE GESTION DE DENUNCIAS
1.​Ingresar denuncia
2.​Consultar denuncia
3.​Salir
Ingrese una opción: ​1
!!INGRESO DE DENUNCIAS AL SISTEMA!!
Ingrese sus nombres y apellidos: Juan Carlos Pereda
Ingrese su numero de celular: ​125215012051205012
Ingrese su numero de celular: ​098148888​a
Ingrese su numero de celular: ​0981488883
Ingrese su edad: ​125
Ingrese su edad: ​21
Ingrese su correo electronico: jjcrow
Ingrese su correo electronico: jjcrow@
Ingrese su correo electronico: jjcrow@espol
Ingrese la descripcion de la denuncia: Delito de Peculado
Ingrese el nombre de la institucion a la que denuncia: Ministerio de Inclusion
Soci@l
Ingrese el nombre de la institucion a la que denuncia: Ministerio de Inclusion
Social
DENUNCIA REGISTRADA CON EXITO!!
UNIDAD 07
Funciones 

[​'AEV7671|Juan Carlos Pereda|0981488883|21|jjcrow@espol|Delito de


Peculado|Ministerio de Inclusion Social|30-12-2017'​]
SISTEMA DE GESTION DE DENUNCIAS
1.​Ingresar denuncia
2.​Consultar denuncia
3.​Salir
Ingrese una opción: ​2
Ingrese el id de la denuncia a consultar: AEV7671
----INFORMACION DE LA DENUNCIA AEV7671-----
Nombre y apellidos: Juan Carlos Pereda
Celular: ​0981488883
Edad: ​21
Correo: jjcrow@espol
Descripcion: Delito de Peculado
Institución denunciada: Ministerio de Inclusion Social
Fecha de registro de denuncia: ​30-12-2017
SISTEMA DE GESTION DE DENUNCIAS
1.​Ingresar denuncia
2.​Consultar denuncia
3.​Salir
Ingrese una opción: ​2
Ingrese el id de la denuncia a consultar: AXB2302
No se encontró la denuncia con el id solicitado
SISTEMA DE GESTION DE DENUNCIAS
1.​Ingresar denuncia
2.​Consultar denuncia
3.​Salir
Ingrese una opción: ​3
SALIENDO DEL SISTEMA!!!!! 
 
Escrito por: Juan Crow Washbrum 

 
 
 
 
 
 
   
UNIDAD 07
Funciones 

Ejercicio 11 
 
Usted  pertenece  al  grupo  de  programadores  de  la  empresa  “Riot  Games”,  le  piden  que 
realice  el  “inicio  de  sesión”  y  “Registro  de  usuario”  para  el  videojuego  “League  of 
legends”. 
​Iniciar Sesión Registro 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
a) Crear  la  función  ​cargar_archivo(nombreArchivo) ​donde la empresa “Riot Games” 
le  facilita  una  base  de  datos  llamada  ​DB_Accounts.txt  donde el contenido 

se separa por “|” la estructura es la siguiente: 


CORREO|USUARIO|CONTRASEÑA|FECHA DE NACIMIENTO|REGION 
esta función abre el archivo y retorna una lista con el siguiente formato:  
 
[​'kaconcha@espol.edu.ec|Axell|AyudantiasApSeguro|27/02/1997|LAN'​,
'lvillamar@espol.edu.ec|luisvills|EllaNoTeConviene|16/08/1997|LAN'​] 

 
 
b) El  programa  presentará el siguiente menu 
de  opciones, donde al usuario se le pedirá 
que  ingrese  una  opcion para lo cual usted 
debe  validar  si  dicha  opción  está  dentro 
del  menú.  Realice  la  función 
UNIDAD 07
Funciones 
validar_opcion(opcion)  que  recibe  como parametro el ​numero (tipo str) ingresado por el 
usuario  y  retorna  una  variable  booleana  ​valop  donde  si  es  True  quiere  decir  que  el 
numero  ingresado  por  el  usuario  es correcto, si es False se debera presentar por pantalla 
"*Error*, ingrese nuevamente"
 
 
c) Si  el  usuario  ingresa  opcion  1  el  programa  deberá  pedirle  ingrese  Usuario  y 
contraseña  para  lo  cual  usted  debe  realizar  la  respectiva  validación  si  el  usuario 
se  encuentra  en  la  base  de  datos  “DB_Accounts.txt”.  Realice  este  paso creando 
una  funcion  con  el  nombre  de:  ​validar_inicio(listaCuenta,user,password)  que 
recibe  como  parámetro  la  lista  del  literal  a),  el  usuario  y  la  contraseña  ingresada 
por  el  usuario.  Retorna  una  variable  booleana ​valini ​si es igual a True entonces el 
usuario  y  contraseña  coinciden,  sino  entonces  se  deberá  presentar  por  pantalla 
"El usuario o la contraseña no coinciden"

d) Si  el  usuario  ingresa  opcion  2  el  programa  deberá  pedirle:  correo,  usuario, 
contraseña,  volver  a  ingresar  contraseña,  fecha  de  nacimiento y region.  Deberá 
crear  la  siguiente  funcion 
validar_registro(listaCuenta,correo,RUser,RPassword,confirmar,date,region) 
donde  recibe  como  parámetro  la  listaCuenta  del  literal  a),  usuario, 
contraseña,confirmar  (la  contraseña  ingresada  por  segunda  vez),  date(  fecha  de 
nacimiento)  y  región.  Retorna  un  ​msjtotal  (variable  que  contiene  todos  los 
mensajes  de  error  al  momento  de  validar  cada  ingreso  por  el usuario) y ​valbool 
(variable booleana si es igual a True el ingreso de cada campo es correcto). 
Validaciones: 
-Correo: el correo ingresado por el usuario no debe de existir en la base de datos. 
mensaje  de  error:  ​"El correo YA HA SIDO UTILIZADO. ​\n​" ​.El  correo
debera  terminar  en  “@espol.edu.ec”.  mensaje  de  error:  ​"El correo no
termina en @espol.edu.ec.​\n​" 
-RUser:  ​el  usuario  ingresado  no  debe  de  existir  en  la  base  de  datos.  mensaje  de 
error:  ​"El nombre de usuario YA EXISTE.​\n​" ​.El  usuario  debe  de  tener 
menos  de  16  caracteres.  mensaje  de  error:  ​"El nombre de usuario
contiene mas de 16 caracteres.​\n​"
-RPassword  y  confirmar:  ​los  dos  ingresos  deben  de  ser  lo  mismo.  mensaje  de 
error: ​"Las contraseñas deben coincidir.​\n​"
-​date:  ​El  formato  de  ingreso  debe  ser  “01/01/2017”  (dia/mes/año).  mensaje  de 
error: ​"Ingreso incorrecto de Fecha de nacimiento.​\n​"
.Si  el  año  ingresado  es  mayor  a  1999  presentar  por  pantalla:  ​"Usted es menor
de edad, NO PUEDE JUGAR. ​\n​"
-region:  ​En  este  juego  solo  existen  estas  regiones: 
lregion=[​"BR"​,​"EUNE"​,​"EUW"​,​"JP"​,​"LAN"​,​"LAS"​,​"NA"​,​"OCE"​,​"RU"​,​"T
R"​] deberá evaluar que la region ingresada por el usuario se
encuentre en la lista lregion. mensaje de error:​"Ingreso
incorrecto de Región.​\n​"
 
e) Crear  la  funcion 
UNIDAD 07
Funciones 

cargardatos(nombreArchivo,correo,RUser,RPassword,date,region) ​recibe como 
parámetro  el  nombre  de  la  base  de  datos,  correo,  usuario,  contraseña,  fecha  de 
nacimiento y region del literal D. esta función guarda los campos ingresados en el 
literal  D  en  el  archivo  ​“DB_Accounts.txt”.  ​ejemplo  del  string  a  guardar: 
usuario@espol.edu.ec|usuario|contraseña|16/08/1997|LAN  
Solución: 
#LITERAL A
def​ ​cargar_archivo​(nombreArchivo):
openArchivo=open(nombreArchivo,​"r"​)
listaCuenta=[]
​for​ linea ​in​ openArchivo:
listaCuenta.append(linea.strip())
​return​ listaCuenta
#LITERAL B
def​ ​validar_opcion​(opcion):
valop=​False
​if​ opcion==​"1"​ ​or​ opcion==​"2"​ ​or​ opcion==​"3"​:
valop=​True
​else​:
print(​"*Error*, ingrese nuevamente"​)
​return​ valop
#LITERAL C
def​ ​validar_inicio​(listaCuenta,user,password):
valini=​False
​for​ w ​in​ listaCuenta:
nombre=w.split(​"|"​)[​1​]

​if​ user==nombre:
indice=listaCuenta.index(w)

dbpass=listaCuenta[indice].split(​"|"​)[​2​]

​if​ dbpass==password:
valini=​True
​return​ valini

#LITERAL D
def​ ​validar_registro​(listaCuenta,correo,RUser,RPassword,confirmar,date,region):
lregion=[​"BR"​,​"EUNE"​,​"EUW"​,​"JP"​,​"LAN"​,​"LAS"​,​"NA"​,​"OCE"​,​"RU"​,​"TR"​]
msj1=msj1_1=msj2=msj2_1=msj3=msj4=msj5=msj6=​""
​if​ ​not​ correo.endswith(​"@espol.edu.ec"​):
msj1_1=​"El correo no termina en @espol.edu.ec.\n"
​#comprobar si el correo ya existe:
​for​ j ​in​ listaCuenta:
DBcorreo=j.split(​"|"​)[​0​]
​if​(correo==DBcorreo):
msj1=​"El correo YA HA SIDO UTILIZADO. \n"
​#comprobar si el usuario ya existe:
​for​ i ​in​ listaCuenta:
nombre=i.split(​"|"​)[​1​]
​if​(RUser==nombre):
UNIDAD 07
Funciones 

msj2=​"El nombre de usuario YA EXISTE.\n"


​if​ len(RUser)>​16​:
msj2_1=​"El nombre de usuario contiene mas de 16 caracteres.\n"
​if​ ​not​ RPassword == confirmar:
msj3=​"Las contraseñas deben coincidir.\n"
valdate=​"/"​ ​in​ date
​if​ valdate: ​#validar si se ingreso en el formato correcto
date=date.split(​"/"​)
​if​ len(date)==​3​: ​#validar si se ingreso 3 campos dia, mes, año
dia=date[​0​]
mes=date[​1​]
anio=date[​2​]
​if​(len(dia)==​2​ ​and​ len(mes)==​2​ ​and​ len(anio)==​4
​and​ dia.isalnum() ​and​ mes.isalnum() ​and​ anio.isalnum()): ​#validar si son
numeros y cantidad de numeros ingresados
valdia= int(dia)>=​1​ ​and​ int(dia)<=​31
valmes= int(mes)>=​1​ ​and​ int(mes)<=​12
valanio= int(anio)<=​1999
​if​ ​not​(valanio):
msj4= ​"Usted es menor de edad, NO PUEDE JUGAR. \n"
​elif​ ​not​(valdia ​and​ valmes ​and​ valanio):
msj5=​"Ingreso incorrecto de Fecha de nacimiento1.\n"
​else​:
msj5 = ​"Ingreso incorrecto de Fecha de nacimiento2.\n"
​else​:
msj5 = ​"Ingreso incorrecto de Fecha de nacimiento3.\n"
​else​:
msj5 = ​"Ingreso incorrecto de Fecha de nacimiento4.\n"
​if​ ​not​(region.upper() ​in​ lregion):
msj6=​"Ingreso incorrecto de Región.\n"
msjtotal=msj1+msj1_1+msj2+msj2_1+msj3+msj4+msj5+msj6

​if​(len(msjtotal)==​0​):
valbool=​True
​else​:
valbool=​False
​return​ msjtotal, valbool
#LITERAL E
def​ ​cargardatos​(nombreArchivo,correo,RUser,RPassword,date,region):
WrArchivo = open(nombreArchivo, ​"a"​)
ingresar=​"\n"​+correo+​"|"​+RUser+​"|"​+RPassword+​"|"​+date+​"|"​+region.upper()
WrArchivo.write(ingresar)
WrArchivo.close()
​return​ ​"*"​*​10​+​"REGISTRO EXITOSO!"​+​"*"​*​10

#PROGRAMA PRINCIPAL
nombreArchivo=​"DB_Accounts.txt"
listaCuenta=cargar_archivo(nombreArchivo)
#Generar el menu
print(listaCuenta)
fciclo=​0
while​ fciclo==​0​:
UNIDAD 07
Funciones 

​#Menu
print(​"Bienvenidos a League of Legends"​)
print(​"1. Iniciar Sesión"​)
print(​"2. Regístrate"​)
print(​"3. Salir"​)
valop=​False
​while​ valop==​False​:
opcion = input(​"Ingrese la opcion que desea utilizar: "​)
valop=validar_opcion(opcion)

​if​ opcion==​"1"​:
valSesion=​0
​while​ valSesion==​0​:
print(​"INICIAR SESIÓN"​)
user=input(​"Nombre de usuario: "​)
password=input(​"Contraseña: "​)
valini=validar_inicio(listaCuenta,user,password)
​if​(valini):
print(​"*"​ * ​10​ + ​"Bienvenido "​+user+ ​"*"​ * ​10​)

valSesion=​1
​else​:
print(​"El usuario o la contraseña no coinciden"​)

​elif​ opcion==​"2"​:
print(​"REGÍSTRATE"​)
valRegistro=​0
​while​ valRegistro==​0​:
correo=input(​"Dirección de correo electrónico: "​)
RUser=input(​"Nombre de usuario: "​)
RPassword= input(​"Contraseña: "​)
confirmar= input(​"Confirma tu contraseña: "​)
date=input(​"Fecha de nacimiento: "​)
region=input(​"Región: "​)

mensaje,valbool=validar_registro(listaCuenta,correo,RUser,RPassword,confirmar,date,regio
n)
​if​(valbool==​True​):
print(cargardatos(nombreArchivo,correo,RUser,RPassword,date,region))
valRegistro=​1
​else​:
print(​"*"​*​10​+​"ERROR"​+​"*"​*​10​)
print(mensaje)
​elif​ opcion==​"3"​:
fciclo=​1​ ​#FIN DEL CICLO MENU

Escrito por: Axell Concha Regatto 


 
UNIDAD 07
Funciones 

Ejercicio 12 
1. Usted  ha  sido  contratado  para descifrar los mensajes que usa una compañía rival 
con la técnica del cifrado César.  
El  cifrado  César  ​es  un  tipo  de  cifrado  por  sustitución  en  el  que  una  letra  en  el 
texto  original  es  reemplazada  por  otra  letra  que  se  encuentra  un  número  fijo  de 
posiciones  más  adelante  en  el  alfabeto.  Por  ejemplo,  con  un  desplazamiento  de 
3,  la  A  sería  sustituida  por  la  D  (situada  3  lugares  a  la  derecha  de  la  A),  la  B  sería 
reemplazada por la E, etc. 
 
Usted  deberá  crear  la  función  descifrarCesar(frase,  numEspacios,  alfabeto), 
donde  frase  será  la  oración  que  usted  quiera  descifrar,  numEspacios  será  el 
número  de  espacios  que  tiene  el  cifrado  que  interceptó  y  alfabeto  será  una  lista 
con las letras del abecedario. 
Al ejecutar la función se debe mostrar algo parecido: 
 
Texto a descifrar: CÑPÑVKJÑG, QG KSIÑIQUVKJÑG QÑHXK
Número de espacios: 6

**********************************************************
Texto codificado: CÑPÑVKJÑG, QG KSIÑIQUVKJÑG QÑHXK
Número de espacios: 6
Texto original: WIKIPEDIA, LA ENCICLOPEDIA LIBRE
 
Nota:  el  programa  debe  funcionar  con  mayúsculas  y  minúsculas  y  no  debe  tomar  en 
cuenta signos de puntuación como la coma(,) o el punto(.). 
 
Solución 
 
def​ ​descifrarCesar​( frase , numEspacios , alfabeto):
frase.lower()
m=​""
​for​ i ​in​ range(len(frase)):
flag1=​0
s=​0
​for​ n ​in​ alfabeto:
s=s+​1
​if​ n == frase[i]:
​if​ s+numveces<=​26​:
m=m+alfabeto[alfabeto.index(n)+numveces]
​else​:
c=s+numveces​-27
m=m+alfabeto[c]
flag1 = ​1
​if​ flag1==​0​:
UNIDAD 07
Funciones 

m=m+frase[i]
print(m)

alfabeto=[​"a"​,​"b"​,​"c"​," ​ d"​,"​ e"​,"​ f"​,"​ g"​,​"h"​,​"i"​,​"j"​,​"k"​,​"l"​,​"m"​,​"n"​,​"o"​,​"p"​,​"q"​,​"r


"​,​"s"​,​"t"​,​"u"​,​"v"​,​"w"​,"​ x"​,"​ y"​,"​ z"​]
frasen=input(​"Ingrese una frase: "​)
numvecesn=int(input(​"Ingrese el número de espacios: "​))
cifrarCesar(frasen,numvecesn,alfabeto)

 
Elaborado por Oscar Andres Avila Alvarez 
 
 
   
UNIDAD 07
Funciones 

Ejercicio 13 
 
La  comparación  por  pares  de  secuencias  de  ADN  es  una  técnica  popular  utilizada  en 
Bioinformática.  Por  lo  general,  implica  algún  esquema  de  puntuación  para  expresar  el 
grado  de  similitud.  Escriba  una  función  que  compare  dos  secuencias  de  ADN  basadas 
en  el  siguiente  esquema  de  puntuación:  +1  para  una  coincidencia,  +3  para  cada 
coincidencia consecutiva y -1 para cada no coincidencia 
def ​Comparacion(seqA, seqB):
cadena=​""
cont=​0
points=​0
for​ i ​in​ range(len(seqA)):
if​ seqA[i]==seqB[i]:
if​ cont==​0​:
cadena=cadena+​"|"
cont=​1
points=points+​1
else​:
cadena=cadena+​"|"
points=points+​3
else​:
cadena=cadena+​" "
cont=​0
points=points​-1
return​ (​"%s\n%s\n%s\nScore: %d"​ % (seqA,cadena,seqB,points)) 
 
Output: 
>>> ​print(​Comparacion(​"ATTCGT"​, ​"ATCTAT"​)​)
ATTCGT
|| |
ATCTAT
Score: ​2
>>> ​print(​Comparacion(​"GATAAATCTGGTCT"​, ​"CATTCATCATGCAA"​)​)
GATAAATCTGGTCT
|| ||| |
CATTCATCATGCAA
Score: ​4 
 
Realizado por Patricio González 
 

 
   
UNIDAD 07
Funciones 

Ejercicio 14 
Sistema de pago para Parqueo: 
 
"vehiculosdentro.txt"
AFC​-0123​|​1488651001.718754
AGC​-0231​|​1489090021.876564
ABC​-0234​|​1490890838.984839 
 
Crear un programa para el parqueo exlcusivos de autos personales. 
1 PARTE  
  El  programa debe validar que las placas de los autos sean de caracter personal es decir 
que  la  segunda  letra  de  la  placa  no  sea  A,U,Z,E,X,M  y  que  la  primera  letra  sea  de  una 
provincia  del  ecuador  si  no  cumple  con esto la placa no es valida y no puede ingresar al 
parqueo. 
import​ time
def​ ​ValidarMatricula​(matricula):
no_particular=[​"A"​,​"U"​,​"Z"​,​"E"​,​"X"​,​"M"​]
provincias=[​"A"​,​"B"​,​"C"​,​"U"​,​"X"​,​"H"​,​"O"​,​"E"​,​"W"​,​"G"​,​"I"​,​"L"​,​"R"​,​"M"​,​"V"​,
"N"​,​"S"​,​"P"​,​"Q"​,​"K"​,​"T"​,​"Z"​,​"Y"​,​"J"​]
if​ ​"-"​ ​in​ matricula:
letras,numeros=matricula.split(​"-"​)
if letras[​0​] ​in provincias ​and letras[​1​] ​not ​in no_particular ​and
numeros.isnumeric() :
return​ ​True
return​ ​False 
 
2 PARTE 
Una  vez  validada  la  placa,  se  debe  definir  una  funcion  para  ingresar  el  auto,  se  debe 
grabar  en  un  archivo  llamado  vehiculosdentro.txt  los  codigos  de  la  placa y el tiempo en 
el que este llego al parqueo. 
def​ ​EntradaVehiculo​(matricula,hora,vehiculosdentro):
file=open(vehiculosdentro,​"a"​)
file.write(str(matricula)+​"|"​+str(hora)+​"\n"​)
file.close()
return​ ​"se ha ingresado exitosamente la placa." 
 
3 PARTE 
Una  vez  que  el  vehiculo  desee  salir  del  parqueo,  defina  una  funcion  que  calcule  el 
monto  a  pagar por usar el parqueo, ademas defina una funcion que permita remover del 
archivo vehiculosdentro.txt el codigo de la placa del auto que esta saliendo del parqueo. 
def​ ​Costo​(tiempo): ​#horas
if​ tiempo/​3600​<=​1​/​4​:
return​ ​0
UNIDAD 07
Funciones 

​ dividir para 3600


else​: #
monto=((tiempo//​3600​)+​1​)*​1.50
return​ monto

def​ ​SalidaVehiculo​(matricula,hora,vehiculosdentro):
newfile=open(vehiculosdentro,​"r"​)
Dic_Placas={}
for​ elem ​in​ newfile:
placa,tiempo=elem.split(​"|"​)
Dic_Placas[placa]=tiempo
newfile.close()
while​ matricula ​not​ ​in​ list(Dic_Placas.keys()):
matricula=input(​"la matricula digitada no registra en la
base de datos, ingrese una nueva: "​)
calculo_tiempo=float(hora)-float(Dic_Placas[matricula])
monto_pagar=Costo(calculo_tiempo)
newfile2=open(vehiculosdentro,​"r"​)
listaVehiculos=newfile2.readlines()
newfile2.close()
placa_buscar=matricula+​"|"​+Dic_Placas[matricula]
listaVehiculos.remove(placa_buscar).
newfile3=open(vehiculosdentro,​"w"​)
​for​ elem ​in​ listaVehiculos:
newfile3.write(elem+​"\n"​)
newfile3.close()
return​ monto_pagar
 

 
4 PARTE 
Generar  un  menu  principal  para  el Sistema de Parqueo de 3 opciones, ingresar vehiculo, 
salida de vehiculo y salir del sistema 
#programa principal
print(​"Bienvenido al servicio de Parqueo"​)
print(​"-------------------------\n"​*​3​)
opc =​"4"
while​ opc !=​"3"​:
print(​"1) Entrada Vehiculo"​)
print(​"2) Salida Vehiculo"​)
print(​"3) Salir"​)
opc=input(​"digite su opción: "​)
if​ opc==​"1"​:
placa=input(​"digite placa: "​)
hora=time.time()
UNIDAD 07
Funciones 

while​ ValidarMatricula(placa)==​False​:
placa=input(​"digite placa valida: "​)
EntradaVehiculo(placa,hora,​"vehiculosdentro.txt"​)
elif​ opc==​"2"​:
placa=input(​"digite placa: "​)
hora=time.time()
while​ ValidarMatricula(placa)==​False​:
placa=input(​"ingrese placa valida: "​)
monto=SalidaVehiculo(placa,hora,​"vehiculosdentro.txt"​)
print(​"El valor a pagar es de: %.2f"​%monto)
elif​ opc==​"3"​:
print(​"gracias por usar este servicio"​)
 

 
Realizado por Byron Manzo. 
 

 
   
UNIDAD 07
Funciones 

Ejercicio 15 
 
Procesamiento  de  telegramas:  Un  cartero  desea  optimizar  su  trabajo  haciendo  que  las 
palabras  de  longitud mayor a un número dado sean recortadas de manera que su nueva 
longitud  sea  del  número  ya  mencionado.  Para  esto,  las  palabras  que  cumplan  esta 
condición  llevarán  un  arroba  “@”  indicando  que han sido recortadas. Además, los puntos 
aparte  encontrados  serán reemplazados por la palabra “STOP” y en caso de haber punto 
final,  se  reemplazará  el  mismo  con  la  cadena  “STOPSTOP”.  Las  palabras  cortas  (de 
menor  o  igual  longitud  a  la  deseada  por  el  usuario)  tendrán  un  costo  y  las  palabras 
largas (de mayor longitud) tendrán otro. 
Escriba  una  función  que  reciba  el  telegrama  a  procesar,  la  longitud  máxima  de  cada 
palabra  y  los  valores  de  las  palabras  largas  y  cortas  y  que  imprima  la  cadena  con  las 
palabras recortadas y el costo total de la misma.  
NOTA:  Asuma  que  el  usuario  ingresa  la  cadena  separando  las  palabras  sólo  con  un 
espacio. 
def​ ​processTelegrama​(tlg,long,vpc,vpl):
pcortas=​0
plargas=​0
res=​""
puntoFinal=​False
cadena=cad.split(​" "​)
​if​ ​"."​ ​in​ cadena[​-1​]:
puntoFinal=​True
pal=cadena[​-1​][:​-1​]
​del​ cadena[​-1​]
cadena.append(pal)
​for​ i ​in​ cadena:
​if​ len(i)<=long:
res=res+i+​" "
pcortas+=​1
​else​:
nuevo=i[:long​-1​]+​"@"
res=res+nuevo+​" "
plargas+=​1
​if​ i[​-1​]==​"."​:
res=res+​"STOP "
​if​ puntoFinal:
res+=​"STOPSTOP"
print(​"Telegrama procesado: "​+res+​"\n\tCosto total:
$"​+str((pcortas*vpc)+(plargas*vpl))) 
 
Realizado por Andrea Naranjo Lima. 
 
 
   
UNIDAD 07
Funciones 

Ejercicio 16 
 
La  empresa  “Z8games”  lo  contrata  como  desarrollador  del  juego  CROSSFIRE,  y  le 
solicita  a  su  vez  que realice cuatro funciones, la primera función que reciba una lista con 
nombres  de  usuarios  y  está  verifique  que  dichos  usuarios  sean  válidos,  siendo  la  única 
condición  que  el  nombre  de  usuario  debe  tener  entre  0  y  9  caracteres;  la  segunda  que 
presente  el  jugador  y  su  rango  dada  la  cantidad  de  experiencia  total  que  ha  hecho  el 
jugador,  sabiendo  que  un  jugador  es  soldado  si  tiene  entre  0  y  13224  puntos,  suboficial 
entre  13225  y  279300,  oficial  de  compañía  entre  279301  y  1920900,  oficial  de  campo 
entre  1920901  y  7578036,  y  general  entre  7578037  y  26564451;  la  tercera  función  que 
evalúe  la  puntería  del  jugador  teniendo  como  parámetro  el  “KD”  siendo  este  la  división 
de  las  “Kills”  entre  las  “Deaths”  si  esta  división  es  mayor  a  2  el  jugador  tiene  excelente 
puntería,  si  es  menor  a  2  y  mayor  a  1.5  tiene  buena  puntería,  si  esta  entre  1  y  1.5  tiene 
puntería  regular,  y  si  es  menor  a  1  tiene  mala  puntería.  Por  último  se  tiene  una  lista 
donde  cada  ítem  de  esta  es  otra  lista  que  posee  dos  elementos  el  primero  el  nombre 
del  jugador  y  el  segundo  la  cantidad  de  armas  que  posee,  y  se  desea  saber  qué 
jugadores  son  coleccionistas  de  armas,  siendo  considerado  como  coleccionista  a  cada 
jugador que tenga 15 o más armas. 
#Primera Función
def​ ​VerificarNick​(Lista):
​for​ i ​in​ range(len(Lista)):
​if​ len(Lista[i]) >= ​0​ ​and​ (Lista[i]) <=​9​:
UsuariosValidos=[]
UsuariosValidos.append(Lista[i])
​else​:
UsuariosNoValidos=[]
UsuariosNoValidos.append(Lista[i])
​return​ UsuariosValidos,UsuariosNoValidos

#Segunda Función
def​ ​PresentarJugador​(nickname,experiencia):
Rango = ​""
​if​ experiencia >= ​0​ ​and​ experiencia <= ​13224​:
Rango = ​"SOLDADO"
​elif​ experiencia >=​13224​ ​and​ experiencia <= ​279300​:
Rango = ​"SUBOFICIAL"
​elif​ experiencia >= ​279300​ a ​ nd​ experiencia <= ​1920900​:
Rango = ​"OFICIAL DE COMPAÑIA"
​elif​ experiencia >=​1920900​ a ​ nd​ experiencia <= ​7578036​:
Rango = ​"OFICIAL DE CAMPO"
​elif​ experiencia >= ​7578036​ ​and​ experiencia <= ​26564451​:
Rango = ​"GENERAL"
​else​:
print(​"Ingreso inválido"​)
​return​ nickname, Rango

#3ra Función
def​ ​ConsultarPunteria​(Kills,Deaths):
UNIDAD 07
Funciones 

KD= int(Kills)/int(Deaths)
​if​ KD >= ​2​:
print(​"Excelente Puntería"​)
​elif​ KD >= ​1.5​ ​and​ KD <=​2​ :
print(​"Buena Puntería"​)
​elif​ KD >= ​1​ ​and​ KD<= ​1.5​:
print(​"Puntería Regular"​)
​elif​ KD >=​0​ ​and​ KD<= ​1​:
print(​"Mala Puntería"​)
#4ta Función
def​ ​Coleccionista​(ListaDeJugadores):
ListaColeccionistas=[]
​for​ i ​in​ ListaDeJugadores:
​if​ i[​1​]>=​15​:
ListaColeccionistas += i[​0​]
​return​ ListaColeccionistas
Realizado por Steven Santillan Padilla 
   
UNIDAD 07
Funciones 

Ejercicio 17 
 
se  cuenta  con  un  archivo  de  texto  con  informacion  recolectada  de  twitter,  el  archivo 
cuenta con el siguiente formato. 

username|tweet
 
Se le pide que construya las siguientes funciones. 
a)  Cargar_info(nombreArchivo)  que  crea  un  diccionario  donde  la  clave sera el username 
y el valor sera una lista con los tweets que hizo el usaurio. 
 
b)  usuario_mas_activo(tweets)  que  recibe  el  diccionario  creado  en  el  literal  anterior  y 
retorna el username que realizo mas tweets. 
 
c) una funcion que reciba el diccionario creado en el literal a y que retorne el usuario que 
uso  mas  hashtags.(recordar  el  un  hashtag  comienza  con  un  #  y  termina  cuando  se 
encuentra un espacio) 
 
d) una funcion que reciba el diccionario del literal a y retorne el hashtag mas usado. 
 

 
UNIDAD 07
Funciones 

 
 
Escrito por:Karen Monserrat Bermudez Moreira 
 

Вам также может понравиться