Soluciones Propuestas

Presenta ejercicios resueltos usando la formas más simples de los algoritmos en Python semejantes a los presentados en clase.
Contienen tareas por desarrollar, observaciones a otras formas de solución con algoritmos planteados con los estudiantes.

s2Eva_IIT2010_T3 Validar registro de revocatoria en CNE

Ejercicio: 2Eva_IIT2010_T3 Validar registro de revocatoria en CNE

propuesta de solución en Python, contiene tarea.

Ejemplo:

cuantos ciudadanos en padrón: 5
cédula : 3
cédula : 2
cédula : 1
cédula : 4
cédula : 5
cuantos se quejan: 3
cedula: 2
cedula: 2
cedula: 3
los que si votan son: 2
[2 3]
>>> 

Instrucciones:

# 2da Evaluación II Término 2010
# Tema 2. Mostrar valores únicos en vector
# Tema 3. Validar registro de revocatoria en CNE

import numpy as np

def unicos(vector):
    n = len(vector)
    vale = np.ones(n, dtype= int)
    i = 0
    while not(i>=(n-1)): #penultimo
        j = i+1
        while not(j>=n): # ultimo
            if (vector[i] == vector[j]):
                vale[j] = 0
            j = j+1
        i = i+1

    # obtiene los únicos
    sinrepetir =[]
    i = 0
    while not(i>=n):
        if (vale[i] == 1):
            sinrepetir.append(vector[i])
        i= i+1
    sinrepetir = np.array(sinrepetir)
    return(sinrepetir)

def registrados(padron,unicos):
    # PROCEDIMIENTO
    n = len(padron)
    m = len(unicos)

    vale = np.ones(m,dtype=int)
    sivotan = []
    i = 0
    while not(i>=m):
        if not(unicos[i] in padron):
            vale[i] = 0
        if (unicos[i] in padron):
            sivotan.append(unicos[i])
        i = i+1
    sivotan = np.array(sivotan)
    return(sivotan)

# PROGRAMA QUE USA LAS FUNCIONES

# INGRESO
n = int(input('cuantos ciudadanos en padrón: '))
padron = []
i = 0
while not(i>=n):
    cedula = int(input('cédula : '))
    padron.append(cedula)
    i = i+1

m = int(input('cuantos se quejan: '))
sequejan =[]
j = 0
while not(j>=m):
    cedula = int(input('cedula: '))
    sequejan.append(cedula)
    j = j+1

# PROCEDIMIENTO
sinrepetir = unicos(sequejan)
sivotan = registrados(padron,sinrepetir)
k = len(sivotan)

# Tarea: Verificar si llegan al 10% del padrón

# SALIDA
print('los que si votan son:',k)
print(sivotan)

s1Eva_IIT2018_T3 Compras ‘Black Friday’

Ejercicio: 1Eva_IIT2018_T3 Compras ‘Black Friday’

propuesta de solución, contiene tarea.

# 1ra Evaluación II Término 2018
# Tema 3. Black Friday
# Tarea: descuentosPorSección
import random as rnd
import numpy as np

def calcularPrecio(unacompra,Codigo,Precio,Descuento):
    unprecio = 0
    if (unacompra in Codigo):
        donde = Codigo.index(unacompra)
        valor = Precio[donde]
        unprecio = valor - Descuento[donde]*valor/100
    return(unprecio)

def calcularTotal(compras,Codigo,Precio,Descuento):
    m = len(compras)
    totalpagar = 0
    i = 0
    while not(i>=m):
        unacompra = compras[i]
        unprecio = calcularPrecio(unacompra, Codigo, Precio,Descuento)
        totalpagar = totalpagar + unprecio
        i = i+1
    return(totalpagar)

def hallarSecciones(compras,Codigo,Seccion):
    m = len(compras)
    visitar = []
    i = 0
    while not(i>=m):
        unacompra = compras[i]
        donde = Codigo.index(unacompra)
        unaseccion = Seccion[donde]
        if not(unaseccion in visitar):
            visitar.append(unaseccion)
        i = i+1
    return(visitar)

def descuentosPorSección(Descuento,Seccion):
    remate = []
    # Tarea: Desarrollar
    return(remate)
    
