Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Funciones
Ejercicios de Funciones en
Python
Elaborado por los Ayudantes de Cátedra
UNIDAD 07
Funciones
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
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
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]
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
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.
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
digitos = ""
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"]
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-
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 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
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: 098148888a
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
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
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
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
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)
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
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