mario
Pequeños Programas En Python
- junio 13, 2023
- , 11:08 pm
Aquí podremos ver distintos programas desarrollados en Python para practicar mis habilidades y demostrar mis conocimientos adquiridos (Estos ejercicios fueron sacado de distintos exámenes de un ramo cursado en la USM de Programación en Python).
Programa N°1:
PyCornerShop es una aplicación que le permite a sus usuarios conseguir productos del supermercado
desde la comodidad del hogar usando sus teléfonos móviles. La información de los repartidores y usuarios
se encuentra almacenada en dos diccionarios llamados repartidores y usuarios respectivamente.
El diccionario repartidores tiene los nombres de los repartidores como llave y como valor una tupla
que contiene la ubicación del repartidor en el plano de la ciudad y su estado de disponibilidad: True
(disponible) o False (no disponible). A continuación, se muestra un ejemplo de este diccionario:
repartidores = {‘rayo macuin’: ((10, 2), True), ‘reparti dhor’: ((9, 3), True), ‘eliseo al-azar’: ((5, 5), False), …}
El diccionario usuarios contiene el código del usuario como llave y como valor la ubicación del mismo
en el plano de la ciudad. A continuación se muestra un ejemplo:
usuarios = {1221: (5, 2), 441: (8, 2), 587: (10, 1), …}
Existe un diccionario llamado visitas donde cada llave es el nombre de un repartidor y como valor tiene
una lista de tuplas. Cada tupla se compone de un código de usuario y de la cantidad de veces que dicho
repartidor (llave del diccionario) visito a dicho usuario. Tenga en consideración que si un usuario nunca ha
solicitado reparto, no aparecerá en el diccionario visitas. A continuación un ejemplo:
visitas = {‘rayo macuin’: [(1221, 5), (441, 8), (587, 2)], ‘reparti dhor’: [(1221, 2), (441, 5), (587, 3)], ‘eliseo al-azar’: [(1221, 8), (441, 2), (587, 1)],…}
Para que la compañía PyCornerShop pueda funcionar de manera eficiente, le solicita a Ud. que implemente
una función llamada: buscar_repartidor(repartidores,usuarios,visitas,codigo) que reciba
como parámetros los diccionarios antes mencionados y un código de usuario (formato int). La función
debe retornar una lista de repartidores disponibles y cercanos, ordenados de manera descendente, según el
numero de visitas que estos hayan realizado al usuario requerido. Un repartidor será considerado cercano
si esta ubicado a menos de 4 km del usuario y para esto considere que las tuplas de ubicación tienen
valores enteros medidos en km. Finalmente, si no hay repartidores cercanos, la función debe retornar una
lista vacía.
Recuerde que los puntos suspensivos en los contenedores indican que existen mas datos. Además considere
los siguientes ejemplos de ejecución para construir su solución:
>>> print buscar_repartidor(repartidores,usuarios,visitas,587)
[‘reparti dhor’, ‘rayo macuin’]
>>> print buscar_repartidor(repartidores,usuarios,visitas,441)
[‘rayo macuin’, ‘reparti dhor’]
>>> print buscar_repartidor(repartidores,usuarios,visitas,1221)
[]
Nota: Para calcular la distancia d entre un usuario ubicado en (x1, y1) y un repartidor ubicado en (x2, y2)
se debe utilizar la ecuación: d =raiz[(x1 – x2)**2 + (y1 – y2)**2]
DESARROLLO:
repartidores = {'rayo macuin': ((10, 2), True), 'reparti dhor': ((9, 3), True), 'eliseo al-azar': ((5, 5), False)}
usuarios = {1221: (5, 2), 441: (8, 2), 587: (10, 1)}
visitas = {'rayo macuin': [(1221, 5), (441, 8), (587, 2)], 'reparti dhor': [(1221, 2), (441, 5), (587, 3)], 'eliseo al-azar': [(1221, 8), (441, 2), (587, 1)]}
def buscar_repartidor(repartidores,usuarios,visitas,codigo):
habilitados = {}
for repartidor, valor in repartidores.items():
ubi, estado = valor
if estado == True:
habilitados[repartidor] = valor
ubi_user = usuarios[codigo]
x1,y1 = ubi_user
disponibles = {}
for repartidor, valor in habilitados.items():
ubi, estado = valor
x2,y2 = ubi
distancia = (((x1-x2)**2)+((y1-y2)**2))*1/2
if distancia < 4:
for rep,tup in visitas.items():
if rep == repartidor:
for i in tup:
cod, cant = i
if cod == codigo:
disponibles[rep] = cant
return sorted(disponibles.keys(), key=lambda r: disponibles[r], reverse=True)
print(buscar_repartidor(repartidores,usuarios,visitas,441))
Programa N°2:
La red social Fookbace almacena la información de sus usuarios en un diccionario.
Las llaves son un código numérico entero asignado a cada usuario, y los valores son tuplas con el nombre, la ciudad y la fecha de nacimiento del usuario. La fecha de nacimiento es una tupla (año, mes, día).
a. Escriba la función misma_ciudad(u1, u2), que indique si los usuarios con códigos u1 y u2 viven en la misma ciudad.
b. Escriba la función diferencia_edad(u1, u2), que retorne la diferencia de edad entre los usuarios cuyos códigos son u1 y u2.(Utilice sólo el año de nacimiento de los usuarios para calcular la diferencia, no el mes ni el día).
c. Para guardar la información sobre cuáles de sus usuarios son amigos entre sí, Fookbace utiliza el conjunto amistades,
que contiene tuplas con los códigos de dos usuarios. Si la tupla (a, b) está dentro del conjunto, significa que los usuarios con códigos a y b son amigos.
amistades = {(198471, 289142), (138555, 429900), (289142, 781118)}
Escriba la función obtener_amigos(u), que retorne el conjunto de los códigos de los amigos de u.
d.Escriba la función recomendar_amigos(u), que retorne el conjunto de los códigos de los usuarios que cumplen todas estas condiciones a la vez:
son amigos de un amigo de u,
no son amigos de u,
viven en la misma ciudad que u, y
tienen menos de diez años de diferencia con u.
En ambas funciones, el parámetro u es el código de un usuario, y el valor de retorno es un conjunto de códigos de usuarios.
Recuerde que c.add(x) agrega el valor x al conjunto c.
usuarios = {
522514: ('Jean Dupont', 'Marseille', (1989, 11, 21)),
587125: ('Perico Los Palotes', 'Valparaiso', (1990, 4, 12)),
189471: ('Jan Kowalski', 'Krakow', (1994, 4, 22)),
914210: ('Antonio Nobel', 'Valparaiso', (1983, 7, 1)),
198471: ('Anto Nob', 'Valparaiso', (1985, 7, 1)),
781118: ('Antoni Nobe', 'Valparaiso', (1983, 7, 1))}
def misma_ciudad(u1, u2):
for user in usuarios:
if user == u1:
nombre1,ciudad1,fecha1 = usuarios[user]
elif user == u2:
nombre2,ciudad2,fecha2 = usuarios[user]
if ciudad1 == ciudad2:
return True
else:
return False
print(misma_ciudad(914210, 587125))
print(misma_ciudad(522514, 189471))
def diferencia_edad(u1, u2):
for user in usuarios:
if user == u1:
nombre1,ciudad1,fecha1 = usuarios[user]
elif user == u2:
nombre2,ciudad2,fecha2 = usuarios[user]
return abs(fecha1[0]-fecha2[0])
print(diferencia_edad(914210, 587125))
def obtener_amigos(u):
conjunto = set()
for tup in amistades:
a,b = tup
if a == u:
conjunto.add(b)
elif b == u:
conjunto.add(a)
return conjunto
print (obtener_amigos(429900))
def obtener_amigos_sinset(u):
for tup in amistades:
a,b = tup
if a == u:
return b
elif b == u:
return a
print (obtener_amigos_sinset(429900))
def recomendar_amigos(u):
con = set()
amigos = obtener_amigos(u)
for amigo in amigos:
amigos_de_amigo = obtener_amigos(amigo)
for amigo_de_amigo in amigos_de_amigo:
if amigo_de_amigo != u and diferencia_edad(u, amigo_de_amigo) < 10 and misma_ciudad(u, amigo_de_amigo):
con.add(amigo_de_amigo)
return con
print (recomendar_amigos(198471))
print('ULTIMA FUNCION')
Programa N°3:
Genere un codigo para cotizar departamentos en un edificio con 25 pisos y 8 deptos por piso (101,102, 201,1001,1008,2501,2508)
Todos los departamentos del primer piso valen 100, y todos los departamentos del ultimo piso valen 400.
Para los pisos intermedios, se ha fijado un precio base de 245; el precio de los departamentos con vista al mar se aumentara en 13 %, y el de los con vista al cerro se rebajar a en 17 %. Los decimales se redondearan hacia abajo.
Departamento 807 es hospedado generalmente por famosos por lo cual se debe fijar su precio en 500.
cliente = (input('Ingrese el departamento que desee cotizar: '))
piso_1 = 100
piso_25 = 400
piso_int = 245
depto_807 = 500
if len(cliente) == 3:
piso = cliente[0]
depto = cliente[1:]
#print(piso,depto)
if piso == '1':
print('El valor del departamento es de $100')
elif cliente == '807':
print('El valor del departamento es de $500')
elif depto == '04' or depto == '00':
valor = 245 * 0.87
print('El valor del departamento es de $',valor)
elif depto == '07' or depto == '03':
valor = 245 * 1.13
print('El valor del departamento es de $',valor)
else:
print('El valor del departamento es de $245')
elif len(cliente) == 4:
piso = cliente[0:2]
depto = cliente[2:]
#print(piso,depto)
if piso == '25':
print('El valor del departamento es de $400')
elif depto == '04' or depto == '00':
valor = 245 * 0.87
print('El valor del departamento es de $',valor)
elif depto == '07' or depto == '03':
valor = 245 * 1.13
print('El valor del departamento es de $',valor)
else:
print('El valor del departamento es de $245')
else:
print('Departamento invalido')