s2Eva_IIT2014_T2 Listar multas infractores metrovía

Ejercicio: 2Eva_IIT2014_T2 Listar multas infractores metrovía

continuación del tema 1. Propuesta de solución en Python:

# ICM00794-Fundamentos de Computación - FCNM-ESPOL
# 2Eva_IIT2014_T2 Listar multas infractores metrovía
# Tarea: Calcular el total de multas a recaudar
import numpy as np

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)

# 2Eva_IIT2014_T2 Listar multas infractores metrovía
# usa la funcion anterior

# INGRESO
n = int(input('cuantas infracciones: '))
i = 0
codigo = []
while not(i>=n):
    placa = input('codigo: ')
    codigo.append(placa)
    i = i + 1

# PROCEDIMIENTO

# marcar los únicos
unico = np.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 = np.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 = np.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

resultado del algoritmo

cuantas infracciones: 4
codigo: 123
codigo: 456
codigo: 1020
codigo: 456
[1 1 1 0]
['123', '456', '1020']
La lista de infractores y multas es:
123 389.4
456 1132.8000000000002
1020 389.4
>>>