Python_Primer / app.py
eaglelandsonce's picture
Update app.py
93cfcaa verified
import streamlit as st
import io
import sys
# Set up the layout of the app
st.title("Intro to Python: Interactive Learning")
st.write("Welcome to the Python learning platform! Explore the core concepts of Python programming with practical examples, and test them interactively.")
# Helper function to create an expanded explanation
def create_explanation(title, content):
with st.expander(f"Explanation: {title}"):
st.markdown(content)
# Helper function to execute code and capture output
def run_code(user_code):
# Create StringIO object to capture output
output = io.StringIO()
# Redirect stdout to capture print statements
sys.stdout = output
try:
# Execute the user's code
exec(user_code, {})
# Return the captured output
result = output.getvalue()
return result, None
except Exception as e:
return None, str(e)
finally:
# Reset stdout
sys.stdout = sys.__stdout__
# 1. Basic Syntax and Variables
st.subheader("1. Basic Syntax and Variables")
code1 = '''name = "Alice"
age = 25
height = 5.6
print(f"My name is {name}, I am {age} years old and {height} feet tall.")
'''
st.code(code1, language="python")
create_explanation("Basic Syntax and Variables", """
In this example, we introduce **variables**, which are placeholders for storing data in Python. We create three variables:
- `name` stores a string (`"Alice"`),
- `age` stores an integer (`25`),
- `height` stores a float (`5.6`).
Next, we use **formatted string literals** (also known as f-strings) to combine these variables into a sentence and print it. The `print()` function outputs the message to the console. This is the fundamental way of creating variables and displaying information in Python.
""")
# Try it yourself box
st.write("### Try it Yourself:")
user_code1 = st.text_area("Example 1: Paste or modify the code and hit 'Run' to see the output.", value=code1, height=150, key="1")
if st.button("Run Example 1 Code"):
result, error = run_code(user_code1)
if result:
st.success("Code ran successfully!")
st.text(result)
elif error:
st.error(f"Error: {error}")
# 2. Control Flow: If-Else Statements
st.subheader("2. Control Flow: If-Else Statements")
code2 = '''temperature = 30
if temperature > 25:
print("It's a hot day.")
else:
print("It's a cool day.")
'''
st.code(code2, language="python")
create_explanation("Control Flow: If-Else Statements", """
**Control flow** allows you to make decisions in your code using conditions. The `if-else` statement checks if a condition is true:
- In this example, the condition is whether `temperature` is greater than `25`.
- If the condition is true, Python will execute the first block of code (`print("It's a hot day.")`).
- If the condition is false, Python executes the second block (`print("It's a cool day.")`).
Conditions use **comparison operators** like `>`, `<`, `==`, etc. Control flow is essential for writing dynamic, decision-based programs.
""")
# Try it yourself box
st.write("### Try it Yourself:")
user_code2 = st.text_area("Example 2: Paste or modify the code and hit 'Run' to see the output.", value=code2, height=150, key="2")
if st.button("Run Example 2 Code"):
result, error = run_code(user_code2)
if result:
st.success("Code ran successfully!")
st.text(result)
elif error:
st.error(f"Error: {error}")
# 3. Loops: For and While
st.subheader("3. Loops: For and While")
code3 = '''numbers = [1, 2, 3, 4, 5]
for number in numbers:
print(f"Number: {number}")
count = 5
while count > 0:
print(f"Countdown: {count}")
count -= 1
'''
st.code(code3, language="python")
create_explanation("Loops: For and While", """
**Loops** allow you to repeat tasks. In this example, we demonstrate two types of loops:
- **For loop**: The `for` loop iterates over a list of numbers (`numbers`), printing each item in the list. This loop is commonly used when you know in advance how many times you want to iterate.
- **While loop**: The `while` loop continues as long as a specified condition is `True`. In this case, it counts down from `5` to `0`. This loop is useful when the number of iterations isn't known beforehand, but depends on a condition.
Loops are fundamental for automating repetitive tasks and processing sequences of data.
""")
# Try it yourself box
st.write("### Try it Yourself:")
user_code3 = st.text_area("Example 3: Paste or modify the code and hit 'Run' to see the output.", value=code3, height=150, key="3")
if st.button("Run Example 3 Code"):
result, error = run_code(user_code3)
if result:
st.success("Code ran successfully!")
st.text(result)
elif error:
st.error(f"Error: {error}")
# 4. Functions: Defining and Using Functions
st.subheader("4. Functions: Defining and Using Functions")
code4 = '''def add_numbers(a, b):
return a + b
result = add_numbers(10, 20)
print(f"The result is: {result}")
'''
st.code(code4, language="python")
create_explanation("Functions: Defining and Using Functions", """
A **function** is a block of code that performs a specific task and can be reused multiple times. Functions allow us to structure our code for better readability and efficiency. Here's what's happening:
- We define a function `add_numbers(a, b)` which takes two arguments (`a` and `b`) and returns their sum.
- Then, we call this function with two numbers, `10` and `20`, and store the result in the variable `result`.
- Finally, we print the result.
Functions help make your code more modular and reusable by avoiding repetition.
""")
# Try it yourself box
st.write("### Try it Yourself:")
user_code4 = st.text_area("Example 4: Paste or modify the code and hit 'Run' to see the output.", value=code4, height=150, key="4")
if st.button("Run Example 4 Code"):
result, error = run_code(user_code4)
if result:
st.success("Code ran successfully!")
st.text(result)
elif error:
st.error(f"Error: {error}")
# 5. Lists and Dictionaries
st.subheader("5. Basic Data Structures: Lists and Dictionaries")
code5 = '''fruits = ["apple", "banana", "cherry"]
print(f"First fruit: {fruits[0]}")
student = {"name": "John", "age": 22, "major": "Computer Science"}
print(f"Student name: {student['name']}")
'''
st.code(code5, language="python")
create_explanation("Basic Data Structures: Lists and Dictionaries", """
In Python, **data structures** are used to store and organize data. Two common structures are:
- **Lists**: Ordered collections of items (e.g., numbers, strings). You can access items by their index. In the example, `fruits[0]` retrieves the first item, `"apple"`.
- **Dictionaries**: Unordered collections of key-value pairs. In the example, `student['name']` retrieves the value associated with the key `'name'`, which is `"John"`.
These structures are essential for storing and managing data in your programs, and you’ll frequently use them in everyday coding.
""")
# Try it yourself box
st.write("### Try it Yourself:")
user_code5 = st.text_area("Example 5: Paste or modify the code and hit 'Run' to see the output.", value=code5, height=150, key="5")
if st.button("Run Example 5 Code"):
result, error = run_code(user_code5)
if result:
st.success("Code ran successfully!")
st.text(result)
elif error:
st.error(f"Error: {error}")
# Footer
st.write("This app is an educational tool to help you learn basic Python concepts. Keep exploring and practicing to master the language!")