Ejercicio: 2Eva_IIT2017_T1 Citas San Valentín
Propuesta de solución en Python:
# CCPG1001-Fundamentos de programación FIEC-ESPOL # 2da Evaluación II Término 2017 # Tema 1. Citas San Valentin def hayEmparejamiento(codigoP1, codigoP2, dicPersonas, aceptacion): tanimoto = 0 aceptado = False gen1 = dicPersonas[codigoP1]['genero'] gen2 = dicPersonas[codigoP2]['genero'] caract1 = dicPersonas[codigoP1]['caracteristicas'] caract2 = dicPersonas[codigoP2]['caracteristicas'] tanimoto = len(caract1&caract2)/len(caract1|caract2) citaf = dicPersonas[codigoP1]['citas']['fallidas'] citae = dicPersonas[codigoP1]['citas']['exitosas'] if (gen1!=gen2 and tanimoto>=aceptacion and not(codigoP2 in citaf) and not(codigoP2 in citae)): aceptado = True respuesta = (tanimoto,aceptado) return(respuesta) def imprimirResultados(codigoPersona, dicPersonas, aceptacionMinimo, aceptacionMaximo): narchivo = codigoPersona + '.txt' archivo = open(narchivo,'w') quienes = dicPersonas.keys() gen1 = dicPersonas[codigoPersona]['genero'] for otra in quienes: gen2 = dicPersonas[otra]['genero'] if (gen1 != gen2 and otra != codigoPersona): nombre = dicPersonas[otra]['nombre'] linea = otra + '$' + nombre caract = dicPersonas[otra]['caracteristicas'] cadena = '' for unacaract in caract: cadena = cadena + unacaract + ',' cadena = cadena.strip(',') linea = linea + '$' + cadena tupla = hayEmparejamiento(codigoPersona, otra,dicPersonas, aceptacionMinimo) tanimoto = tupla[0] aceptado = tupla[1] linea = linea + '$' + str(tanimoto) responde = 'aceptar' if aceptado != False: responde = 'rechazar' linea = linea + '$' + responde + '\n' archivo.write(linea) archivo.close() respuesta = 'Archivos creados' return(respuesta) def compatibles(codigoPersona, dicPersonas, aceptacion=0.43): respuesta={} quienes = dicPersonas.keys() gen1 = dicPersonas[codigoPersona]['genero'] for otra in quienes: gen2 = dicPersonas[otra]['genero'] if (gen1!= gen2 and otra != codigoPersona): tupla = hayEmparejamiento(codigoPersona, otra, dicPersonas, aceptacion) tanimoto=tupla[0] if tanimoto>=aceptacion: nombre2 = dicPersonas[otra]['nombre'] caract2 = dicPersonas[codigoP2]['caracteristicas'] citasf2 = len(dicPersonas[codigoP2]['citas']['fallidas']) respuesta[otra] = {'nombre':nombre2, 'caracteristicas':caract2, 'indice': tanimoto, 'fallidas': citasf2 } return(respuesta) # PROGRAMA PRUEBA # INGRESO datos de prueba dicPersonas = { 'p1021': {'nombre': 'Carlos S.', 'genero': 'm', 'caracteristicas': {'alegre', 'fumador', 'hacker', 'deportista'}, 'citas': {'fallidas': ['P1902', 'P2893', 'P2310'], 'exitosas': ['P4025', 'P1001']} }, 'p1001': {'nombre': 'Andrea V.', 'genero': 'f', 'caracteristicas': {'farrero', 'programador', 'fabuloso', 'deportista'}, 'citas': {'fallidas': ['P1802'], 'exitosas': ['P1021', 'P1002']} } } codigoP1 = 'p1021' codigoP2 = 'p1001' aceptacionMin = 0.1 aceptacionMax = 0.8 # PROCEDIMIENTO pareja = hayEmparejamiento(codigoP1,codigoP2, dicPersonas, aceptacionMin) resultado = imprimirResultados(codigoP1, dicPersonas, aceptacionMin, aceptacionMax) posibles = compatibles(codigoP1, dicPersonas, aceptacionMin) # Salida print('emparejamiento de: ', codigoP1), print(pareja) print(resultado) print('las parejas posibles: ') print(posibles)