# INGRESO
unacompra = input('codigo de una compra: ')
# Tarea: ingresar varias compras
compras = ['SKU-5675', 'PSS-4542']
Codigo = ['CTR-2424', 'SKU-5675', 'PSS-4542']
Precio = [ 56.65, 32.00, 22.22]
Descuento = [0, 50, 10]
Seccion = ['Ropa Niños', 'Juguetes', 'Hombre']

# PROCEDIMIENTO
unprecio = calcularPrecio(unacompra, Codigo, Precio,Descuento)
totalpagar = calcularTotal(compras, Codigo, Precio,Descuento)
visitar = hallarSecciones(compras,Codigo,Seccion)
remate = descuentosPorSección(Descuento,Seccion)

# SALIDA
print('El precio de : ',unacompra)
print(unprecio)
print('total a pagar de lista de compras: ', totalpagar)
print('tiendas a visitar: ',visitar)
print('remate de productos por seccion: ',remate)

s1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)

Ejercicio: 1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)

Propuesta de solución, contiene tareas por completar.

Estado del juego:  F***
 adivine una letra: C
 Adivinaste...C

Estado del juego:  FC**
turno: 1
fallas:  0
 adivine una letra: M
 Adivinaste...M

Estado del juego:  FC*M
turno: 2
fallas:  0
 adivine una letra: A
 NO es una letra de palabra...

Estado del juego:  FC*M
turno: 3
fallas:  1
 adivine una letra: N
 Adivinaste...N

Estado del juego:  FCNM
turno: 4
fallas:  1
Felicitaciones, adivinó: FCNM
>>> 

Algoritmo en Python

Siguiendo las sugerencias, para dividir y simplificar el problema, primero se crean las funciones: escondeletras(secreta) y cambialetra(secreta,letra,estado).

Se inicia con la selección aleatoria de la palabra secreta y el sorteo de la letra pista, verificando que sea consonante.

Se actualiza la palabra secreta con la letra pista, y se inicia el juego.

# 1Eva_IIT2018_T2 Juego conocimiento (Ahorcado)
# propuesta de solución: edelros@espol.edu.ec
# tarea: indiferente usar mayúsculas/minúsculas
#        contar solo letras adivinadas, no repetidas

import numpy as np
import random as rnd

def escondeletras(secreta):
    estado = ''
    n = len(secreta)
    i = 0
    while not(i>=n):
        estado = estado + '*'
        i=i+1
    return(estado)

def cambialetra(secreta,letra,estado):
    nuevoestado = ''
    n = len(secreta)
    i = 0
    while not(i>=n):
        if (secreta[i]==letra):
            nuevoestado = nuevoestado + letra
        else:
            nuevoestado = nuevoestado + estado[i]
        i=i+1
    return(nuevoestado)

# PROGRAMA JUEGO
# selecciona secreta
palabras = ['ESPOL','FCNM','FIEC','FIMCP','FICT']
n = len(palabras)
sorteo = int(rnd.random()*n)+0
secreta = palabras[sorteo]

# estado inicial del juego
estado = escondeletras(secreta)

# una letra como pista
consonante = 'BCDFGHJKLMNPQRSTVWXYZ'
m = len(secreta)
sorteo = int(rnd.random()*m)+0
pista = secreta[sorteo]
while not(pista in consonante):
    sorteo = int(rnd.random()*m)+0
    pista = secreta[sorteo]
    
# actualiza estado del juego
estado = cambialetra(secreta,pista,estado)


# Control del Juego
turnomax = 2*m
gana = 1
falla = 0
print('Estado del juego: ', estado)

turno=1
while not(turno>turnomax or gana==m):
    letra = input(' adivine una letra: ')
    if (letra in secreta):
        gana =  gana +1
        estado = cambialetra(secreta,letra, estado)
        mensaje = ' Adivinaste...' + letra
    else:
        falla = falla + 1
        mensaje = ' NO es una letra de palabra...'
    
    print(mensaje)
    print()
    print('Estado del juego: ', estado)
    print('turno:', turno)
    print('fallas: ', falla)
    turno = turno + 1

if (turno<=turnomax and gana==m):
    mensaje = 'Felicitaciones, adivinó: ' + secreta
