Learn Encapsulation by Building a Projectile Trajectory Calculator - Step 23

Tell us what’s happening:

I have the output matching exactly the output but not passing
this is my code so far
def create_trajectory(self):

    rounded_coords = [(round(x), round(y)) for x, y in self.__coordinates]

    x_max = max(rounded_coords, key=lambda i: i[0])[0]
    y_max = max(rounded_coords, key=lambda j: j[1])[1]

    matrix_list = [[" " for _ in range(x_max + 1)] for _ in range(y_max + 1)]

    for x, y in rounded_coords:
        matrix_list[-1 - y][x] = PROJECTILE

    matrix = [

Your code so far

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})"

    def create_coordinates_table(self):
        table = '\n  x      y\n'
        for x, y in self.__coordinates:
            table += f'{x:>3}{y:>7.2f}\n'

        return table


# User Editable Region

    def create_trajectory(self):

        rounded_coords = [(round(x), round(y)) for x, y in self.__coordinates]

        x_max = max(rounded_coords, key=lambda i: i[0])[0]
        y_max = max(rounded_coords, key=lambda j: j[1])[1]

        matrix_list = [[" " for _ in range(x_max + 1)] for _ in range(y_max + 1)]

        for x, y in rounded_coords:
            matrix_list[-1 - y][x] = PROJECTILE

        matrix = ["".join(line) for line in matrix_list]

        matrix_axes = [y_axis_tick + row for row in matrix]
        matrix_axes.append(" " + x_axis_tick * (len(matrix[0])))
        clean_output=''
        for row in matrix_axes:
            clean_output += f'\n{row}\n'

        return clean_output


# User Editable Region


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

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36 Edg/140.0.0.0

Challenge Information:

Learn Encapsulation by Building a Projectile Trajectory Calculator - Step 23

if you open the browser console you can see more details from the tests

AssertionError: expected '\n⊣     βˆ™       \n⊣  βˆ™βˆ™βˆ™ βˆ™βˆ™βˆ™    \n⊣ βˆ™       βˆ™   \nβŠ£βˆ™         βˆ™  \n⊣           βˆ™ \n⊣            βˆ™\n⊣             \n TTTTTTTTTTTTT\n'
               but found '\n⊣     βˆ™       \n\n⊣  βˆ™βˆ™βˆ™ βˆ™βˆ™βˆ™    \n\n⊣ βˆ™       βˆ™   \n\nβŠ£βˆ™         βˆ™  \n\n⊣           βˆ™ \n\n⊣            βˆ™\n\n⊣             \n\n TTTTTTTTTTTTT\n'

it looks like you have too many new line characters

clean_output=β€˜β€™

    for row in matrix_axes:

        clean_output += '\\n' + row +'\\n'



    return clean_output 

added the new lines manually to avoid new lines in each iteration but still not passing.

console output is as below

// running tests
1. The method should return the correct string.
// tests completed
// console output

Projectile details:
speed: 10 m/s
height: 3 m
angle: 45Β°
displacement: 12.6 m


⊣     βˆ™       

⊣  βˆ™βˆ™βˆ™ βˆ™βˆ™βˆ™    

⊣ βˆ™       βˆ™   

βŠ£βˆ™         βˆ™  

⊣           βˆ™ 

⊣            βˆ™

⊣             

 TTTTTTTTTTTTT

your console output still looks like having extra lines in between each graph line

Finally, make the final output a multiline string. the challenge is Expecting for the output to be multiline. How do you achieve this without using the \n. I have figured out add new line during iteration and append a newline on return output.

Happy coding

you need to use the \n, you should not result with \n\n between each line tho, only one \n between each line

1 Like