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
|
||||
|
||||
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
|
||||
|
||||
|
|
Loading…
Reference in New Issue