Home

CB 3.7,3.8 - Iteration in Python

Introduction

In this lesson, we will explore the various ways to create loops in Python. Loops are essential for repetitive tasks and are a fundamental concept in programming. We will cover different types of loops, advanced loop techniques, and how to work with lists and dictionaries using loops.

For Loops

# APCSP Pseudo-Code: Iterating Over a List of Fruits

fruits  ["apple", "banana", "cherry"]

FOR EACH fruit IN fruits:
    DISPLAY fruit
END FOR



# Example 1: Simple for loop
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)
apple
banana
cherry

While Loops

# APCSP Pseudo-Code: Using a While Loop to Count and Display Numbers


i  1


WHILE i  5:
    DISPLAY i
    i  i + 1
END WHILE
# Example 2: Simple while loop
i = 1
while i <= 5:
    print(i)
    i += 1
1
2
3
4
5

Looping with Lists and Dictionaries

# APCSP Pseudo-Code: Loop Through a List

numbers  [1, 2, 3, 4]
FOR EACH num IN numbers:
    DISPLAY num
END FOR

# APCSP Pseudo-Code: Loop Through a Dictionary
person  {"name": "aashray", "age": 15, "city": "San Diego"}
FOR EACH key, value IN person:
    DISPLAY key, ":", value
END FOR

# Example 3: Loop through a list
numbers = [1, 2, 3, 4]
for num in numbers:
    print(num)

# Example 4: Loop through a dictionary
person = {"name": "aashray", "age": 15, "city": "San Diego"}
for key, value in person.items():
    print(key, ":", value)

1
2
3
4
name : aashray
age : 15
city : San Diego

Popcorn Hack 1

X = int(input("Enter the number of inputs: "))

sample_dict = {}

for i in range(X):
    key = input("Enter key for input {}: ".format(i+1))
    value = input("Enter value for input {}: ".format(i+1))
    
    if value.replace('.', '', 1).isdigit():
        if '.' in value:
            value = float(value)
        else:
            value = int(value)
    
    sample_dict[key] = value

for key, value in sample_dict.items():
    print(f"{key}: {type(value).__name__}")

Looping with Index Variable

You can use the range function to create a loop with an index variable.

# APCSP Pseudo-Code: Loop Through a List Using Index

lst  [4, 6, 7, 2]
FOR i IN RANGE(LENGTH(lst)):
    DISPLAY "Index: " + STRING(i)
    DISPLAY "Element: " + STRING(GET_ELEMENT(lst, i))
END FOR
# Example 5: Loop with an index variable

lst = [4, 6, 7, 2]

for i in range(len(lst)): # Loop for the number of elements in the list
    print('Index: ' + str(i)) # Print the index
    print('Element: ' + str(lst[i])) # Print the element
Index: 0
Element: 4
Index: 1
Element: 6
Index: 2
Element: 7
Index: 3
Element: 2

Nested If Statements

You can nest conditional statements inside a for loop to execute different code based on conditions.

# APCSP Pseudo-Code: For Loop with Nested If Statements

numbers  [1, 2, 3, 4, 5]
FOR EACH num IN numbers:
    IF num MOD 2 EQUALS 0:
        DISPLAY num, "is even"
    ELSE:
        DISPLAY num, "is odd"
    END IF
END FOR

# Example 6: For loop with nested if statements
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num % 2 == 0:
        print(num, "is even")
    else:
        print(num, "is odd")
1 is odd
2 is even
3 is odd
4 is even
5 is odd

Popcorn Hack 2

nums = []
length = int(input("how many numbers?: "))

for x in range(length):
    x = int(input("Enter a number"))
    
    nums.append(x)

for i in nums:
    if i % 3 == 0:
        print(i, "is divisible by 3")
    else:
        print(i, "is not divisible by 3")
1 is not divisible by 3
2 is not divisible by 3
3 is divisible by 3
4 is not divisible by 3
5 is not divisible by 3

Try/Except

# APCSP Pseudo-Code: Handling Errors in a For Loop

numbers  [1, 2, "three", 4, 0, "five"]
FOR EACH item IN numbers:
    TRY:
        DISPLAY 10 / item
    CATCH ZeroDivisionError:
        DISPLAY "Division by zero"
    CATCH TypeError:
        DISPLAY "Type error"
    END TRY
END FOR

numbers = [1, 2, "three", 4, 0, "five"]

for item in numbers:
    try:
        print(10 / item)
    except ZeroDivisionError: #Type of error: Dividing by Zero
        print("Division by zero")
    except TypeError: #Type of error: Dividing by something that isn't a number
        print("Type error")
10.0
5.0
Type error
2.5
Division by zero
Type error

Popcorn Hack 3

import math

numbers = [2, 5, -2 , 8]

for i in numbers:
    try:
        square_root = math.sqrt(i)
        print(f"The square root of {i} is: {square_root}")
    except AttributeError:
        print(f"Error: Attribute error encountered for: {i}")
    except ValueError:
        print(f"Error: Value error encountered for item: {i}")

The square root of 2 is: 1.4142135623730951
The square root of 5 is: 2.23606797749979
Error: Value error encountered for item: -2
The square root of 8 is: 2.8284271247461903

Continue and Break

# APCSP Pseudo-Code: For Loop with Continue and Break

numbers  [1, 2, 3, 4, 5]
FOR EACH num IN numbers:
 
    IF num EQUALS 3:
        CONTINUE
    IF num EQUALS 5:
        BREAK 
    DISPLAY num
END FOR

# Example 8: For loop with continue and break
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    if num == 3:
        continue  # Skip the number 3
    if num == 5:
        break  # Exit the loop when 5 is encountered
    print(num)
1
2
4

Nested For Loops

# APCSP Pseudo-Code: Nested Loops for Group Names

groups  [["advik", "aashray"], ["akhil", "srijan"]]

FOR EACH pair IN groups:
    FOR EACH person IN pair:
        DISPLAY person + " is cool"
    END FOR
    DISPLAY pair[0] + " and " + pair[1] + " love to code code code"
END FOR

groups = [['advik', 'aashray'], ['akhil', 'srijan']]

for pair in groups:
    for person in pair:
        print(person + ' is cool')
    print(pair[0] + ' and ' + pair[1] + ' love to code code code')
advik is cool
aashray is cool
advik and aashray love to code code code
akhil is cool
srijan is cool
akhil and srijan love to code code code

(OPTIONAL) Popcorn Hack 4

student_info = {
    'Imaad': [15, 'A'],
    'Tanay': [16, 'B'],
    'Arnav': [15, 'C'],
}

for name, details in student_info.items():
    print(f"Student: {name}")
    age, grade = details  

    if age > 18:
        print(f"{name} is above 18 years old.")
        break  

    if grade == 'A':
        print(f"{name} has an 'A' grade.")
        continue  

Student: Imaad
Imaad has an 'A' grade.
Student: Tanay
Student: Arnav

Iteration via Recursion

# APCSP Pseudo-Code: Recursion for Factorial Calculation

FUNCTION factorial(n):
    IF n EQUALS 0:
        RETURN 1
    ELSE IF n LESS THAN 0:
        RETURN "undefined"
    ELSE IF TYPEOF(n) EQUALS "float":
        RETURN "not solvable without gamma function"
    ELSE:
        RETURN n TIMES factorial(n - 1)
    END IF
END FUNCTION

result  CALL factorial(5)
DISPLAY "Factorial of 5 is", result

# Example 9: Recursion for factorial calculation
def factorial(n):
    if n == 0: #Conditions to stop the recursion
        return 1 # 0! is 1
    elif n < 0:
        return "undefined" # Undefined for negative numbers 
    elif isinstance(n, float):
        return "not solvable without gamma function" # Only accept integers
    else:
        return n * factorial(n - 1) #Function calling itself

result = factorial(5)
print("Factorial of 5 is", result)
Factorial of 5 is 120

Homework

students = {}

def is_valid_grade(grade):
    try:
        int_grade = int(grade)
        return True
    except ValueError:
        return False

while True:
    name = input("Enter student name (or 'exit' to stop): ")
    if name.lower() == 'exit':
        break

    grade = input("Enter student grade: ")
    while not is_valid_grade(grade):
        print("Invalid grade. Please enter a valid integer grade.")
        grade = input("Enter student number grade(Don't include percent sign): ")

    students[name] = int(grade)

highest_score = float('-inf')
passing_students = []
failing_students = []

for name, grade in students.items():
    if grade > highest_score:
        highest_score = grade

    if grade >= 60:
        passing_students.append(name)
    else:
        failing_students.append(name)

print("Student grades:", students)
print("Highest score:", highest_score)
print("Passing students:", passing_students)
print("Failing students:", failing_students)

Student grades: {'Imaad': 98, 'Tanay': 97, 'Arnav': 95, 'Test': 30}
Highest score: 98
Passing students: ['Imaad', 'Tanay', 'Arnav']
Failing students: ['Test']
© 2024    •  Powered by Soopr   •  Theme  Moonwalk