서점을 나타내는 사전이 있습니다. 키는 책 제목을 나타내고 값은 존재하는 책의 부수를 나타냅니다. 서점에서 책이 판매되면 책의 부수는 감소해야 합니다.
판매된 책의 부수를 줄이는 코드를 작성했지만 업데이트 후 사전을 인쇄할 때 업데이트된 사전이 아닌 초기 사전을 가져옵니다.
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
가능한 가장 간단한 방법으로 문제를 해결하고 싶습니다. 제가 코드에서 어떤 논리나 줄을 놓쳤나요?
키를 참조하여 값에서 직접 추상화할 수도 있습니다. 제 생각에는 이 방법이 더 간단합니다.
>>> books = {}
>>> books['book'] = 3
>>> books['book'] -= 1
>>> books
{'book': 2}
귀하의 경우:
book_shop[ch1] -= 1
사전에서 업데이트되지 않는 book_shop.values()[i]
목록을 수정하고 있습니다. values()` 메서드를 호출할 때마다 딕셔너리에서 사용 가능한 값을 제공하며 여기서는 딕셔너리의 데이터를 수정하지 않습니다.
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)