EJERCICIO 20 (Ejercicio 23 de Clase intro)
Una empresa de telefonía nos pide escribir un programa que le brinde información sobre el consumo de sus clientes residenciales. Para ello se ingresa, por cada una de las llamadas realizadas en el último mes:
● Código de Cliente (int de 5 dígitos, entre 10001 y 99999, 0 = fin)
● Duración de la llamada nro. (int > 0).
● Tipo de abono (“A”, “B” o “C”).
Para calcular el importe de cada llamada, nos informan que el costo por minuto, de acuerdo al tipo de abono, es el siguiente:
● Abono “A” => $2 el minuto
● Abono “B” => Hasta 5 minutos, $2 el minuto; Más de 5 minutos, $1,5 el minuto.
● Abono “C” => $1 el minuto con un máximo de $10 (Ej. si habla 15 minutos paga $10).
Se pide informar:
1. El importe acumulado a recaudar por cada tipo de abono.
2. La cantidad de minutos de la llamada más larga.
3. La cantidad de llamadas de menos de 6 minutos.
4. El precio promedio por llamada.
Primera Parte – Calculo de llamadas de mas de 6 minutos
"""
Una empresa de telefonía nos pide escribir un programa que le brinde información sobre
el consumo de sus clientes residenciales. Para ello se ingresa, por cada una de las llamadas realizadas en el último mes:
● Código de Cliente (int de 5 dígitos, entre 10001 y 99999, 0 = fin)
● Duración de la llamada nro. (int > 0).
● Tipo de abono (“A”, “B” o “C”).
Para calcular el importe de cada llamada, nos informan que el costo por minuto, de acuerdo
al tipo de abono, es el siguiente:
● Abono “A” => $2 el minuto
● Abono “B” => Hasta 5 minutos, $2 el minuto; Más de 5 minutos, $1,5 el minuto.
● Abono “C” => $1 el minuto con un máximo de $10 (Ej. si habla 15 minutos paga $10).
Se pide informar:
1. El importe acumulado a recaudar por cada tipo de abono.
2. La cantidad de minutos de la llamada más larga.
3. La cantidad de llamadas de menos de 6 minutos.
4. El precio promedio por llamada.
"""
import random as R
def get_llamada():
legajo = R.randint (0, 10000)
dura = R.randint (0, 1000)
tipo = R.randint (1, 3)
return (legajo, dura, tipo)
def main():
e = get_llamada()
while e [0] != 0:
print (e)
if e[1]<= 360:
print ("Llamadas de menos de 6 minutos", e[1])
e = get_llamada()
main()
Resultado
>>> %Run majuma021.py
RESUMEN
(6353, 24, 2)
Llamadas de menos de 6 minutos 24
(8457, 488, 2)
(5070, 545, 3)
(1660, 267, 3)
Llamadas de menos de 6 minutos 267
(6519, 185, 1)
Llamadas de menos de 6 minutos
Segunda Parte – Calculo de llamadas de mas de 6 minutos + cantidad de minutos llamada + extensa
"""
La cantidad de minutos de la llamada más larga.
La cantidad de llamadas de menos de 6 minutos.
"""
import random as R
def get_llamada():
legajo = R.randint (0, 100)
dura = R.randint (0, 1000)
tipo = R.randint (1, 3)
return (legajo, dura, tipo)
def main():
e = get_llamada()
primeraVez = True
maximo = 0
minimo = 0
while e != 0:
e = get_llamada()
print (e [1])
if primeraVez:
primeraVez = False
maximo = e[1]
else:
if e[1] > maximo:
maximo = e[1]
maximo = maximo/60
if e[1]<= 360:
print ("Llamadas de menos de 6 minutos", e[1])
print ("Maximo: ", maximo, "Minutos")
main()
Resultado
>>> %Run majuma021.py
RESUMEN
Llamadas de menos de 6 minutos 135
Maximo: 2.25 Minutos
886
Maximo: 14.766666666666667 Minutos
452
Maximo: 7.533333333333333 Minutos
148
Llamadas de menos de 6 minutos 148
Maximo: 2.466666666666667 Minutos
85
Tercera Parte – Calculo de llamadas acumuladas por abonos
"""
● Abono “A” => $2 el minuto
● Abono “B” => Hasta 5 minutos, $2 el minuto; Más de 5 minutos, $1,5 el minuto.
● Abono “C” => $1 el minuto con un máximo de $10 (Ej. si habla 15 minutos paga $10).
Se pide informar:
El importe acumulado a recaudar por cada tipo de abono.
"""
import random as R
def get_llamada ():
legajo = R.randint (0, 100)
dura = R.randint (0, 1000)
tipo = R.randint (1, 3)
return (legajo, dura, tipo)
def main ():
e = get_llamada() #le asigno la funcion get_llamada a "e"
while e [0] !=0: #comienzo ciclo, mientras legajo != de 0 sigue
print (e) #muestra por pantalla la tupla completa para chequear
#Asigno cada posible valor del indice 2 (Abono) a distintas variables
#para operar on los montos adecuados
if e [2] == 1:
abonoA = e [2]
if e [2] == 2:
abonoB = e [2]
if e [2] == 3:
abonoC = e [2]
#Calculo el importe acumulado del Abono A(1)
if e [2] == 1:
abonoA = (e [1] / 60) * 2
print ("Importe acumulado Abono A", abonoA)
#calculo el importe acumulado del Abono B(2), si es mas de 5 minutos a $1.5 el minuto,
#sino a 2$ el minuto
if e [2] == 2 and e [1] > 300:
abonoB = (e [1] / 60) * 1.5
print ("Importe acumulado Abono B a $1.5", abonoB)
else:
abonoB = (e [1] / 60) * 2
print ("Importe acumulado Abono B a $2", abonoB)
#Calculo el importe acumulado del Abono C(3) a $1 x minuto, si pasa 10 minutos
#Se cobra $10
if e [1] > 600:
abonoC = 10
print ("Importe acumulado Abono C mas de 10 minutos", abonoC)
else:
abonoC = (e [1] / 60)
print ("Importe acumulado Abono C MENOS de 10 minutos", abonoC)
e = get_llamada()#vuelve a comenzar el ciclo si no enuentra 0
if e [0] == 0:# si el indice "0" (legajo) = 0 lo imprime
print (e[0]) #salio del ciclo al encontrar cero e imprime el indice "0" para
#mostrar que efctivamente salio poque genero un cero
main ()
Resultado
>>> %Run majuma021.py
RESUMEN
Importe acumulado Abono B a $2 6.766666666666667
Importe acumulado Abono C MENOS de 10 minutos 3.3833333333333333
(14, 732, 3)
Importe acumulado Abono B a $2 24.4
Importe acumulado Abono C mas de 10 minutos 10
(39, 975, 1)
Importe acumulado Abono A 32.5
Importe acumulado Abono B a $2 32.5
Importe acumulado Abono C mas de 10 minutos 10
(55, 123, 3)
Importe acumulado Abono B a $2 4.1
Importe acumulado Abono C MENOS de 10 minutos 2.05
(52, 638, 2)
Importe acumulado Abono B a $1.5 15.95
Importe acumulado Abono B a $2 15.95
Importe acumulado Abono C mas de 10 minutos 10
(85, 288, 2)
Importe acumulado Abono B a $2 9.6
Importe acumulado Abono C MENOS de 10 minutos 4.8
0
Cuarta Parte – Ejercicio COMPLeTO explicado
"""
Una empresa de telefonía nos pide escribir un programa que le brinde información sobre
el consumo de sus clientes residenciales. Para ello se ingresa, por cada una de las llamadas realizadas en el último mes:
● Código de Cliente (int de 5 dígitos, entre 10001 y 99999, 0 = fin)
● Duración de la llamada nro. (int > 0).
● Tipo de abono (“A”, “B” o “C”).
Para calcular el importe de cada llamada, nos informan que el costo por minuto, de acuerdo
al tipo de abono, es el siguiente:
● Abono “A” => $2 el minuto
● Abono “B” => Hasta 5 minutos, $2 el minuto; Más de 5 minutos, $1,5 el minuto.
● Abono “C” => $1 el minuto con un máximo de $10 (Ej. si habla 15 minutos paga $10).
Se pide informar:
1. El importe acumulado a recaudar por cada tipo de abono.
2. La cantidad de minutos de la llamada más larga.
3. La cantidad de llamadas de menos de 6 minutos.
4. El precio promedio por llamada.
"""
import random as R #importamos random para generar numeros aleatorios y lo renombramons como R
#definimos una funcion que contendra la tupla con los datos a usar
def get_llamada ():
legajo = R.randint (0, 100) #Indice 0
dura = R.randint (0, 1000) #indice 1
tipo = R.randint (1, 3) #indice 2
return (legajo, dura, tipo)
#entramos en nuestra funcion principal (main)
def main ():
#Inicializo variables que cuentan la cantidad
#de llamadas para cada Abono y permiten calcular promedio
ca = 0 #almaceno cantidad de llamadas en Abono A
cb = 0 #variable intermedia que me permite acumular contador de abono B a $1.5 y a $2
cb15 = 0 #almaceno cantidad de llamadas en Abono B a $1.5
cb2 = 0 #almaceno cantidad de llamadas en Abono B a $2
cm10 = 0 #Cantidad de llamadas Abono C menos de 10 minutos
cinf = 0 #Cantidad de llamadas Abono C mayor de 10 minutos
promedioA = 0 #Promedio por llamada Abono A
promedioB15 = 0 #Promedio por llamada Abono B a $1.5
promediob2 = 0 #Promedio por llamada Abono B a $2
promedioc10 = 0 #Promedio por llamada Abono C menos de 10 minutos
promediocinf = 0 #Promedio por llamada Abono C mayor de 10 minutos
#inicializo variables para calculo de maximo, minimo y llamada mas 6 minutos
primeraVez = True
maximo = 0
minimo = 0
e = get_llamada() #le asigno la funcion get_llamada a "e" para operar como variable
while e [0] !=0: #comienzo ciclo, mientras legajo sea distinto de 0 sigue
#el indice [0] apunta a "legajo"
print (e) #muestra por pantalla la tupla completa para chequear
#este print no es necessario, solo es de control
#Asigno cada posible valor del indice 2 (Abono) a distintas variables
#para operar con los montos adecuados
if e [2] == 1:
abonoA = e [2]
if e [2] == 2:
abonoB = e [2]
if e [2] == 3:
abonoC = e [2]
#Calculo el importe acumulado del Abono A(1)
if e [2] == 1:
abonoA = (e [1] / 60) * 2
ca = ca + 1
promedioA = abonoA/ca
print ("Importe acumulado Abono A", abonoA)
print ("Cantidad de llamadas Abono A: ", ca)
print ("Promedio por llamada Abono A: ", promedioA)
#calculo el importe acumulado del Abono B(2), si es mas de 5 minutos a $1.5 el minuto,
#sino a 2$ el minuto
#calculo el monto promedio para cada caso
if e [2] == 2 and e [1] > 300: #si la categoria de abono (indice [2]) es igual a 2 (abono B) Y ademas
#la duracion de la llamada es mayor a 5 minutos (300 segundos)
abonoB = (e [1] / 60) * 1.5 #calcula el valor de la llamada x $1.5 y dividido 60 para sacar los minutos
cb15 = cb +1 #ademas incrementa el contador x cada pasada en esta categoria
promediob15 = abonoB/cb15 #finalmente calcula el promedio
print ("Importe acumulado Abono B a $1.5", abonoB) #Muestra por pantalla Importe acumulado Abono B a $1.5
print ("Cantidad de llamadas Abono B a $1.5: ", cb15) #Muestra por pantalla Cantidad de llamadas Abono B a $1.5
print ("Promedio por llamada Abono B a $1.5: ", promediob15) #Muestra por pantalla Promedio por llamada Abono B a $1.5
else: #si laduracion No es mayor a 5 minutos, sigue este camino y vale $2 el minuto
abonoB = (e [1] / 60) * 2 #calcula el valor de la llamada x $2 y dividido 60 para sacar los minutos
cb2 = cb + 1 #ademas incrementa el contador x cada pasada en esta categoria
promediob2 = abonoB/cb2 #finalmente calcula el promedio
print ("Importe acumulado Abono B a $2", abonoB)
print ("Cantidad de llamads Abono B a $2: ", cb2)
print ("Promedio por llamada Abono B a $2: ", promediob2)
#Calculo el importe acumulado del Abono C(3) a $1 x minuto, si pasa 10 minutos
#Se cobra $10
#calculo el monto promedio para cada caso
if e [1] > 600:
abonoC = 10
cinf = cb +1
promediocinf = abonoC/cinf
print ("Importe acumulado Abono C mas de 10 minutos", abonoC)
print ("Cantidad de llamadas Abono C MAS de 10 minutos: ", cinf)
print ("Promedio por llamada Abono C mas de 10 minutos: ", promediocinf)
else:
abonoC = (e [1] / 60)
cm10 = cb + 1
promedioc10 = abonoC/cm10
print ("Importe acumulado Abono C MENOS de 10 minutos: ", abonoC)
print ("Cantidad de llamadas Abono C menos de 10 minutos: ", cm10)
print ("Promedio por llamada Abono C menos de 10 minutos: ", promedioc10)
e = get_llamada()#vuelve a comenzar el ciclo si no enuentra 0
if e [0] == 0:# si el indice "0" (legajo) = 0 lo imprime
print (e[0]) #salio del ciclo al encontrar cero e imprime el indice "0" para
#mostrar que efectivamente salio poque genero un cero
#Calculo de llamadas con duracion maxima
if primeraVez:
primeraVez = False
maximo = e[1]
else:
if e[1] > maximo:
maximo = e[1]
maximo = maximo/60
print ("Llamada con duracion Maxima: ", maximo, "Minutos")
#Calculo llamados de mas de 6 minutos
if e[1]<= 360: #si la duraion de la llamada (indice [1] es mayor a 6 minutos lo muestra
print ("Llamadas de menos de 6 minutos", e[1])
main ()
Resultado
>>> %Run majuma021.py
RESUMEN
(42, 579, 3)
Importe acumulado Abono B a $2 19.3
Cantidad de llamads Abono B a $2: 1
Promedio por llamada Abono B a $2: 19.3
Importe acumulado Abono C MENOS de 10 minutos: 9.65
Cantidad de llamadas Abono C menos de 10 minutos: 1
Promedio por llamada Abono C menos de 10 minutos: 9.65
Llamada con duracion Maxima: 6.016666666666667 Minutos
(6, 361, 2)
Importe acumulado Abono B a $1.5 9.025
Cantidad de llamadas Abono B a $1.5: 1
Promedio por llamada Abono B a $1.5: 9.025
Importe acumulado Abono B a $2 9.025
Cantidad de llamads Abono B a $2: 1
Promedio por llamada Abono B a $2: 19.3
Importe acumulado Abono C MENOS de 10 minutos: 6.016666666666667
Cantidad de llamadas Abono C menos de 10 minutos: 1
Promedio por llamada Abono C menos de 10 minutos: 6.016666666666667
Llamada con duracion Maxima: 3.5 Minutos
Llamadas de menos de 6 minutos 210
(17, 210, 3)
Importe acumulado Abono B a $2 7.0
Cantidad de llamads Abono B a $2: 1
Promedio por llamada Abono B a $2: 7.0
Importe acumulado Abono C MENOS de 10 minutos: 3.5
Cantidad de llamadas Abono C menos de 10 minutos: 1
Promedio por llamada Abono C menos de 10 minutos: 3.5
Llamada con duracion Maxima: 14.866666666666667 Minutos
(28, 892, 2)
Importe acumulado Abono B a $1.5 22.3
Cantidad de llamadas Abono B a $1.5: 1
Promedio por llamada Abono B a $1.5: 22.3
Importe acumulado Abono B a $2 22.3
Cantidad de llamads Abono B a $2: 1
Promedio por llamada Abono B a $2: 7.0
Importe acumulado Abono C mas de 10 minutos 10
Cantidad de llamadas Abono C MAS de 10 minutos: 1
Promedio por llamada Abono C mas de 10 minutos: 10.0
0
Llamada con duracion Maxima: 1.45 Minutos
Llamadas de menos de 6 minutos 87