Contents

Python Quick Guide - Step 2 Control Flow (3) - Loops (1)

Info
  • This course is designed to help you learn the basics of Python programming as quickly as possible through hands-on practice.
  • The “Style Guide” sections primarily cover guidelines from PEP8 for writing clean Python code.
  • You can run and see the results of each code example.
    Feel free to experiment with the code - reloading the page will reset the content.

This is a continuation of “Step 2 Control Flow.”

Loops are control flow structures that allow you to execute the same process multiple times.
Python has two main types of loops:

  1. for loop: Repeats a process for each element in a list or other iterable
  2. while loop: Repeats a process as long as a condition is True

The for loop sequentially executes a process for each element in an iterable object, such as a list.

for statement
for variable in iterable object: loop process
  • In the for fruit in fruits line, each element in the fruits list is assigned to the fruit variable in sequence
  • The indented block below is executed repeatedly for each element in fruits
flowchart TD
    START[Start] --> INIT["fruits = ['apple', 'banana', 'orange']"]
    INIT --> FOR{"for fruit in fruits"}
    FOR -->|No more elements| END["Loop ended"]
    FOR -->|Next element exists| LOOP_BODY["Loop process\n(print(fruit))"]
    LOOP_BODY --> FOR

linkStyle 2 stroke:red,stroke-width:2px;
linkStyle 3 stroke:green,stroke-width:2px;
📚Exercise

Output the number of characters in each element of fruits, and then output the total number of characters.
(The length of a string, like lists, can be obtained using the len function)

Sample Solution

Objects that can be used in looping constructs like for loops are called iterables.
In Python, the following objects are treated as iterables:

  • Lists: ["apple", "banana", "orange"]
  • Tuples: (1, 2, 3)
  • Sets: {1, 2, 3}
  • Dictionaries: {"name": "Alice", "age": 25}
  • Strings: "Python"
  • Return values of the range function: range(5)

Dictionaries are also iterables. When used in a for loop, they return the keys.
The following dictionary methods also return iterable objects:

  • .keys() method: Returns the list of keys
  • .values() method: Returns the list of values
  • .items() method: Returns the list of key-value pairs
  • In the .items() method example above, unpacking is used to break down the key-value pair into separate key and value variables.

Strings are also a type of iterable object.
When used in a for loop, they allow processing one character at a time.

The range function generates a sequence of numbers in a specified range.
The range function has multiple usage patterns similar to list slicing:

Usage Function
range(stop) Generate integers from 0 to (stop - 1) in sequence
range(start, stop) Generate integers from start to (stop - 1) in sequence
range(start, stop, step) Generate integers from start to (stop - 1) with the specified step interval
  • range(stop): Generate integers from 0 to (stop - 1) in sequence
  • range(start, stop): Generate integers from start to (stop - 1) in sequence
  • range(start, stop, step): Generate integers from start to (stop - 1) with the specified step interval

Like slicing, specifying a negative number for step generates numbers in reverse order.

Memory Efficiency of range
The range function returns a “lazy evaluation” object that generates values as needed, rather than creating a list of numbers.
This allows it to handle large ranges of numbers while keeping memory usage low.
📚Exercise

Create a program that outputs numbers from 1 to 10 using a for loop and the range function.

Sample Solution
📚Exercise

Output a multiplication table like the one below.
(Hint: Use nested for loops)

1 x 1 = 1
1 x 2 = 2
...
9 x 9 = 81
Sample Solution

The break statement allows you to terminate a loop early and exit from it.

break statement
for variable in iterable object: if condition: break # Exit the loop normal loop process

In this example, the fruits list is processed sequentially, but when “banana” is found, the loop is terminated by the break statement. Therefore, “orange” and subsequent elements are not processed.

flowchart TD
    START[Start] --> INIT["fruits = ['apple', 'banana', 'orange', 'grape', 'melon']"]
    INIT --> FOR{"for fruit in fruits"}

    FOR -->|No more elements| END["Loop ended"]
    FOR -->|Next element exists| ELEMENT_PROCESS

    subgraph ELEMENT_PROCESS[Loop Process]
        LOOP_START["Loop start"] --> CHECK{"if fruit == 'banana'"}
        CHECK -->|No| NEXT["Proceed to next process"]
        CHECK -->|Yes| BREAK["break\n(terminate loop)"]
    end

    NEXT --> FOR
    BREAK --> END

    style BREAK fill:#ffeb3b,stroke:#333,stroke-width:2px

    linkStyle 2 stroke:red,stroke-width:2px;
    linkStyle 3 stroke:green,stroke-width:2px;
    linkStyle 5 stroke:red,stroke-width:2px;
    linkStyle 6 stroke:green,stroke-width:2px;
