# /// script # requires-python = ">=3.10" # dependencies = [ # "marimo", # ] # /// import marimo __generated_with = "0.10.14" app = marimo.App() @app.cell def _(): import marimo as mo return (mo,) @app.cell(hide_code=True) def _(mo): mo.md( """ # 🔄 Loops in Python Let's explore how Python helps us repeat tasks efficiently with loops! ## Types of Loops Python has two main types of loops: ```python # For loop - when you know how many times to repeat for i in range(5): print(i) # While loop - when you don't know how many repetitions while condition: do_something() ``` Let's start with a simple list to explore loops. """ ) return @app.cell def _(): sample_fruits = ["apple", "banana", "orange", "grape"] return (sample_fruits,) @app.cell(hide_code=True) def _(mo): mo.md( """ ## For Loop Basics The for loop is perfect for iterating over sequences. Try changing the `sample_fruits` list above and see how the output changes. """ ) return @app.cell def _(sample_fruits): def _print_fruits(): for _fruit in sample_fruits: print(f"I like {_fruit}s!") _print_fruits() return @app.cell(hide_code=True) def _(mo): mo.md(""" ## Using enumerate() When you need both the item and its position, use enumerate(): """) return @app.cell def _(sample_fruits): def _print_enumerated(): for _idx, _fruit in enumerate(sample_fruits): print(f"{_idx + 1}. {_fruit}") _print_enumerated() return @app.cell(hide_code=True) def _(mo): mo.md(""" ## Range in Loops range() is a powerful function for generating sequences of numbers: """) return @app.cell def _(): def _demonstrate_range(): print("range(5):", list(range(5))) print("range(2, 5):", list(range(2, 5))) print("range(0, 10, 2):", list(range(0, 10, 2))) _demonstrate_range() return @app.cell(hide_code=True) def _(mo): mo.md("""## While Loop Basics While loops continue as long as a condition is `True`.""") return @app.cell def _(): def _count_up(): _count = 0 while _count < 5: print(f"Count is {_count}") _count += 1 _count_up() return @app.cell(hide_code=True) def _(mo): mo.md(""" ## Loop Control Statements Python provides several ways to control loop execution: - `break`: Exit the loop immediately - `continue`: Skip to the next iteration - `else`: Execute when loop completes normally """) return @app.cell def _(): def _demonstrate_break(): for _i in range(1, 6): if _i == 4: break print(_i) print("Loop ended early!") _demonstrate_break() return @app.cell def _(): def _demonstrate_continue(): for _i in range(1, 6): if _i == 3: continue print(_i) _demonstrate_continue() return @app.cell(hide_code=True) def _(mo): mo.md(""" ## Practical Loop Patterns Here are some common patterns you'll use with loops: ```python # Pattern 1: Accumulator sum = 0 for num in [1, 2, 3, 4, 5]: sum += num # Pattern 2: Search found = False for item in items: if condition: found = True break # Pattern 3: Filter filtered = [] for item in items: if condition: filtered.append(item) ``` """) return @app.cell(hide_code=True) def _(mo): callout_text = mo.md(""" ## Loop Like a Pro! Next Steps: - Practice using different types of loops - Experiment with loop control statements - Try combining loops with lists and conditions Keep iterating! 🔄✨ """) mo.callout(callout_text, kind="success") return (callout_text,) if __name__ == "__main__": app.run()