FAQ: Learn Python: A Day at the Supermarket - Making a Purchase



This community-built FAQ covers the “Making a Purchase” exercise in Codecademy’s lessons on Python.

FAQs for the Codecademy Python exercise Making a Purchase:

Join the Discussion. We Want to Hear From You!

Have a new question or can answer someone else’s? Reply (reply) to an existing thread!

Agree with a comment or answer? Like (like) to up-vote the contribution!

Need broader help or resources about Python in general? Go here!

Want to take the conversation in a totally different direction? Join our wider discussions.

Learn more about how to use this guide.

Found a bug? Report it!

Have a question about your account, billing, Pro, or Pro Intensive? Reach out to our support team!

None of the above? Find out where to ask other questions here!


Other FAQs

The following are links to additional questions that our community has asked about this exercise:

  • This list will contain other frequently asked questions that aren’t quite as popular as the ones above.
  • Currently there have not been enough questions asked and answered about this exercise to populate this FAQ section.
  • This FAQ is built and maintained by you, the Codecademy community – help yourself and other learners like you by contributing!

Not seeing your question? It may still have been asked before – try (search) in the top-right of this page. Still can’t find it? Ask it below by hitting the reply button below this post (reply).


A post was split to a new topic: Question about food parameter


3 posts were split to a new topic: Why is My Code Not Passed?


Why is it wrong to answer this question as follows?

def compute_bill(food):
total = 0
for item in food:
total += prices[key]
return total

I don’t understand why that is returning the wrong results. Thank you.


NB: I don’t know how to format my answer to include the indentations. Assume my indentations were correct.


Hi, I would like to understand more about the syntax of the For loop.

It says in the exercise BeFORe that it goes as for x in (list or dictionary):

Is the “x” just a general nomination for keys? Why can I name it differently and the code still works the same?

As for my principal doubt, and very related to the few questions above:
in this exercise you had a for item in food.
Why it did work if food is an argument in a function and not a list?


Because the object we iterate doesn’t change just because we give it a new name.

When iterating a list,

for item in [1,2,3,4,5]:
    print (item)

will print the items in the list;

for i in range(len([1,2,3,4,5])):
    print (i)

will print the indices of the list;

for i, x in enumerate([1,2,3,4,5]):
    print (i, x)

will print both index and value.

When iterating a dictionary,

x = {'one': 1, 'two': 2, 'three': 3, 'four': 4, 'five': 5}
for key in x:
    print (key, x[key])

will print key, value

In any case, the name we use is arbitrary. In fairness to the reader useful and meaningful names are favored. Me, I’m only big on names when they matter.

When we write a parameter in a function definition header, the name is arbitrary and local only to the function body (the block). However, since it is a list we are passing as the argument when calling the function, then only a reference to the list is given to the parameter.

The function can access the list wherever it is by using the name given in the parameter rather than the name it may have outside of the function. The function doesn’t have to know its name, and better it doesn’t. That would be hardcoding data references inside a function, which is never a good idea.

Name a data structure in a function and it has to exist. Pass a data structure reference and for the purpose of the function, it does exist. Parameterless functions are all fine and good, just so long as they don’t access global objects.