📚Exercise

Create a program that finds the first even number in a list and outputs it, then terminates the process.

  1. Prepare a list numbers = [15, 7, 3, 9, 4, 11, 2]
  2. Check each value in the list sequentially and display the first even number found
  3. Terminate the loop when an even number is found
Sample Solution

Next, let’s improve the program to display “No even numbers exist” if no even numbers are found.
(Hint: Create a variable that becomes True if an even number exists, and False otherwise.)

Sample Solution

The continue statement is a control flow statement used to skip the remaining part of the current loop iteration and move to the next iteration.
Unlike break which terminates the entire loop, continue only skips the current iteration.

continue statement
for variable in iterable object: if condition: continue # Skip to the next iteration normal loop process

In this example, each number in the list is checked, and if it’s even, the continue statement skips further processing. As a result, only odd numbers are displayed.

flowchart TD
    START[Start] --> INIT["numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"]
    INIT --> FOR{"for num in numbers"}

    FOR -->|No more elements| END["Loop ended"]
    FOR -->|Next element exists| ELEMENT_PROCESS

    subgraph ELEMENT_PROCESS[Loop Process]
        LOOP_START["Loop start"] --> CHECK{"if num % 2 == 0"}
        CHECK -->|No| NEXT["Proceed to next process\n(print(f'Number: {num}'))"]
        CHECK -->|Yes| CONTINUE["continue\n(to next iteration)"]
    end

    NEXT --> FOR
    CONTINUE --> FOR

    style CONTINUE fill:#80deea,stroke:#333,stroke-width:2px

    linkStyle 2 stroke:red,stroke-width:2px;
    linkStyle 3 stroke:green,stroke-width:2px;
    linkStyle 5 stroke:red,stroke-width:2px;
    linkStyle 6 stroke:green,stroke-width:2px;

Difference between break and continue

Keyword Function Target
break Completely terminates a loop Entire loop
continue Skips the current iteration and moves to the next Current iteration
📚Exercise

Create a program that outputs only numbers that are neither multiples of 3 nor multiples of 5 from the numbers 1 to 20 using the continue statement.

Sample Solution

When loops are nested, break and continue statements behave as follows:

  • A break statement terminates only the innermost loop containing it
  • A continue statement skips only the current iteration of the innermost loop containing it
📚Exercise

Create a multiplication table that excludes patterns with 3 x ? or ? x 3.

Example Solution

The enumerate function provides both the index (position) and value for each element in an iterable.

You can also change the starting value of the index:

The zip function is useful for processing multiple iterables simultaneously.
(Unlike nested for loops, it’s used when you only need pairs at the same position)

Note that zip stops when the shortest iterable is exhausted.

You can add an else clause to a for loop. The else block is executed when the loop completes normally (i.e., was not terminated by a break statement).

As shown above, the for-else statement allows you to concisely write code to search for an element in a list and handle the case when it’s not found.

📚Exercise

Rewrite the following exercise (which we handled with break earlier) using the for-else statement to eliminate the flag variable:

  1. Prepare a list numbers = [15, 7, 3, 9, 5, 11, 3]
  2. Check each value in the list sequentially and display the first even number found
  3. Terminate the loop when an even number is found
  4. Output “No even numbers exist” if no even numbers are found
Sample Solution
Summary
  • for loops perform repeated processing for each element in an iterable (list, string, tuple, dictionary, etc.)
  • The range function allows repeated processing over a specified range of numbers
  • break statements terminate loops, while continue statements skip iterations
  • The enumerate function lets you get both the index and element simultaneously
  • The zip function allows parallel processing of multiple iterables
  • The for-else construct lets you specify what to do when a loop completes normally (without being broken)
📚Comprehensive Exercise: Student Grade Processing System

Create a program that processes student grade data according to the following requirements:

  1. Use the following student grade data:

    students = [
        {"name": "John", "score": 85},
        {"name": "Alice", "score": 72},
        {"name": "Michael", "score": 93},
        {"name": "Emily", "score": 68},
        {"name": "Robert", "score": 76}
    ]
  2. Calculate and display the following information:

    • Average score of all students
    • Highest score and the name of that student
    • List of students with scores of 80 or higher (in the format “Name: Score”)
    • Number of students who passed (70 or higher) and failed
  3. Format the output to be easily readable

Sample Solution

Related Content