Examples are provided using modules from Python's standard library, and a simple external package is installed and used.Working with the Standard LibraryPython comes with an extensive standard library, offering ready-to-use modules for many common tasks. You don't need to install anything extra for these; they are part of your Python installation.Example 1: Using the math ModuleThe math module provides access to mathematical functions. Let's say you need to calculate the square root of a number or find the ceiling value (the smallest integer greater than or equal to a number).Import the module: Start your script by importing the math module.import mathUse its functions: Now you can access functions within the math module using dot notation (module_name.function_name).import math number = 16 square_root = math.sqrt(number) print(f"The square root of {number} is {square_root}") # Output: The square root of 16 is 4.0 another_number = 9.3 ceiling_value = math.ceil(another_number) print(f"The ceiling value of {another_number} is {ceiling_value}") # Output: The ceiling value of 9.3 is 10Notice how we prefix sqrt and ceil with math. to tell Python where these functions come from.Example 2: Using the random ModuleNeed to generate random numbers or make random choices? The random module is your tool.Import the module:import randomUse its functions: Let's generate a random integer within a specific range and pick a random item from a list.import random # Generate a random integer between 1 and 10 (inclusive) random_integer = random.randint(1, 10) print(f"A random integer: {random_integer}") # Choose a random element from a list options = ['apple', 'banana', 'cherry', 'date'] random_choice = random.choice(options) print(f"A random fruit: {random_choice}")Each time you run this script, you'll likely get different outputs for the random integer and fruit.Example 3: Using from ... importSometimes, you might only need one or two specific things from a module, or you want to avoid typing the module name repeatedly. You can use the from ... import syntax. Let's redo the square root calculation using this method.from math import sqrt, ceil # Import only sqrt and ceil directly number = 25 square_root = sqrt(number) # Note: No 'math.' prefix needed now print(f"The square root of {number} is {square_root}") # Output: The square root of 25 is 5.0 another_number = 4.1 ceiling_value = ceil(another_number) # No 'math.' prefix print(f"The ceiling value of {another_number} is {ceiling_value}") # Output: The ceiling value of 4.1 is 5While this can make code shorter, be mindful that importing many names directly can clutter your script's namespace and potentially lead to naming conflicts if different modules have functions or variables with the same name. Using import module_name is often clearer for larger programs.Working with External PackagesThe Python Package Index (PyPI) hosts thousands of external packages created by the community. These extend Python's capabilities significantly. To use them, you first need to install them using pip.Example 4: Installing and Using the requests PackageThe requests package is a very popular library for making HTTP requests (e.g., fetching web pages).Install the package: Open your terminal or command prompt (not the Python interpreter). Type the following command and press Enter:pip install requestsYou should see output indicating that requests (and potentially some dependencies) are being downloaded and installed.Use the package in your script: Now you can import and use requests just like a standard library module. Let's fetch the content of a simple example website.import requests import datetime # Let's also import datetime to see when we ran it try: # Make a GET request to a URL response = requests.get('https://httpbin.org/get') response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx) # Print some information about the response print(f"Request successful at: {datetime.datetime.now()}") print(f"Status Code: {response.status_code}") # print(f"Content (first 150 chars): {response.text[:150]}...") # Uncomment to see content except requests.exceptions.RequestException as e: # Handle potential errors like network issues or bad responses print(f"An error occurred: {e}") print(f"Request failed at: {datetime.datetime.now()}") This script attempts to fetch data from a test URL. It uses a try...except block (which you learned about previously) to handle potential network errors gracefully. It prints the status code returned by the server (200 usually means success) and the time the request was made.Mini-Task: Combining ModulesLet's combine what we've learned. Write a short script that:Imports the random and math modules.Generates a random floating-point number between 1.0 and 100.0 using random.uniform().Calculates the floor (largest integer less than or equal to) of that number using math.floor().Prints both the original random number and its floor value.Solution:import random import math # 1. Generate a random float between 1.0 and 100.0 random_float = random.uniform(1.0, 100.0) # 2. Calculate its floor value floor_value = math.floor(random_float) # 3. Print the results print(f"Generated random float: {random_float:.2f}") # Format to 2 decimal places print(f"Floor value: {floor_value}")This practice demonstrates how modules, both standard and external, allow you to easily incorporate powerful functionality into your programs without writing everything from scratch. As you build more complex applications, effectively using modules and packages will be fundamental to keeping your code organized, readable, and maintainable. Experiment with other functions in the math, random, and datetime modules, or try installing and using another simple package from PyPI.