Ejercicio: 3Eva2016TII_T1 Facturar llamadas telefónicas
Propuesta de solución en Python, El ejercicio tiene tarea por completar.
Para las pruebas, requiere el archivo clientes01.csv en el mismo directorio del archivo.py
literal a
Crear una función llamada obtenerClientes(nombreArchivo) la cual recibe como parámetro el nombre del archivo con los clientes de la empresa, y devuelve un diccionario con la siguiente estructura:
{
'1174253723':
{'04-324426':{'sector':'Norte','nac':0,'estado':'Cortado','inter':9},
'04-430419':{'sector':'Oeste','nac':30,'estado':'Cortado','inter':30}
'04-283497':{'sector':'Norte','nac':15,'estado':'Activo','inter':27}},
'1302511926':
{'04-325363':{'sector':'Este','nac':90,'estado':'Activo','inter':12}},
'1278112648':
{'04-443288':{'sector':'Norte','nac':12,'estado':'Activo','inter':30},
'04-383056':{'sector':'Sur','nac':50,'estado':'Activo','inter':15}},
'1729478396':
{'04-437289'{'sector':'Centro','nac':4,'estado':'Activo','inter':2}},
'2061722895':
{'04-356539':{'sector':'Norte','nac':17,'estado':'Cortado','inter':40}}
}
if not(ced in facturar):
facturar[ced] = {num:{
'sector': sec,
'nacional': nac,
'internac': ext,
'estado': est }}
else:
facturar[ced][num] = {
'sector': sec,
'nacional': nac,
'internac': ext,
'estado': est }
literal b
Crear una función llamada generarFactura(dclientes) la cual recibe como parámetro el diccionario de clientes generado en el literal anterior, y genera un archivo por cada cliente, cuyo nombre es la cédula del cliente, y el contenido corresponde a los valores a pagar por cada cliente. La estructura del archivo es la siguiente:
cedulas = tabla.keys()
cedulas = list(cedulas)
n = len(cedulas)
# Mostrar cada cliente
i = 0
while not(i>=n):
# Para pantalla
# print(cedulas[i])
# Cada archivo
narchivo = cedulas[i] + '.txt'
archivo = open(narchivo, 'w')
archivo.write('Empresa Telefonica de Guayaquil \n')
archivo.write('cliente: ' + cedulas[i] + '\n')
archivo.write('Detalle Deuda: \n')
tablanumeros = tabla[cedulas[i]]
# print(tablanumeros)
numeros = tablanumeros.keys()
numeros = list(numeros)
# print(numeros)
m = len(numeros)
j = 0
while not(j>=m):
datos = tablanumeros[numeros[j]]
nac = tablanumeros[numeros[j]]['nacional']
costonac = nac * 0.03
archivo.write(numeros[j] + ' nac: '+str(costonac)+ '\n')
j = j + 1
literal c
Crear una función llamada estadisticaSector(dclientes,sector) que recibe como parámetro el diccionario de clientes generado en el literal 1 y el sector, y devuelve un diccionario con el promedio de minutos de llamadas nacionales e internacionales que han realizado los números telefónicos del sector en estado 'Activo'.
Por ejemplo:
>>> estadisticaSector(dclientes,”Norte”)
Respuesta:
{'Nacionales': 13.50, 'Internacionales': 28.50}
Queda como tarea
Algoritmo en Python
Integrando las partes anteriores en un solo algoritmo.py:
# CCPG1001-Fundamentos de Programación - FIEC-ESPOL
# 3Eva_IIT2016_T1 Facturar llamadas telefónicas
# se incluye la estructura de diccionarios.
# Tarea: Completar facturación y estadísticas
# literal a
def obtenerClientes(nombreArchivo):
facturar = {}
archivo = open(nombreArchivo,'r')
linea = archivo.readline()
while not(linea==''):
linea =linea.strip('\n')
partes = linea.split(',')
ced = partes[0]
num = partes[1]
sec = partes[2]
parm = partes[3].split('|')
nac = float(parm[0])
ext = float(parm[1])
est = partes[4]
if not(ced in facturar):
facturar[ced] = {num:{
'sector': sec,
'nacional': nac,
'internac': ext,
'estado': est }}
else:
facturar[ced][num] = {
'sector': sec,
'nacional': nac,
'internac': ext,
'estado': est }
linea = archivo.readline()
archivo.close()
return(facturar)
# literal b
def generarFactura(tabla):
# Lista de clientes
cedulas = tabla.keys()
cedulas = list(cedulas)
n = len(cedulas)
# Mostrar cada cliente
i = 0
while not(i>=n):
# Para pantalla
# print(cedulas[i])
# Cada archivo
narchivo = cedulas[i] + '.txt'
archivo = open(narchivo, 'w')
archivo.write('Empresa Telefonica de Guayaquil \n')
archivo.write('cliente: ' + cedulas[i] + '\n')
archivo.write('Detalle Deuda: \n')
tablanumeros = tabla[cedulas[i]]
# print(tablanumeros)
numeros = tablanumeros.keys()
numeros = list(numeros)
# print(numeros)
m = len(numeros)
j = 0
while not(j>=m):
datos = tablanumeros[numeros[j]]
nac = tablanumeros[numeros[j]]['nacional']
costonac = nac * 0.03
archivo.write(numeros[j] + ' nac: '+str(costonac)+ '\n')
j = j + 1
archivo.close()
i = i + 1
return()
# literal c
# PROGRAMA
# INGRESO
narchivo = 'clientes.csv'
# PROCEDIMIENTO
tabla = obtenerClientes(narchivo)
# SALIDA
generarFactura(tabla)
# -------
# Usado para explicación de uso de diccionarios
### Lista de clientes
##cedulas = tabla.keys()
##cedulas = list(cedulas)
##n = len(cedulas)
##
### Salida
##print('los clientes son: ', cedulas)
##print('los datos del cliente son:')
##for i in range(0,n,1):
## print(cedulas[i])
## numeroscedula = tabla[cedulas[i]].keys()
## print(numeroscedula)