Re-write this Python code that counts down from 5 to 0 with 1 second in between in a more efficient way:

import time
seconds = 5
print("Remaining time: " + str(seconds))
seconds = seconds - 1
time.sleep(1)
print("Remaining time: " + str(seconds))
seconds = seconds - 1
time.sleep(1)
print("Remaining time: " + str(seconds))
seconds = seconds - 1
time.sleep(1)
print("Remaining time: " + str(seconds))
seconds = seconds - 1
time.sleep(1)
print("Remaining time: " + str(seconds))
seconds = seconds - 1
time.sleep(1)
print("Remaining time: " + str(seconds))

Imagine you are writing a program that will be used to manage production at a cookie factory. Describe one object you will create; it should have at least two methods and three attributes.
Look at the following program. Is it procedural or object-oriented? What would you do to convert it to the other type?

song1 = "Let's Dance"
song1_info = [128, 34, 304]

song2 = "Party Time!"
song2_info = [144, 32, 439]

song3 = "My Dreams"
song3_info = [93, 41, 339]

Describe in your own words what this program does:

class Meals:
def __init__(self, name):
self.name = name

fish = Meals("salmon")
print(fish.name)

Write a Python module that solves a problem.

1 answer

Here's the rewritten Python code that efficiently counts down from 5 to 0 with 1 second in between using a loop:

import time

for seconds in range(5, -1, -1):
    print(f"Remaining time: {seconds}")
    time.sleep(1)

Cookie Factory Management Object

Object: CookieBatch

Attributes:

  1. batch_id: Unique identifier for the cookie batch.
  2. cookie_type: Type of cookies being produced (e.g., chocolate chip, oatmeal).
  3. quantity: Number of cookies in the batch.

Methods:

  1. start_production(): Initiates the cookie production process for the batch.
  2. get_status(): Returns the current status of the batch (e.g., "In Progress", "Completed").

Program Type Discussion

The initial song program is procedural in nature. It uses standalone variables to store song titles and their corresponding information without encapsulating this functionality in classes or objects.

To convert it to object-oriented programming, I would create a Song class that encapsulates the properties and behavior related to songs. Below is a transformation of the given procedural code into an object-oriented version:

class Song:
    def __init__(self, title, bpm, duration, id):
        self.title = title
        self.bpm = bpm  # beats per minute
        self.duration = duration  # duration in seconds
        self.id = id  # unique identifier for the song

    def display_info(self):
        print(f"Title: {self.title}, BPM: {self.bpm}, Duration: {self.duration}, ID: {self.id}")

# Instances of the Song class
song1 = Song("Let's Dance", 128, 34, 304)
song2 = Song("Party Time!", 144, 32, 439)
song3 = Song("My Dreams", 93, 41, 339)

# Display information about songs
song1.display_info()
song2.display_info()
song3.display_info()

Program Description

The provided code snippet defines a Meals class with a constructor that initializes the name attribute. Then, an instance of the Meals class called fish is created with the name "salmon". The program prints the name of the fish object. In essence, it serves to demonstrate a simple class definition and object instantiation in Python.

Python Module Example

Here's a simple Python module that solves a problem: calculating and displaying the area of different shapes (circle, rectangle, triangle).

# shape_area_calculator.py

import math

class ShapeAreaCalculator:
    @staticmethod
    def area_circle(radius):
        """Return the area of a circle given its radius."""
        return math.pi * (radius ** 2)

    @staticmethod
    def area_rectangle(length, width):
        """Return the area of a rectangle given length and width."""
        return length * width

    @staticmethod
    def area_triangle(base, height):
        """Return the area of a triangle given its base and height."""
        return 0.5 * base * height

if __name__ == "__main__":
    print(f"Area of circle with radius 5: {ShapeAreaCalculator.area_circle(5)}")
    print(f"Area of rectangle with length 4 and width 2: {ShapeAreaCalculator.area_rectangle(4, 2)}")
    print(f"Area of triangle with base 6 and height 3: {ShapeAreaCalculator.area_triangle(6, 3)}")

This module uses static methods to calculate the area of different shapes and can be easily expanded to accommodate more shapes or calculations. It demonstrates object-oriented principles by using a class to group related functionalities.