Python - Suma de valores en diccionarios.

 
Vista:
Imágen de perfil de Jorge Alberto
Val: 137
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Suma de valores en diccionarios.

Publicado por Jorge Alberto (41 intervenciones) el 25/03/2021 23:06:05
Hola. ¿Qué tal? Estoy con un ejercicio de facultad que no puedo solucionar. Dice lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# Escribir una clase Caja para representar cuánto dinero hay en una caja de un
# negocio, desglosado por tipo de billete (por ejemplo, en el quiosco de la esquina hay 6 billetes
# de 500 pesos, 7 de 100 pesos y 4 monedas de 2 pesos). Las denominaciones permitidas son 1, 2,
# 5, 10, 20, 50, 100, 200, 500 y 1000 pesos. Debe comportarse según el siguiente ejemplo:
 
    # >>> c = Caja({500: 6, 300: 7, 2: 4})
    # ValueError: Denominación "300" no permitida
 
    # >>> c = Caja({500: 6, 100: 7, 2: 4})
    # >>> str(c)
    # 'Caja {500: 6, 100: 7, 2: 4} total: 3708 pesos'
 
    # >>> c.agregar({250: 2})
    # ValueError: Denominación "250" no permitida
 
    # >>> c.agregar({50: 2, 2: 1})
    # >>> str(c)
    # 'Caja {500: 6, 100: 7, 50: 2, 2: 5} total: 3810 pesos'
 
    # >>> c.quitar({50: 3, 100: 1})
    # ValueError: No hay suficientes billetes de denominación "50"
 
    # >>> c.quitar({50: 2, 100: 1})
    # 200
    # >>> str(c)
    # 'Caja {500: 6, 100: 6, 2: 5} total: 3610 pesos'

Por ahora, el código que implementé es:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
denominaciones = [1,2,5,10,20,50,100,200,500,1000]
 
class Caja:
 
    def __init__(self,diccionario):
        self.diccionario = diccionario
        self.keys = diccionario.keys()
        self.values = diccionario.values()
        for i in self.keys:         # Si la denominación no esta en 'denominaciones' arroja el error
            if i not in denominaciones:
                raise ValueError('Denominación "{}" no permitida'.format(i))
 
    def __str__(self):
        # Converción a cadena de texto
        return 'Caja {} total: xxxx pesos'.format(self.diccionario)     # Falta agregar el total.

El problema esta cuando intento calcular el total para imprimirlo. No sé cómo hacerlo. Lo que intenté es:

1
2
3
4
5
6
7
8
9
10
11
def __init__(self,diccionario):
        self.diccionario = diccionario
        self.keys = diccionario.keys()
        self.values = diccionario.values()
        for i in self.keys:         # Si la denominación no esta en 'denominaciones' arroja el error
            if i not in denominaciones:
                raise ValueError('Denominación "{}" no permitida'.format(i))
# ---------- Agrego estas líneas ----------------
        total = 0
        for i in range(len(self.diccionario)):
            total += self.keys[i]*self.values[i]

Pero cuando intento implementarlo, me sale:
'dict_keys' object is not subscriptable

No sé cómo seguir. Algo parecido me sucede cuando tengo que implementar ".agregar". El error a arrojar cuando la denominación no existe es sencillo, pero no sé cómo sumar cuando el valor sí existe.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.668
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Suma de valores en diccionarios.

Publicado por tincopasan (788 intervenciones) el 26/03/2021 01:11:22
hay muchas cosas que no entiendo que querés hacer, así que no las modifico, solo lo necesario para que de el resultado buscado:
1
2
3
4
5
6
7
8
9
10
11
12
13
class Caja:
 
    def __init__(self,diccionario):
        self.diccionario = diccionario
        #etc.
 
        self.total = 0
        for k,v in diccionario.items():
            self.total += k*v
 
    def __str__(self):
        # Converción a cadena de texto
        return f'Caja {self.diccionario} total: {self.total} pesos'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de Jorge Alberto
Val: 137
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Suma de valores en diccionarios.

Publicado por Jorge Alberto (41 intervenciones) el 26/03/2021 01:18:33
Perfecto. Ahora funciona. Sigo con el ejercicio y cualquier cosa pregunto.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar