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.

2 Likes

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.

1 Like

Why is my code not working? This is the error message that I keep receiving:
File “python”, line 19
for items in food:
^
IndentationError: unindent does not match any outer indentation level

And this is my code:
code

I had the same problem/error message on one of the previous exercises and had to just ask for the solution, which looked to me to be the same as the code I had written. Thanks.

1 Like

The editor in these courses is very sensitive about indentation (for Python, at least). Sometimes it seems impossible to proceed without un-indenting everything within a function to the left margin, then manually restoring the indentations one tab or two spaces (but don’t mix tabs & spaces) per level.

1 Like

This problem has driven me nuts, i had actually done the syntax as described but it would not work… WWWWWWWWHHHHHHHHHHHYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY, SORT IT OUT CODECADEMY

i just cant believe the frustration that my code was the solution

Isn´t the solution answer code wrong?

The indicated answer is:
def compute_bill(food):
total = 0
for item in food:
total = total + prices[item]
return total

Shouldn´t it be?

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

instead?

I tried both with the print command and using the defined function. And the proposed solution just give the prices dictionary answer even when I add another dictionary as the argument. Using food[item] instead of prices[item] works for any dictionary in the defined function.

Can i see your function calls?

The purpose of compute_bill is to calculate the bill of a customer, so food is a list of items the customer would like to buy/purchase. Customers can’t determine the price