# blocks - loops

An introduction to Loops for the Block Editor. #docs

We may want to handle the user’s input multiple times or remain waiting for their input for a long time. We use loops to make sure that our code runs multiple times. These can be found in the **Loops** drawer.

### Forever loops

In the Variables tutorial we utilised a forever loop to create a counter:

![](/static/mb/blocks/lessons/blocks-conditions-2.png)

This allows our BBC micro:bit to wait for the user to do something forever, for example wait for the user to press the correct button as the example above shows. If you were creating a quiz, you may want to loop forever until the user presses the correct button or answers the question.

### Repeat Loops

Repeat loops allow code to happen a certain amount of times. You may want to create a quiz that only gives the user a few tries to get the correct answer, for example. The number can be changed to facilitate your code.

![](/static/mb/blocks/lessons/loops-0.png)

The code above will scroll the message, “Hello world” three times.

### While & Until loops

The ‘repeat while’ loop allows you to continue looping some code until a condition is met. The empty socket next to the while loop allows you to connect some Logic and construct a statement.

![](/static/mb/blocks/lessons/loops-1.png)

The code above will scroll the message, “Press it!”, while the user hasn’t pressed the button.

* Drag a `set item` block from the **Variables** drawer. Click the **down arrow** and click **New Variable**, and type "pressed". Drag a `0` block from **Maths** to set the variable **pressed** to 0.
* Drag a `repeat while` block from the **Loops** drawer and attach an `=` block from the **Logic** drawer. Drag `item` from the **Variables** drawer and click the **down arrow**, select ‘pressed’. Drag a `0` block from Maths and connect it to the other side of the equals. This will carry out the code until ‘pressed’ does not equal 0.
* Add a `show string` block from the **Basic** drawer and change the message to "Press it!"
* Add an `if` block from the **Logic** drawer, connect a `button pressed` block from the **Input** drawer, and add text from the **Basic** drawer. Change this to A to show we are waiting for button A.
* Inside the ‘do’ part of the if statement, add a `set` block from the Variables drawer, click the **down arrow** to change it to **pressed** and drag a `1` from the Maths drawer
* Lastly underneath the while loop, add another `show string` block and fill in the gaps.

Test the code above on actual hardware or on the simulator window.

We can also change the code in subtle ways to have a completely different effect:

![](/static/mb/blocks/lessons/loops-2.png)

This time we have to press the button three times to leave the while loop.

## Tip

You can press the arrow next to a word in a block to change it. For example, you can change Math functions or change a Logic statement.

### Count or for loops

A count loop allows you to loop a certain amount of times and to change a variable as you do so. For example, we can create a simple counting program:

![](/static/mb/blocks/lessons/loops-3.png)

The count loop will repeat a certain amount of times whilst changing a variable. You can click the arrow next to **i** to replace it with any of your own variables. So this program will display numbers 1 to 10.

This loop allows you to repeat code for the amount of times you want to without worrying about manually changing variables. You could use this for a counting program or a timer.