else:
    mensaje = 'lo lamento, perdió..., la palabra era: '
    mensaje = mensaje + secreta

# SALIDA
print(mensaje)

Recuerde que se ha dejado como tarea, realizar las instrucciones para complir que:
– sea indiferente usar mayúsculas/minúsculas
– contar solo letras adivinadas, no repetidas

s3Eva_IT2018_T2 Producción minera del país

Ejercicio: 3Eva_IT2018_T2 Producción minera del país

Solución propuesta en Python, el primer bloque corresponde solo a las funciones requeridas en el examen. El segundo bloque corresponde a un programa de prueba.

# 3ra Evaluación I Término 2018
# Tema 2. Producción minera del país
import numpy as np

# Literal a
def extraerMinerales(discurso): 
    palabras = discurso.split(' ')
    cuales = []

    for unapalabra in palabras:
        # Tarea: verificar únicos
        if 'mral_' in unapalabra:
            mencionados = unapalabra[5:]
            mencionados = mencionados.title()
            cuales.append(mencionados)

    return(cuales)

# literal b
def calcularGanancias(P,C,T,precios):
    produccion = np.array(P)
    costosExtraccion = np.array(C, dtype=float)
    costosTransporte = np.array(T)
    
    # precio en forma de columna
    precios = np.transpose([precios])

    ventas = produccion*precios
    costo = costosTransporte + costosExtraccion
    ganancia = ventas - costo
    return(ganancia)

# literal c
def gananciaTotal(ganancia, minerales):
    ganametal = np.sum(ganancia,axis =1)
    
    ascendente = np.argsort(ganametal)
    descendente = np.argsort(-ganametal)

    totalmetal = ganametal[descendente]
    
    # convierte arreglo para ascendente
    minerales = np.array(minerales)
    cualmetal = minerales[descendente]

    ganatotal = (totalmetal,list(cualmetal))

    return(ganatotal)

# literal d
def top8(discurso,reporte):
    mencionados = extraerMinerales(discurso)
    totalmetal = reporte[0]
    cualmetal = reporte[1]
    
    interseccion = []
    m = len(cualmetal)
    for i in range(0,m,1):
        if (cualmetal[i] in mencionados):
            interseccion.append(cualmetal[i])
            
    mejoresmencionados = interseccion[:8]
    return (mejoresmencionados)

Programa de Prueba

Observación: las matrices C y T no tienen el mismo orden de magnitud a pesar de ser costos totales. Podría ser que el costo de extracción C sea por gramos, sin embargo las matrices se usan tal como fueron presentadas en el examen

# PROGRAMA DE PRUEBA -----
discurso = 'y el dia de ayer descubrimos en la mina mirador que la cantidad de mral_oro'

minerales = ['Oro', 'Plata', 'Cobre']
precios   = [38.48,    3.43,    0.01]

minas = ['MIRADOR', 'FRUTA_DEL_NORTE', 'LOMA_LARGA', 'otra']


P = [[ 13524000, 121072000,  1204000,  9632000],
     [ 28000000,    952000,  9632000, 96404000],
     [126980000,    896000, 92988000,  9604000]]

C = [[ 12.32, 10.23, 23.23, 19.23],
     [  3.13,  1.78,  2.45,  1.69],
     [  8.32,  5.25,  6.32,  6.89]]

T = [[ 43736616, 341786256,  5442080,  28241024],
     [ 76244000,   1827840, 13966400, 435746080],
     [156439360,   1121792,300723192,  10785292]]
            
# PROCEDIMIENTO
mencionados = extraerMinerales(discurso)

ganancias = calcularGanancias(P,C,T,precios)

ganatotal = gananciaTotal(ganancias, minerales)
totalmetal = ganatotal[0]
cualmetal = ganatotal[1]

mejoresmencionados = top8(discurso,ganatotal)


# SALIDA
print('a) los minerales mencionados son: ')
print(mencionados)

print('b) las ganancias totales son:')
print(ganancias)

print('c) ganancias totales por metal')
print(totalmetal)
print(cualmetal)

print('d) los 8 mejores mencionados: ')
print(mejoresmencionados)

los resultados en pantalla son :

