Help with wheat exercise

Hello everyone,

I have been working on the python “numbers” exercise two, the “grains” exercise and I am a bit lost on how to go about writing the code. It is asking to:


Calculate the number of grains of wheat on a chessboard given that the number on each square doubles.

There once was a wise servant who saved the life of a prince. The king promised to pay whatever the servant could dream up. Knowing that the king loved chess, the servant told the king he would like to have grains of wheat. One grain on the first square of a chess board, with the number of grains doubling on each successive square.

There are 64 squares on a chessboard (where square 1 has one grain, square 2 has two grains, and so on).

Write code that shows:

  • how many grains were on a given square, and
  • the total number of grains on the chessboard

For how many grains were on a given square this is what I got (not even sure if it is even right):

def square(number):
    if number == 1:
        number_wheat = 1
        number_wheat = 2 ** (number - 1)
    # when the square value is not in the acceptable range        
    raise ValueError("square must be between 1 and 64")
    return number_wheat

for the second part of the exercise I don’t have any clue on how to even go about it, I’ve searched everywhere on the internet on how to do the sum of exponents and I am lost.

Any help will do thank you! (please show codes if you have done it!)

One way to approach it: iterate from 1 to 64 and add up the number of grains for each square.

We generally discourage sharing code as a way of “helping” people learn as it’s hard to figure things out when copy pasting. Additionally, if you do want to read other peoples’ code, you can look at the community solutions for the exercise. Using Incognito mode makes this slightly easier. People have a way to publish and share their solutions through the website; it doesn’t need to be repeated on the forums.

Another way to approach it: look at the values for each square in binary

  • square 1: 2 ** (1-1) == 1 or 0001 – note that you don’t need special handling for number == 1
  • square 2: 2 ** (2-1) == 2 or 0010
  • square 3: 2 ** (3-1) == 4 or 0100
  • square 4: 2 ** (4-1) == 8 or 1000

Add up those 4 squares, what do you get in binary? 1111
And that is “(2 raised to the something) minus 1”.