Tenho um dicionário que representa uma livraria. As chaves representam o título do livro e os valores representam o número de exemplares do livro presentes. Quando os livros são vendidos na livraria, o número de exemplares do livro deve diminuir.
Escrevi um código para diminuir o número de cópias do livro vendido, mas ao imprimir o dicionário após a actualização, recebo o dicionário inicial e não o 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
Gostaria de resolver o problema da forma mais simples possível. Será que me escapou alguma lógica ou alguma linha no código?
Bem, poderia subtrair-se directamente ao valor apenas referenciando a chave. O que, na minha opinião, é mais simples.
>>> books = {}
>>> books['book'] = 3
>>> books['book'] -= 1
>>> books
{'book': 2}
No seu caso:
book_shop[ch1] -= 1
Está a modificar a lista book_shop.values()[i]
, que não está a ser actualizada no dicionário. Sempre que chamar o método values()
, este dar-lhe-á os valores disponíveis no dicionário, e aqui não está a modificar os dados do dicionário.
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)