Question: Write a program to help you manage your sales. It should keep asking for an item that has been sold, and how many were sold, until a blank item is entered. It should then print out how many of each item were sold that day.
Code:
Items = {} item = input('Item: ') while item != '': number = int(input('Number sold: ')) if item in Items: Items[item] = Items[item] + number else: Items[item] = number item = input('Item: ') print('Total sales for today:') for stuff in Items.values(): print(f'{item} : {stuff}')
This is the code and I’m doing something here that doesn’t print all final values in one go.
The output should look like this:
Advertisement
Answer
Error
The error in your code seems to be in your for-loop as I don’t see where the variable item
comes from in your f-string. So, I’d recommend you write the for loop as something like:
for item in Items: print(f'{item}: {Items[item]}')
Recommended Solution
Since you posted a question, I thought I’d also give you a way in which I’d solve this. Use the defaultdict
from the collections
module and set it to give a default value of 0
to every new key.
from collections import defaultdict my_dict = default_dict(lambda: 0)
This helps so that you can just focus on adding the new quantities without worrying about whether a matching key already exists.
So, the new code would look something like this:
from collections import defaultdict def main(): items = defaultdict(lambda: 0) while True: item = input('Enter an item: ').lower() if item == '': break quantity = int(input('Enter the quantity of the item: ')) items[item] += quantity print('n') # make the console output cleaner to look at for item in items: print(f'{item}: {items[item]}') if __name__ == '__main__': main()