Learn Encapsulation by Building a Projectile Trajectory Calculator - Step 14

Step 14
Create a method create_coordinates_table, then at the end of the code print graph.create_coordinates_table()).

The method should use the __coordinates property and return a string containing all the coordinates, where x and y have always the same position, the values for x are always integers, and the values for y are always rounded to two decimal places:

示例代码
x y
0 3.00
1 3.90
2 4.61
3 5.12
4 5.43
5 5.55
6 5.47
7 5.19
8 4.72
9 4.05
10 3.19
11 2.13
12 0.87
The table should start with a newline character and end with a newline character.

def create_coordinates_table(self):
    """Create a string table of coordinates."""
    table = "  x      y\n"  # Header for the table

    for x, y in self.__coordinates:
        # Format Y to two decimal places and create the string entry
        table += f"{x:>3}{y:>7.2f}\n"
    
    return table

ball = Projectile(10, 3, 45)
print(ball)
coordinates = ball.calculate_all_coordinates()

graph = Graph(coordinates)
print(graph.create_coordinates_table())

Error Information: The method should return the correct output.

到目前为止你的代码

import math

GRAVITATIONAL_ACCELERATION = 9.81
PROJECTILE = "∙"
x_axis_tick = "T"
y_axis_tick = "⊣"

class Projectile:
    __slots__ = ('__speed', '__height', '__angle')

    def __init__(self, speed, height, angle):
        self.__speed = speed
        self.__height = height
        self.__angle = math.radians(angle)

    def __str__(self):
        return f'''
Projectile details:
speed: {self.speed} m/s
height: {self.height} m
angle: {self.angle}°
displacement: {round(self.__calculate_displacement(), 1)} m
'''

    def __calculate_displacement(self):
        horizontal_component = self.__speed * math.cos(self.__angle)
        vertical_component = self.__speed * math.sin(self.__angle)
        squared_component = vertical_component**2
        gh_component = 2 * GRAVITATIONAL_ACCELERATION * self.__height
        sqrt_component = math.sqrt(squared_component + gh_component)

        return horizontal_component * (vertical_component + sqrt_component) / GRAVITATIONAL_ACCELERATION

    def __calculate_y_coordinate(self, x):
        height_component = self.__height
        angle_component = math.tan(self.__angle) * x
        acceleration_component = GRAVITATIONAL_ACCELERATION * x ** 2 / (
                2 * self.__speed ** 2 * math.cos(self.__angle) ** 2)
        y_coordinate = height_component + angle_component - acceleration_component

        return y_coordinate

    def calculate_all_coordinates(self):
        return [
            (x, self.__calculate_y_coordinate(x))
            for x in range(math.ceil(self.__calculate_displacement()))
        ]

    @property
    def height(self):
        return self.__height

    @property
    def angle(self):
        return round(math.degrees(self.__angle))

    @property
    def speed(self):
        return self.__speed

    @height.setter
    def height(self, n):
        self.__height = n

    @angle.setter
    def angle(self, n):
        self.__angle = math.radians(n)

    @speed.setter
    def speed(self, s):
       self.__speed = s

    def __repr__(self):
        return f'{self.__class__}({self.speed}, {self.height}, {self.angle})'

class Graph:
    __slots__ = ('__coordinates')

    def __init__(self, coord):
        self.__coordinates = coord

    def __repr__(self):
        return f'Graph({self.__coordinates})'


# User Editable Region

    def create_coordinates_table(self):
        """Create a string table of coordinates."""
        table = "  x      y\n"  # Header for the table

        for x, y in self.__coordinates:
            # Format Y to two decimal places and create the string entry
            table += f"{x:>3}{y:>7.2f}\n"
        
        return table



ball = Projectile(10, 3, 45)
print(ball)
coordinates = ball.calculate_all_coordinates()

graph = Graph(coordinates)
print(graph.create_coordinates_table())

# User Editable Region

挑战信息:

Learn Encapsulation by Building a Projectile Trajectory Calculator - Step 14

Hi @jokerfreak123

The table should start with a newline character ✗
and end with a newline character. ✓

Happy coding