Tell us what’s happening:
code is not figuring out I am not able to know the problem So code is not working
Your code so far
class Employee:
_base_salaries = {
'trainee': 1000,
'junior': 2000,
'mid-level': 3000,
'senior': 4000,
}
def __init__(self, name, level):
self.name = name
self.level = level
self._salary = Employee._base_salaries[level]
def __str__(self):
return f'{self.name}: {self.level}'
def __repr__(self):
return f"Employee('{self.name}', '{self.level}')"
@property
def name(self):
return self._name
@name.setter
def name(self, new_name):
if not isinstance(new_name, str):
raise TypeError("'name' must be a string.")
self._name = new_name
print(f"'name' updated to '{self.name}'.")
@property
def level(self):
return self._level
@level.setter
def level(self, new_level):
if not isinstance(new_level, str):
raise TypeError("'level' must be a string.")
if new_level not in Employee._base_salaries:
raise ValueError(f"Invalid value '{new_level}' for 'level' attribute.")
# User Editable Region
if hasattr(self, '_level') and self.level == new_level:
raise ValueError(f"'{self._level}' is already the selected level.")
# User Editable Region
self._level = new_level
@property
def salary(self):
return self._salary
charlie_brown = Employee('Charlie Brown', 'trainee')
print(charlie_brown)
print(f'Base salary: ${charlie_brown.salary}')
Your browser information:
User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Safari/537.36
Challenge Information:
Build a Salary Tracker - Step 31
GitHub Link: freeCodeCamp/curriculum/challenges/english/blocks/workshop-salary-tracker/68c9cab4b1118da59eecfc56.md at main · freeCodeCamp/freeCodeCamp · GitHub
dhess
May 24, 2026, 2:32pm
2
Hi @shagun7924 ,
shagun7924:
self.level == new_level:
The tests are expecting this to be flipped.
shagun7924:
(f"'{self._level}'
Please use the level property here rather than the variable intended only for internal use.
Happy coding!
I have tried flipping too but it is not working still
def level(self, new_level):
if not isinstance(new_level, str):
raise TypeError("'level' must be a string.")
if new_level not in Employee.\_base_salaries:
raise ValueError(f"Invalid value '{new_level}' for 'level' attribute.")
if hasattr(self, '\_level') and self.\_level == new_level:
raise ValueError(f"'{level}' is already the selected level.")
self.\_level = new_level
dhess
May 24, 2026, 7:28pm
4
Please format your code.
There are two ways you can format your code to make it easier to read and test:
After you copy/paste your code into the editor, select it by dragging your cursor over it then click the (</>) button in the toolbar to automatically wrap your code in backticks. (You can click on the animated demo image below to enlarge it.)
Manually add three backticks on a new line above your code and on a new line after your code. Note that a backtick is NOT the same as a single quote('). To find the backtick key on your keyboard, see this post .
To see changes to your post as you make them, you can click the (M+) button on the toolbar to bring up the rich text editor:
class Employee:
_base_salaries = {
'trainee': 1000,
'junior': 2000,
'mid-level': 3000,
'senior': 4000,
}
def __init__(self, name, level):
self.name = name
self.level = level
self._salary = Employee._base_salaries[level]
def __str__(self):
return f'{self.name}: {self.level}'
def __repr__(self):
return f"Employee('{self.name}', '{self.level}')"
@property
def name(self):
return self._name
@name.setter
def name(self, new_name):
if not isinstance(new_name, str):
raise TypeError("'name' must be a string.")
self._name = new_name
print(f"'name' updated to '{self.name}'.")
@property
def level(self):
return self._level
@level.setter
def level(self, new_level):
if not isinstance(new_level, str):
raise TypeError("'level' must be a string.")
if new_level not in Employee._base_salaries:
raise ValueError(f"Invalid value '{new_level}' for 'level' attribute.")
if hasattr(self, '_level') and self._level == new_level:
raise ValueError(f"'{self.level}' is already the selected level.")
self._level = new_level
@property
def salary(self):
return self._salary
charlie_brown = Employee('Charlie Brown', 'trainee')
print(charlie_brown)
print(f'Base salary: ${charlie_brown.salary}')
dhess
May 24, 2026, 9:40pm
6
It still doesn’t look like you have swapped the order of these variables in your condition.