a) los minerales mencionados son: 
['Oro']
b) las ganancias totales son:
[[  4.76666892e+08   4.31706429e+09   4.08878168e+07   3.42398317e+08]
 [  1.97959969e+07   1.43751822e+06   1.90713576e+07  -1.05080362e+08]
 [ -1.55169568e+08  -1.11283725e+06  -2.99793318e+08  -1.06892589e+07]]
c) ganancias totales por metal
[  5.17701732e+09  -6.47754890e+07  -4.66764983e+08]
['Oro', 'Plata', 'Cobre']
d) los 8 mejores mencionados: 
['Oro']
>>> 

s3Eva_IT2018_T1 Choferes y Rutas Trailers

Ejercicio: 3Eva_IT2018_T1 Choferes y Rutas Trailers

Propuesta en Python, se incluye la función calcularFecha() se presenta para poder probar las funciones en el programa de prueba.

El archivo con datos de prueba usado es: rutasManejadas2018.txt

La propuesta considera el uso de listas, por ser parte de los ejercicios del proyecto para 3ra Evaluación.

# 3ra Evaluación I Término 2018
# Tema 1. Choferes y Rutas Trailers

# literal a
def cargarDatos(narchivo):
    loschoferes = []
    tabla = {}
    
    archivo = open(narchivo,'r')
    cabecera = archivo.readline()
    linea = archivo.readline()
    while not(linea==''):
        linea = linea.strip('\n')
        partes = linea.split(',')
        ruta = partes[0]
        chofer = partes[1]
        fecha = partes[2]
        
        if not(chofer in loschoferes):
            loschoferes.append(chofer)

        if not(fecha in tabla):
            tabla[fecha]={ruta:[chofer]}
        else:
            if not(ruta in tabla[fecha]):
                tabla[fecha][ruta] = [chofer]
            else:
                tabla[fecha][ruta].append(chofer)
                
        linea = archivo.readline()
        
    archivo.close()

    return((loschoferes,tabla))

# función para pruebas, no requerida en la evaluación
import datetime as dtt
def calcularFecha(unafecha,n):
    formato = '%d-%m-%Y'
    fecha = dtt.datetime.strptime(unafecha,formato)
    pasada = fecha - dtt.timedelta(days=n)
    pasadatxt = dtt.datetime.strftime(pasada,formato)
    return(pasadatxt)

# literal b
def encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n):
    simanejaron = []
    fechas = list(tabla.keys())
    for i in range(1,n+1,1):
        pasada = calcularFecha(unafecha,i)
        if (pasada in fechas):
            trabajaron = tabla[pasada][unaruta]
            for unchofer in trabajaron:
                if not(unchofer in simanejaron):
                    simanejaron.append(unchofer)
    nomanejaron = []
    for unchofer in loschoferes:
        if not(unchofer in simanejaron):
            nomanejaron.append(unchofer)
    return(nomanejaron)

# literal c
def grabarArchivo(tabla,loschoferes,unafecha,n):  
    narchivograba = unaruta+'_'+unafecha+'_'+str(n)+'.txt'
    
    archivo = open(narchivograba,'w')
    
    cabecera = 'Para la ruta '+unaruta+'\n'
    cabecera = cabecera + 'los choferes disponibles para la fecha '+unafecha+'\n'
    cabecera = cabecera + 'que no hayan manejado '+str(n)+' dias anteriores son: \n'
    archivo.write(cabecera)
    
    nomanejaron = encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n)

    for cadachofer in nomanejaron:
        archivo.write(cadachofer+'\n')
    archivo.close()
    
    return(narchivograba)

programa de prueba, como trabajo extra, no requerido para el examen:

# PROGRAMA PRUEBA -------
# INGRESO
narchivo = 'rutasManejadas2018.txt'
unafecha = '19-05-2018'
unaruta = 'Guayaquil-Cuenca'
n = 2

# PROCEDIMIENTO
datos = cargarDatos(narchivo)
loschoferes = datos[0]
tabla = datos[1]
nomanejaron = encontrarChoferes(tabla,loschoferes,unafecha,unaruta,n)
elarchivo = grabarArchivo(tabla,loschoferes,unafecha,n)

