adds while loop
This commit is contained in:
parent
81fb6551e0
commit
057531b177
|
@ -1072,7 +1072,155 @@ There are a couple of things you should definitely read up on.
|
||||||
|
|
||||||
# While loop
|
# While loop
|
||||||
|
|
||||||
TODO guess the number exercise
|
We started our python journey with fully linear code.
|
||||||
|
Next we saw functions which are first **defined** and called afterwards.
|
||||||
|
Now we'll have a look at **loops**.
|
||||||
|
In python there are **two** types of loops, a **while** and a **for** loop.
|
||||||
|
We'll start with the while loop which I see as a loop in *time*.
|
||||||
|
The for loop is a loop in *space* but we'll get to that one later.
|
||||||
|
|
||||||
|
The concept of a while loop is pretty simple.
|
||||||
|
Code **within** the loop will be executed as long as a **condition** is met.
|
||||||
|
Consider the code below.
|
||||||
|
|
||||||
|
```python3
|
||||||
|
import time
|
||||||
|
|
||||||
|
counter = 0
|
||||||
|
print("before the loop, counter: {}".format(counter))
|
||||||
|
|
||||||
|
while counter <= 10:
|
||||||
|
print("inside the loop, counter: {}".format(counter))
|
||||||
|
counter += 1
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
print("after the loop, counter: {}".format(counter))
|
||||||
|
```
|
||||||
|
|
||||||
|
Two *extra* things might look new to you here.
|
||||||
|
First the `import time` and `time.sleep(1)`, can you tell me what it does?
|
||||||
|
Next the `counter += 1` which is called [incrementing](https://stackoverflow.com/questions/1485841/behaviour-of-increment-and-decrement-operators-in-python).
|
||||||
|
You'll find this feature in most languages.
|
||||||
|
You can think of it's syntax as *counter equals itself plus 1*.
|
||||||
|
The *1* can be any number you want though!
|
||||||
|
|
||||||
|
When learning the `while` [keyword](https://docs.python.org/3/reference/compound_stmts.html#the-while-statement) there is a *second* keyword you should learn.
|
||||||
|
It comes in very handy when constructing [infinite loops](https://en.wikipedia.org/wiki/Infinite_loop).
|
||||||
|
Consider the following code.
|
||||||
|
|
||||||
|
```python3
|
||||||
|
import time
|
||||||
|
|
||||||
|
counter = 0
|
||||||
|
print("before the loop, counter: {}".format(counter))
|
||||||
|
|
||||||
|
while True:
|
||||||
|
print("inside the loop, counter: {}".format(counter))
|
||||||
|
counter += 1
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
print("after the loop, counter: {}".format(counter))
|
||||||
|
```
|
||||||
|
|
||||||
|
The `while True` condition is *always* `True` so the loop will **never** exit!
|
||||||
|
This is what we call an infinite loop.
|
||||||
|
The `break` keyword was added to the language so we can *break out* of a loop.
|
||||||
|
The logic is as follows.
|
||||||
|
|
||||||
|
```python3
|
||||||
|
import time
|
||||||
|
|
||||||
|
counter = 0
|
||||||
|
print("before the loop, counter: {}".format(counter))
|
||||||
|
|
||||||
|
while True:
|
||||||
|
print("inside the loop, counter: {}".format(counter))
|
||||||
|
counter += 1
|
||||||
|
if counter >= 10:
|
||||||
|
print("I'll break now!")
|
||||||
|
break
|
||||||
|
time.sleep(1)
|
||||||
|
|
||||||
|
print("after the loop, counter: {}".format(counter))
|
||||||
|
```
|
||||||
|
|
||||||
|
Infinite loops are a cornerstone of modern programming.
|
||||||
|
While they might look scary, don't overthink it, you'll get used to them very quickly.
|
||||||
|
|
||||||
|
⛑ **When testing out an infinite loop it's sometimes handy to insert a `time.sleep` in it to slow down the execution a bit so you can wrap your head around what's happening.**
|
||||||
|
|
||||||
|
🏃 Try it
|
||||||
|
---
|
||||||
|
|
||||||
|
Go back to the Celsius to Farenheit converter and add a while loop to ensure the user put's in only numbers.
|
||||||
|
|
||||||
|
|
||||||
|
# Coding challenge - Guess the number
|
||||||
|
|
||||||
|
Now that you know how to repeat code execution we can create our first game!
|
||||||
|
Everybody knows the *guess the number* game.
|
||||||
|
The computer chooses a *random* number and the user has to *guess* which number it is.
|
||||||
|
At each try the computer will till you if the user's number is bigger or smaller *than* the one the computer has in mind.
|
||||||
|
The flow of the game could be as follows.
|
||||||
|
|
||||||
|
```
|
||||||
|
I have a number in mind...
|
||||||
|
What's your guess? 50
|
||||||
|
my number is bigger
|
||||||
|
What's your guess? 80
|
||||||
|
my number is smaller
|
||||||
|
What's your guess? blabla
|
||||||
|
that's not a number! try again...
|
||||||
|
What's your guess? 76
|
||||||
|
yes, that's right! you win!
|
||||||
|
bye bye...
|
||||||
|
```
|
||||||
|
|
||||||
|
<details>
|
||||||
|
<summary>Spoiler warning</summary>
|
||||||
|
|
||||||
|
```python3
|
||||||
|
import random
|
||||||
|
|
||||||
|
|
||||||
|
def ask_for_number():
|
||||||
|
result = input("What's your guess? ")
|
||||||
|
if result.isdigit():
|
||||||
|
number = int(result)
|
||||||
|
return number
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
number_to_guess = random.randint(0, 100)
|
||||||
|
print("I have a number in mind...")
|
||||||
|
while True:
|
||||||
|
user_number = ask_for_number()
|
||||||
|
if user_number is None:
|
||||||
|
print("that's not a number! try again...")
|
||||||
|
continue
|
||||||
|
elif number_to_guess == user_number:
|
||||||
|
print("yes, that's right! you win!")
|
||||||
|
break
|
||||||
|
elif number_to_guess > user_number:
|
||||||
|
print("my number is bigger")
|
||||||
|
elif number_to_guess < user_number:
|
||||||
|
print("my number is smaller")
|
||||||
|
print("bye bye...")
|
||||||
|
```
|
||||||
|
|
||||||
|
</details>
|
||||||
|
|
||||||
|
🏃 Try it
|
||||||
|
---
|
||||||
|
|
||||||
|
My *solution* is very basic.
|
||||||
|
Think of some ways to improve on it.
|
||||||
|
Can you limit the number of tries?
|
||||||
|
Can you add a feature to let the user play a *second* game after he/she wins or loses?
|
||||||
|
Coming up with challenges is on of the most *challenging* aspect op learning how to program.
|
||||||
|
Your thought process will send you of into unknown territory and will force you to expand you knowledge!
|
||||||
|
|
||||||
# Lists
|
# Lists
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue