Ejercicio: 2Eva2017TII_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)