--- title: Flow Control description: The basics of python. We discuss about flow control here. --- ## Comparison Operators | Operator | Meaning | | -------- | ------------------------ | | `==` | Equal to | | `!=` | Not equal to | | `<` | Less than | | `>` | Greater Than | | `<=` | Less than or Equal to | | `>=` | Greater than or Equal to | These operators evaluate to `True` or `False` depending on the values you give them. Examples: ```python >>> 42 == 42 True >>> 40 == 42 False >>> 'hello' == 'hello' True >>> 'hello' == 'Hello' False >>> 'dog' != 'cat' True >>> 42 == 42.0 True >>> 42 == '42' False ``` ## Boolean (Logical) Operators There are three Boolean operators: `and`, `or`, and `not`. The `and` Operator’s _Truth_ Table: | Expression | Evaluates to | | ----------------- | ------------ | | `True and True` | `True` | | `True and False` | `False` | | `False and True` | `False` | | `False and False` | `False` | The `or` Operator’s _Truth_ Table: | Expression | Evaluates to | | ---------------- | ------------ | | `True or True` | `True` | | `True or False` | `True` | | `False or True` | `True` | | `False or False` | `False` | The `not` Operator’s _Truth_ Table: | Expression | Evaluates to | | ----------- | ------------ | | `not True` | `False` | | `not False` | `True` | ## Mixing Operators You can mix boolean and comparison operators: ```python >>> (4 < 5) and (5 < 6) True >>> (4 < 5) and (9 < 6) False >>> (1 == 2) or (2 == 2) True ``` Also, you can mix use multiple Boolean operators in an expression, along with the comparison operators: ```python >>> 2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2 True ``` ## `if` Statements The `if` statement evaluates an expression, and if that expression is `True`, it then executes the following indented code: ```python >>> name = 'Debora' >>> if name == 'Debora': ... print('Hi, Debora') ... # Hi, Debora >>> if name != 'George': ... print('You are not George') ... # You are not George ``` The `else` statement executes only if the evaluation of the `if` and all the `elif` expressions are `False`: ```python >>> name = 'Debora' >>> if name == 'George': ... print('Hi, George.') ... else: ... print('You are not George') ... # You are not George ``` Only after the `if` statement expression is `False`, the `elif` statement is evaluated and executed: ```python >>> name = 'George' >>> if name == 'Debora': ... print('Hi Debora!') ... elif name == 'George': ... print('Hi George!') ... # Hi George! ``` the `elif` and `else` parts are optional. ```python >>> name = 'Antony' >>> if name == 'Debora': ... print('Hi Debora!') ... elif name == 'George': ... print('Hi George!') ... else: ... print('Who are you?') ... # Who are you? ``` ## Ternary Conditional Operator Many programming languages have a ternary operator, which define a conditional expression. The most common usage is to make a terse, simple conditional assignment statement. In other words, it offers one-line code to evaluate the first expression if the condition is true, and otherwise it evaluates the second expression. ``` <expression1> if <condition> else <expression2> ``` Example: ```python >>> age = 15 >>> # this if statement: >>> if age < 18: ... print('kid') ... else: ... print('adult') ... # output: kid >>> # is equivalent to this ternary operator: >>> print('kid' if age < 18 else 'adult') # output: kid ``` Ternary operators can be chained: ```python >>> age = 15 >>> # this ternary operator: >>> print('kid' if age < 13 else 'teen' if age < 18 else 'adult') >>> # is equivalent to this if statement: >>> if age < 18: ... if age < 13: ... print('kid') ... else: ... print('teen') ... else: ... print('adult') ... # output: teen ``` :::info :bulb: Note that Python introduce [`match`](https://learnpython.com/blog/python-match-case-statement/) statement as another control statement in Python 3.10 to implement `switch` statement ::: ## `while` Loop Statements The while statement is used for repeated execution as long as an expression is `True`: ```python >>> spam = 0 >>> while spam < 5: ... print('Hello, world.') ... spam = spam + 1 ... # Hello, world. # Hello, world. # Hello, world. # Hello, world. # Hello, world. ``` ## `break` Statements If the execution reaches a `break` statement, it immediately exits the `while` loop’s clause: ```python >>> while True: ... name = input('Please type your name: ') ... if name == 'your name': ... break ... >>> print('Thank you!') # Please type your name: your name # Thank you! ``` It also works for the `for` loop ```python >>> for i in range(5): ... if i == 3: ... break ... print(i) # 0 # 1 # 2 ``` ## `continue` Statements When the program execution reaches a `continue` statement, the program execution immediately jumps back to the start of the loop. ```python >>> while True: ... name = input('Who are you? ') ... if name != 'Joe': ... continue ... password = input('Password? (It is a fish.): ') ... if password == 'swordfish': ... break ... >>> print('Access granted.') # Who are you? Charles # Who are you? Debora # Who are you? Joe # Password? (It is a fish.): swordfish # Access granted. ``` It also works for the `For` loop ```python >>> for i in range(5): ... if i == 3: ... continue ... print(i) # 0 # 1 # 2 # 4 ``` ## `For` loop The `for` loop iterates over an iterable object like `range()`, `list`, `tuple`, `dictionary`, `set` or `string`: ```python >>> pets = ['Bella', 'Milo', 'Loki'] >>> for pet in pets: ... print(pet) ... # Bella # Milo # Loki ``` ## The `range()` function The `range()` function returns a sequence of numbers. It starts from 0, increments by 1, and stops before a specified number: ```python >>> for i in range(5): ... print('Will stop at 5! or 4 ?'+str(i)) ... # Will stop at 5! or 4? 0 # Will stop at 5! or 4? 1 # Will stop at 5! or 4? 2 # Will stop at 5! or 4? 3 # Will stop at 5! or 4? 4 ``` The `range()` function can also modify it's 3 defaults arguments. The first two will be the `start` and `stop` values, and the third will be the `step` argument. The step is the amount that the variable is increased by after each iteration. ```python # range(start, stop, step) >>> for i in range(0, 10, 2): ... print(i) ... # 0 # 2 # 4 # 6 # 8 ``` You can even use a negative number for the step argument to make the for loop count down instead of up. ```python >>> for i in range(5, -1, -1): ... print(i) ... # 5 # 4 # 3 # 2 # 1 # 0 ``` ## Ending a Program with `sys.exit()` `exit()` function allows exiting Python. ```python >>> import sys >>> while True: ... feedback = input('Type exit to exit: ') ... if feedback == 'exit': ... print('You typed '+ feedback) ... sys.exit() ... # Type exit to exit: open # Type exit to exit: close # Type exit to exit: exit # You typed exit ``` ## The [random](https://docs.python.org/3/library/random.html) module ## `seed()` The `seed` method is used to initialize the random number generator. ```python >>> random.seed(1) >>> random.random() # 0.13436424411240122 ``` Setting the seed to a number will always return the same random number: ```python >>> random.seed(1) >>> random.random() # 0.13436424411240122 >>> random.seed(1) >>> random.random() # 0.13436424411240122 >>> random.seed(1) >>> random.random() # 0.13436424411240122 >>> random.seed(1) >>> random.random() # 0.13436424411240122 >>> random.seed(1) >>> random.random() # 0.13436424411240122 ``` ## `randint()` ```python random.randint(start: int, stop: int) ``` This method returns a random number between a given start and stop parameters: ```python >>> random.randint(1, 5) # 3 >>> random.randint(1, 5) # 2 >>> random.randint(1, 5) # 5 >>> random.randint(1, 5) # 1 >>> random.randint(1, 5) # 3 >>> random.randint(1, 5) # 1 ``` ## `shuffle()` The `shuffle` method takes in an iterable and shuffle it: ```python >>> my_list = [1, 2, 3, 4] >>> random.shuffle(my_list) >>> my_list # [1, 4, 3, 2] >>> random.shuffle(my_list) >>> my_list # [2, 4, 3, 1] >>> random.shuffle(my_list) >>> my_list # [4, 2, 3, 1] ```