Clase Numero 04 – Tuplas

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

Leave a Reply

Your email address will not be published. Required fields are marked *