# SALIDA
print('a) los choferes registrados son: ')
print(loschoferes)
print('   la tabla de trabajos es: ')
print(tabla)
print('b) los choferes que no manejaron en ')
print('  '+unaruta+', '+str(n)+' dias antes del '+unafecha+': ')
print(nomanejaron)
print('c) resultados en el archivo: ', elarchivo)

Se muestra el resultado en pantalla del programa usando los datos de prueba del archivo:

a) los choferes registrados son: 
['SMS', 'AGB', 'SMZ', 'EVN', 'AAQ']
   la tabla de trabajos es: 
{'17-05-2018': {'Guayaquil-Cuenca': ['SMS', 'SMZ'], 'Guayaquil-Daule': ['EVN']}, '18-05-2018': {'Guayaquil-Cuenca': ['AGB'], 'Guayaquil-Daule': ['AAQ']}}

b) los choferes que no manejaron en 
  Guayaquil-Cuenca, 2 dias antes del 19-05-2018: 
['EVN', 'AAQ']

c) resultados en el archivo:  Guayaquil-Cuenca_19-05-2018_2.txt
>>> 

s2Eva_IIT2014_T1 Multas por invadir carril metrovía

Ejercicio: 2Eva_IIT2014_T1 Multas por invadir carril metrovía

Propuesta de solución en Python:

# 2da Evaluación II Término 2014
# Tema 1. multa de metrovia
# Tarea: Calcular el total de multas a recaudar
import numpy

def multametrovia(veces,basico):
    pagar=0
    i=1
    while not(i>veces):
        if (i==1):
            pagar=basico+0.1*basico
        if (i>1):
            pagar=pagar+2*basico+0.1*basico
        i=i+1
    return(pagar)

# Tema 2. Programa para multas metrovia
# usa la funcion anterior
codigo=[]
# bloque de ingreso
n=int(input('cuantas infracciones: '))
i=0
while not(i>=n):
    placa=input('codigo: ')
    codigo.append(placa)
    i=i+1
# Marcar los únicos
unico=numpy.ones(n,dtype=int)
i=0
penultimo=n-1
while not(i>=penultimo):
    j=i+1
    while not(j>=n):
        if (codigo[i]==codigo[j]):
            unico[j]=0
        j=j+1
    i=i+1

# Copiar en nueva lista placas únicas
infractor=[]
i=0
while not(i>=n):
    if (unico[i]==1):
        infractor.append(codigo[i])
    i=i+1
# Contar los repetidos vector veces
m=len(infractor)
veces=numpy.zeros(m,dtype=int)
i=0
while not(i>=n):
    placa=codigo[i]
    # Busca en infractores
    j=0
    while not(j>=m):
        if (placa==infractor[j]):
            veces[j]=veces[j]+1
        j=j+1
    i=i+1
# multas
multas=numpy.zeros(m,dtype=float)
j=0
while not(j>=m):
    multas[j]=multametrovia(veces[j],354)
    j=j+1

# Tarea: total a recaudar por multas

# salida
print(unico)
print(infractor)
print('La lista de infractores y multas es:')
j=0
while not(j>=m):
    print(infractor[j],multas[j])
    j=j+1

s2Eva_IT2016_T1 Tendencias en Twitter

Propuesta de solución en Python:

# 2da Evaluación I Término 2016
# Tema 1. Tendencias en Twitter

def reportatendencia(tendencias,fecha1,fecha2):
    etiquetasf1 = tendencias[fecha1]
    n = len(etiquetasf1)
    etiquetasf2 = tendencias[fecha2]
    m = len(etiquetasf2)
    difsimetrica =[]
    i = 0
    while not(i>=n):
        # TAREA

        i= i+1  
    return(difsimetrica)

def cuentaTopics(tendencias, listaFechas):
    fechaslista = list(listaFechas)
    n = len(fechaslista)
    union = {}
    i = 0
    while not(i>=n):
        etiquetas = tendencias[fechaslista[i]]
        etiquetas = list(etiquetas)
        m = len(etiquetas)
        j = 0
        while not(j>=m):
            if not(etiquetas[j] in union):
                union[etiquetas[j]]=0
            j=j+1
        i=i+1
    # contadores
    i = 0
    while not(i>=n):
        etiquetas = tendencias[fechaslista[i]]
        etiquetas = list(etiquetas)
        m = len(etiquetas)
        j = 0
        while not(j>=m):
            cual = etiquetas[j]
            union[cual] = union[cual] + 1
            j = j+1
        i =i+1

    return(union)

