Tengo un diccionario que representa una librería. Las claves representan el título del libro y los valores representan el número de ejemplares del libro presente. Cuando se venden libros de la tienda, el número de ejemplares del libro debe disminuir.
He escrito un código para disminuir el número de ejemplares del libro vendido, pero al imprimir el diccionario después de la actualización, obtengo el diccionario inicial y no el actualizado.
n=input("Enter number of books in shop:")
book_shop={} #Creating a dictionary book_shop
#Entering elements into the dictionary
for i in range(n):
book_title=raw_input("Enter book title")
book_no=input("Enter no of copies")
book_shop[book_title]=book_no
ch=raw_input("Do you want to sell")
if (ch in 'yesYES'):
for i in range(n):
print"which book you want to sell??",book_shop
ch1=raw_input("choice")
if(book_shop.keys()[i]==ch1):
book_shop.keys()[i]=(book_shop.values()[i]-1)
break
print book_shop
Me gustaría resolver el problema de la forma más sencilla posible. ¿Me he perdido alguna lógica o alguna línea del código?
Bueno, usted podría restar directamente del valor con sólo hacer referencia a la clave. Lo que en mi opinión es más sencillo.
>>> books = {}
>>> books['book'] = 3
>>> books['book'] -= 1
>>> books
{'book': 2}
En tu caso:
book_shop[ch1] -= 1
Estás modificando la lista libro_tienda.valores()[i]
, que no se está actualizando en el diccionario. Cada vez que llame al método values()
, le dará los valores disponibles en el diccionario, y aquí no está modificando los datos del diccionario.
n = eval(input('Num books: '))
books = {}
for i in range(n):
titlez = input("Enter Title: ")
copy = eval(input("Num of copies: "))
books[titlez] = copy
prob = input('Sell a book; enter YES or NO: ')
if prob == 'YES' or 'yes':
choice = input('Enter book title: ')
if choice in books:
init_num = books[choice]
init_num -= 1
books[choice] = init_num
print(books)