tendencias = {
 '08-22-2016':{'#Rio2016', '#BSC', '#ECU'}, 
 '08-25-2016':{'#GYE', '#BRA'}, 
 '08-27-2016':{'#YoSoyEspol', '#GYE', '#BSC'}
 }

listaFechas = ['08-22-2016','08-27-2016']
# PROCEDIMIENTO
cuales = cuentaTopics(tendencias, listaFechas)

print(cuales)

s2Eva_IT2018_T2 Pago nomina mensual

Propuesta de solución en Python:

archivo de prueba: meshoratrabajada.txt

# 2da Evaluación I Termino 2018
# Tema 1. Horas extras por empleado
# Propuesta modo simple pero largo
# Tarea: Proponear simplificaciones a los algoritmos

def calcularHoras(linea):
    linea = linea.strip('\n')
    partes = linea.split(',')
    fecha = partes[0]
    dia = int(partes[1])
    esferiado = partes[2]
    ID = partes [3]
    nombre = partes[4]
    sucursal = partes[5]
    ciudad = partes[6]
    horas = int(partes[7])

    trabajado = [ID,ciudad, 0,0,0,0]
    if (esferiado=='Si'):
        trabajado[5] = horas
    else:
        if (dia>=6):
            trabajado[4] = horas
        else:
            if (horas<=8):
                trabajado[2] = horas
            else:
                trabajado[2] = 8
                trabajado[3] = horas-8
    return(trabajado)

def leerData(nomA):
    
    total = {}
    archivo = open(nomA,'r')
    # factores
    linea = archivo.readline()
    linea = linea.strip('\n')
    partes = linea.split(',')
    VH = float(partes[1])
    
    linea = archivo.readline()
    linea = linea.strip('\n')
    partes = linea.split(',')
    
    HR = float(partes[1])
    linea = archivo.readline()
    linea = linea.strip('\n')
    partes = linea.split(',')
    
    HER = float(partes[1])
    linea = archivo.readline()
    linea = linea.strip('\n')
    partes = linea.split(',')
    
    HFDS = float(partes[1])
    linea = archivo.readline()
    linea = linea.strip('\n')
    partes = linea.split(',')
    HF = float(partes[1])
    
    # encabezado
    linea = archivo.readline()
    
    # datos    
    linea = archivo.readline()
    parafecha = linea.split(',')
    parafecha = parafecha[0].split('-')
    mes = parafecha[1]
    anio = parafecha[2]
    
    while not(linea==''):
        trabajado = calcularHoras(linea)
        ID = trabajado[0]
        ciudad = trabajado[1]
        normal = trabajado[2]*VH*HR
        extra = trabajado[3]*VH*HER
        finsem = trabajado[4]*VH*HFDS
        feriado = trabajado[5]*VH*HF
        
        if not(ciudad in total):
            total[ciudad] = {ID:{'HR': normal,
                                'HER': extra,
                                'HFDS': finsem,
                                'HF': feriado}}
        else:
            if not(ID in total[ciudad]):
                total[ciudad][ID] = {'HR': normal,
                                     'HER': extra,
                                     'HFDS': finsem,
                                     'HF': feriado}
            else:
                total[ciudad][ID]['HR'] = total[ciudad][ID]['HR'] + normal
                total[ciudad][ID]['HER'] = total[ciudad][ID]['HER'] + extra
                total[ciudad][ID]['HFDS'] = total[ciudad][ID]['HFDS'] + finsem
                total[ciudad][ID]['HF'] = total[ciudad][ID]['HF'] + feriado
        linea = archivo.readline()     
    
    archivo.close()
    pagonomina = (total,mes,anio)
    return(pagonomina)

def generareporte(nomA):
    pagonomina = leerData(nomA)
    total = pagonomina[0]
    mes = pagonomina[1]
    anio = pagonomina[2]
    ciudad = list(total.keys())
    
    for lugar in ciudad:
        narchivo = lugar+mes+'-'+anio+'.txt'
        archivo = open(narchivo,'w')
        registro = total[lugar]
        # Tarea: Poner encabezado
        
        for empleado in registro:
            linea = empleado +','+str(total[lugar][empleado]['HR'])
            extra = total[lugar][empleado]['HER']+ total[lugar][empleado]['HFDS'] +total[lugar][empleado]['HF']
            linea = linea+','+str(extra)+'\n'
            archivo.write(linea)
            
        archivo.close()
    mensaje = 'archivo guardado'
    return(mensaje)

# PROGRAMA PRUEBA -------------------
# INGRESO
nomA = 'meshoratrabajada.txt'

# PROCEDIMIENTO
mensaje = generareporte(nomA)

# SALIDA
print(mensaje)

s2Eva_IT2018_T1 Niveles seguridad por ciudad

Propuesta de solución en Python:

Como referencia para el algoritmo se usa la tabla:

incidentes
ciudad robo vehículos asalto
Guayaquil 605 6345
Cuenca 123 676
# 2da Evaluación I Termino 2018
# Tema 1. Niveles seguridad por ciudad
import numpy as np
import ecu911 es ecu

def titulostabla(tabla_dic):
    ciudad = tabla_dic.keys()
    ciudad = list(ciudad)
    
    unaciudad = ciudad[0]
    unregistro = tabla_dic[unaciudad]
    
    tipodelito = unregistro.keys()
    tipodelito = list(tipodelito)
    
    titulos = [ciudad,tipodelito]
    return(titulos)

def crearMatriz(tabla_dic,titulos):
    ciudad = titulos[0]
    tipodelito = titulos[1]
    n = len(ciudad)
    m = len(tipodelito)
    
    tabla = np.zeros(shape=(n,m),dtype = int)
    f = 0
    while not(f>=n):
        c = 0
        unaciudad = ciudad[f]
        registro = tabla_dic[unaciudad]
        while not(c>=m):
            untipo = tipodelito[c]
            valor = registro[untipo]
            tabla[f,c] = valor
            c = c+1
        f = f+1
        
    return(tabla)

def ciudadesMenosSeguras(matriz, titulos, untipo, poblacion):
    ciudad = titulos[0]
    tipodelito = titulos[1]
    
    columna = tipodelito.index(untipo)
    incidentes = matriz[:,columna]
    indicador = incidentes/poblacion

    cual = np.argmax(indicador)
    insegura = ciudad[cual]
    # Tarea: encontrar las siguientes menos seguras
    return(insegura)

# PROGRAMA PRUEBA -------------------
# INGRESO

nombrearchivo = 'reporteincidentes.txt'
tabla = ecu.cargardatos(nombrearchivo)

# Usado si no dispone del módulo y archivo.txt
#tabla_dic = {
#    'Guayaquil':{'robo vehiculo':605, 'asalto':6345},
#    'Cuenca':   {'robo vehiculo':123, 'asalto': 676}
#    }
poblacion = np.array([2000, 1000])
untipo = 'asalto'

# PROCEDIMIENTO
titulos = titulostabla(tabla_dic)
matriz = crearMatriz(tabla_dic,titulos)
inseguras = ciudadesMenosSeguras(matriz, titulos, untipo, poblacion)

# SALIDA
print('Los títulos de la tabla son:')
print(titulos)
print('La matriz de datos: ')
print(matriz)
print('La menos segura: ')
print(inseguras)

El módulo cargarDatos() desde un archivo se guarda como ecu911.py
La sección no era necesario escribirla en la evaluación, se podría suponer que ya estaba escrita.

# 2Eva_IT2018_T1 Niveles seguridad por ciudad
# propuesta de módulo

def cargarDatos(nombrearchivo):
    incidentes = {}
    archivo = open(nombrearchivo, 'r')
    linea = archivo.readline()
    while not(linea ==''):
        linea = linea.strip('\n')
        partes = linea.split(',')
        ciud = partes[0]
        robo = partes[1]
        asal = partes[2]
        
        registro = {'robo vehiculo':robo,
                    'asalto':asal}
        incidentes[ciud] = registro

        linea = archivo.readline()
    archivo.close()

    return(incidentes)

Usando el módulo es necesario disponer de un archivo reporteincidentes.txt con datos, por facilidad en el mismo directorio de trabajo:

Guayaquil,605,6345
Cuenca,123,676