Python:如何使用 class 向字典添加信息,然后打印添加的字典条目的键和值
Python: How to add information to a dictionary using a class, then print key and values of added dictionary entry
我正在处理以下作业,并且是对 create/store 对象使用 classes 的新手:
Employee Management System: This exercise assumes you have created the Employee class for Programming Exercise 4. Create a program that stores Employee objects in a dictionary. Use the employee ID number as the key. The program should present a menu that lets the user perform the following actions: Look up an employee in the dictionary, Add a new employee to the dictionary, Change an existing employee’s name, department, and job title in the dictionary, Delete an employee from the dictionary, Quit the program.
When the program ends, it should pickle the dictionary and save it to a file. Each time the
program starts, it should try to load the pickled dictionary from the file. If the file does not exist,
the program should start with an empty dictionary.
一切都很顺利,直到我运行程序在使用员工查找功能时无法正确打印信息。当运行代码:
if ID in dictionary.keys():
print(ID, ': ', dictionary[ID])
输出为:
1 : <Employee.Employee object at 0x03520340>
我在添加员工时附上了程序的图像 运行,然后尝试查找它。我认为我在添加函数中首先保存数据的方式可能存在问题,或者在查找函数中访问数据时存在问题。
是否有不同的方法来打印指定 ID 的字典内容?我是否首先不正确地存储了对象属性?
作为参考,这是我的其余代码:
Employee.py(员工 class 在其自己的文件中):
class Employee:
# Initialize Employee object
def __init__(self, ID, name, department, job):
self.__name = name
self.__ID = ID
self.__department = department
self.__job = job
# Set each object
def set_name(self, name):
self.__name = name
def set_ID(self, ID):
self.__ID = ID
def set_dept(self, department):
self.__department = department
def set_job(self, job):
self.__job = job
# Get each object
def get_name(self):
return self.name
def get_ID(self):
return self.__ID
def get_department(self):
return self.__department
def get_job(self):
return self.__job
def print(self):
print("Name: " + self.__name + \
", ID Number: " + self.__ID + \
", Department: " + self.__department + \
", Job Title: " + self.__job)
EmployeeManagementSystem.py:
# Import necessary libraries
import pickle
import Employee
# STEP 1 = DEFINE FUNCTIONS FOR EACH CHOICE
# Lookup an employee
def lookup(dictionary):
# Look up the ID number if it is in the dictionary
ID = int(input('Enter the employee ID number: '))
if ID in dictionary.keys():
print(ID, ': ', dictionary[ID])
print(dictionary.get(ID))
else:
print("That ID number was not found.")
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Add an employee
def add(dictionary):
# Add a new employee
ID = int(input('Enter the employee ID number: '))
name = input('Enter the name of the employee: ')
dept = input('Enter the employee department: ')
job = input('Enter the employee job title: ')
entry = Employee.Employee(ID, name, dept, job)
dictionary[ID] = entry
print('Employee added succesfully')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Change an employee
def change(dictionary):
# If user-entered ID is in dictionary, allow them to change the info
ID = input('Enter the employee ID you would like to change: ')
if ID in dictionary.keys():
name = input('Enter new employee name: ')
newId = input('Enter new employee ID: ')
dept = input('Enter new employee department: ')
job = input('Enter new employee job title: ')
entry = Employee.Employee(newID, name, dept, job)
dictionary[ID] = entry
print('Employee changed successfully.')
else:
print('That employee ID was not found.')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Delete an employee
def delete(dictionary):
# If user-entered ID is in dictionary, delete the entry
ID = input('Enter the employee ID you would like to remove: ')
if ID in dictionary.keys():
del dictionary[ID]
print('Employee removed successfully')
else:
print('That employe ID was not found.')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Save the dictionary and quit the program
def save_quit(dictionary):
# Pickle the dictionary and save to a file
output_file = open('employee_data.dat','wb')
pickle.dump(dictionary,output_file)
output_file.close
# End the while loop in main() so program quits
proceed = False
return proceed
# STEP 2 - Main Function
def main():
# Try to open the existing dictionary file
try:
input_file = open('employee_data.dat','rb')
employee_dictionary = pickle.load(input_file)
input_file.close()
# If no such file exists, create a new dictionary
except:
employee_dictionary = {}
# While loop to continue until user chooses to quit
proceed = True
while proceed:
# Display user's option menu and ask for a choice
print('\n Employee Management System\n')
print('\t1. Lookup an employee')
print('\t2. Add a new employee')
print('\t3. Change an existing employee')
print('\t4. Delete an existing employee')
print('\t5. Save and Quit\n')
option_choice = int(input('Enter an option to continue: '))
# Map each choice to the functions below using a dictionary
options = {1:lookup, 2:add, 3:change, 4:delete, 5:save_quit,}
proceed = options[option_choice](employee_dictionary)
# STEP 3 - CALL MAIN
# Call the main function
main()
def lookup(dictionary):
# Look up the ID number if it is in the dictionary
ID = int(input('Enter the employee ID number: '))
if ID in dictionary.keys():
x=dictionary.get(ID)
x.print()
else:
print("That ID number was not found.")
# Offer the user the menu of choices again from main()
proceed = True
return proceed
既然你已经有了打印调用的函数
并且打印函数中存在错误以修复将 'self.__id' 更改为 'str(self.__ID)'
def print(self):
print("Name: " + self.__name + \
", ID Number: " + str(self.__ID) + \
", Department: " + self.__department + \
", Job Title: " + self.__job)
您可以将 Employee
class 中的 print
方法更改为 __str__
,如下所示:
class Employee:
# Initialize Employee object
def __init__(self, ID, name, department, job):
self.__name = name
self.__ID = ID
self.__department = department
self.__job = job
# Set each object
def set_name(self, name):
self.__name = name
def set_ID(self, ID):
self.__ID = ID
def set_dept(self, department):
self.__department = department
def set_job(self, job):
self.__job = job
# Get each object
def get_name(self):
return self.name
def get_ID(self):
return self.__ID
def get_department(self):
return self.__department
def get_job(self):
return self.__job
def __str__(self):
return (f"Name: {self.__name}, ID Number: {self.__ID}, "
f"Department: {self.__department}, Job Title: {self.__job}")
并修正您的 EmployeeManagementSystem.py
文件中的一些小拼写错误:
# Import necessary libraries
import pickle
import Employee
def get_int_input(prompt):
num = -1
while True:
try:
num = int(input(prompt))
break
except:
print("Error: Enter an integer, try again...")
return num
# Lookup an employee
def lookup(dictionary):
# Look up the ID number if it is in the dictionary
employee_id = get_int_input('Enter the employee ID number: ')
if employee_id in dictionary:
# print('employee_id', ': ', dictionary[employee_id])
print(dictionary.get(employee_id))
else:
print("That ID number was not found.")
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Add an employee
def add(dictionary):
# Add a new employee
empyloyee_id = get_int_input('Enter the employee ID number: ')
name = input('Enter the name of the employee: ')
dept = input('Enter the employee department: ')
job = input('Enter the employee job title: ')
entry = Employee.Employee(empyloyee_id, name, dept, job)
dictionary[empyloyee_id] = entry
print('Employee added succesfully')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Change an employee
def change(dictionary):
# If user-entered ID is in dictionary, allow them to change the info
employee_id = get_int_input(
'Enter the employee ID you would like to change: ')
if employee_id in dictionary.keys():
name = input('Enter new employee name: ')
dept = input('Enter new employee department: ')
job = input('Enter new employee job title: ')
entry = Employee.Employee(employee_id, name, dept, job)
dictionary[employee_id] = entry
print('Employee changed successfully.')
else:
print('That employee ID was not found.')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Delete an employee
def delete(dictionary):
# If user-entered ID is in dictionary, delete the entry
employee_id = get_int_input(
'Enter the employee ID you would like to remove: ')
if employee_id in dictionary.keys():
del dictionary[employee_id]
print('Employee removed successfully')
else:
print('That employee ID was not found.')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Save the dictionary and quit the program
def save_quit(dictionary):
# Pickle the dictionary and save to a file
output_file = open('employee_data.dat', 'wb')
pickle.dump(dictionary, output_file)
output_file.close
# End the while loop in main() so program quits
proceed = False
return proceed
# STEP 2 - Main Function
def main():
# Try to open the existing dictionary file
try:
input_file = open('employee_data.dat', 'rb')
employee_dictionary = pickle.load(input_file)
input_file.close()
# If no such file exists, create a new dictionary
except:
employee_dictionary = {}
# While loop to continue until user chooses to quit
proceed = True
while proceed:
# Display user's option menu and ask for a choice
print('\n Employee Management System\n')
print('\t1. Lookup an employee')
print('\t2. Add a new employee')
print('\t3. Change an existing employee')
print('\t4. Delete an existing employee')
print('\t5. Save and Quit\n')
option_choice = get_int_input('Enter an option to continue: ')
# Map each choice to the functions below using a dictionary
options = {
1: lookup,
2: add,
3: change,
4: delete,
5: save_quit,
}
proceed = options[option_choice](employee_dictionary)
# STEP 3 - CALL MAIN
# Call the main function
main()
用法示例:
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 2
Enter the employee ID number: 123
Enter the name of the employee: asd
Enter the employee department: asd
Enter the employee job title: asd
Employee added succesfully
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 1
Enter the employee ID number: 123
Name: asd, ID Number: 123, Department: asd, Job Title: asd
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 3
Enter the employee ID you would like to change: asd
Error: Enter an integer, try again...
Enter the employee ID you would like to change: 123
Enter new employee name: zxc
Enter new employee department: zxc
Enter new employee job title: zxc
Employee changed successfully.
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 1
Enter the employee ID number: 123
Name: zxc, ID Number: 123, Department: zxc, Job Title: zxc
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 4
Enter the employee ID you would like to remove: 123
Employee removed successfully
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 1
Enter the employee ID number: 123
That ID number was not found.
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 5
我正在处理以下作业,并且是对 create/store 对象使用 classes 的新手:
Employee Management System: This exercise assumes you have created the Employee class for Programming Exercise 4. Create a program that stores Employee objects in a dictionary. Use the employee ID number as the key. The program should present a menu that lets the user perform the following actions: Look up an employee in the dictionary, Add a new employee to the dictionary, Change an existing employee’s name, department, and job title in the dictionary, Delete an employee from the dictionary, Quit the program. When the program ends, it should pickle the dictionary and save it to a file. Each time the program starts, it should try to load the pickled dictionary from the file. If the file does not exist, the program should start with an empty dictionary.
一切都很顺利,直到我运行程序在使用员工查找功能时无法正确打印信息。当运行代码:
if ID in dictionary.keys():
print(ID, ': ', dictionary[ID])
输出为:
1 : <Employee.Employee object at 0x03520340>
我在添加员工时附上了程序的图像 运行,然后尝试查找它。我认为我在添加函数中首先保存数据的方式可能存在问题,或者在查找函数中访问数据时存在问题。 是否有不同的方法来打印指定 ID 的字典内容?我是否首先不正确地存储了对象属性?
作为参考,这是我的其余代码:
Employee.py(员工 class 在其自己的文件中):
class Employee:
# Initialize Employee object
def __init__(self, ID, name, department, job):
self.__name = name
self.__ID = ID
self.__department = department
self.__job = job
# Set each object
def set_name(self, name):
self.__name = name
def set_ID(self, ID):
self.__ID = ID
def set_dept(self, department):
self.__department = department
def set_job(self, job):
self.__job = job
# Get each object
def get_name(self):
return self.name
def get_ID(self):
return self.__ID
def get_department(self):
return self.__department
def get_job(self):
return self.__job
def print(self):
print("Name: " + self.__name + \
", ID Number: " + self.__ID + \
", Department: " + self.__department + \
", Job Title: " + self.__job)
EmployeeManagementSystem.py:
# Import necessary libraries
import pickle
import Employee
# STEP 1 = DEFINE FUNCTIONS FOR EACH CHOICE
# Lookup an employee
def lookup(dictionary):
# Look up the ID number if it is in the dictionary
ID = int(input('Enter the employee ID number: '))
if ID in dictionary.keys():
print(ID, ': ', dictionary[ID])
print(dictionary.get(ID))
else:
print("That ID number was not found.")
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Add an employee
def add(dictionary):
# Add a new employee
ID = int(input('Enter the employee ID number: '))
name = input('Enter the name of the employee: ')
dept = input('Enter the employee department: ')
job = input('Enter the employee job title: ')
entry = Employee.Employee(ID, name, dept, job)
dictionary[ID] = entry
print('Employee added succesfully')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Change an employee
def change(dictionary):
# If user-entered ID is in dictionary, allow them to change the info
ID = input('Enter the employee ID you would like to change: ')
if ID in dictionary.keys():
name = input('Enter new employee name: ')
newId = input('Enter new employee ID: ')
dept = input('Enter new employee department: ')
job = input('Enter new employee job title: ')
entry = Employee.Employee(newID, name, dept, job)
dictionary[ID] = entry
print('Employee changed successfully.')
else:
print('That employee ID was not found.')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Delete an employee
def delete(dictionary):
# If user-entered ID is in dictionary, delete the entry
ID = input('Enter the employee ID you would like to remove: ')
if ID in dictionary.keys():
del dictionary[ID]
print('Employee removed successfully')
else:
print('That employe ID was not found.')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Save the dictionary and quit the program
def save_quit(dictionary):
# Pickle the dictionary and save to a file
output_file = open('employee_data.dat','wb')
pickle.dump(dictionary,output_file)
output_file.close
# End the while loop in main() so program quits
proceed = False
return proceed
# STEP 2 - Main Function
def main():
# Try to open the existing dictionary file
try:
input_file = open('employee_data.dat','rb')
employee_dictionary = pickle.load(input_file)
input_file.close()
# If no such file exists, create a new dictionary
except:
employee_dictionary = {}
# While loop to continue until user chooses to quit
proceed = True
while proceed:
# Display user's option menu and ask for a choice
print('\n Employee Management System\n')
print('\t1. Lookup an employee')
print('\t2. Add a new employee')
print('\t3. Change an existing employee')
print('\t4. Delete an existing employee')
print('\t5. Save and Quit\n')
option_choice = int(input('Enter an option to continue: '))
# Map each choice to the functions below using a dictionary
options = {1:lookup, 2:add, 3:change, 4:delete, 5:save_quit,}
proceed = options[option_choice](employee_dictionary)
# STEP 3 - CALL MAIN
# Call the main function
main()
def lookup(dictionary):
# Look up the ID number if it is in the dictionary
ID = int(input('Enter the employee ID number: '))
if ID in dictionary.keys():
x=dictionary.get(ID)
x.print()
else:
print("That ID number was not found.")
# Offer the user the menu of choices again from main()
proceed = True
return proceed
既然你已经有了打印调用的函数 并且打印函数中存在错误以修复将 'self.__id' 更改为 'str(self.__ID)'
def print(self):
print("Name: " + self.__name + \
", ID Number: " + str(self.__ID) + \
", Department: " + self.__department + \
", Job Title: " + self.__job)
您可以将 Employee
class 中的 print
方法更改为 __str__
,如下所示:
class Employee:
# Initialize Employee object
def __init__(self, ID, name, department, job):
self.__name = name
self.__ID = ID
self.__department = department
self.__job = job
# Set each object
def set_name(self, name):
self.__name = name
def set_ID(self, ID):
self.__ID = ID
def set_dept(self, department):
self.__department = department
def set_job(self, job):
self.__job = job
# Get each object
def get_name(self):
return self.name
def get_ID(self):
return self.__ID
def get_department(self):
return self.__department
def get_job(self):
return self.__job
def __str__(self):
return (f"Name: {self.__name}, ID Number: {self.__ID}, "
f"Department: {self.__department}, Job Title: {self.__job}")
并修正您的 EmployeeManagementSystem.py
文件中的一些小拼写错误:
# Import necessary libraries
import pickle
import Employee
def get_int_input(prompt):
num = -1
while True:
try:
num = int(input(prompt))
break
except:
print("Error: Enter an integer, try again...")
return num
# Lookup an employee
def lookup(dictionary):
# Look up the ID number if it is in the dictionary
employee_id = get_int_input('Enter the employee ID number: ')
if employee_id in dictionary:
# print('employee_id', ': ', dictionary[employee_id])
print(dictionary.get(employee_id))
else:
print("That ID number was not found.")
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Add an employee
def add(dictionary):
# Add a new employee
empyloyee_id = get_int_input('Enter the employee ID number: ')
name = input('Enter the name of the employee: ')
dept = input('Enter the employee department: ')
job = input('Enter the employee job title: ')
entry = Employee.Employee(empyloyee_id, name, dept, job)
dictionary[empyloyee_id] = entry
print('Employee added succesfully')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Change an employee
def change(dictionary):
# If user-entered ID is in dictionary, allow them to change the info
employee_id = get_int_input(
'Enter the employee ID you would like to change: ')
if employee_id in dictionary.keys():
name = input('Enter new employee name: ')
dept = input('Enter new employee department: ')
job = input('Enter new employee job title: ')
entry = Employee.Employee(employee_id, name, dept, job)
dictionary[employee_id] = entry
print('Employee changed successfully.')
else:
print('That employee ID was not found.')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Delete an employee
def delete(dictionary):
# If user-entered ID is in dictionary, delete the entry
employee_id = get_int_input(
'Enter the employee ID you would like to remove: ')
if employee_id in dictionary.keys():
del dictionary[employee_id]
print('Employee removed successfully')
else:
print('That employee ID was not found.')
# Offer the user the menu of choices again from main()
proceed = True
return proceed
# Save the dictionary and quit the program
def save_quit(dictionary):
# Pickle the dictionary and save to a file
output_file = open('employee_data.dat', 'wb')
pickle.dump(dictionary, output_file)
output_file.close
# End the while loop in main() so program quits
proceed = False
return proceed
# STEP 2 - Main Function
def main():
# Try to open the existing dictionary file
try:
input_file = open('employee_data.dat', 'rb')
employee_dictionary = pickle.load(input_file)
input_file.close()
# If no such file exists, create a new dictionary
except:
employee_dictionary = {}
# While loop to continue until user chooses to quit
proceed = True
while proceed:
# Display user's option menu and ask for a choice
print('\n Employee Management System\n')
print('\t1. Lookup an employee')
print('\t2. Add a new employee')
print('\t3. Change an existing employee')
print('\t4. Delete an existing employee')
print('\t5. Save and Quit\n')
option_choice = get_int_input('Enter an option to continue: ')
# Map each choice to the functions below using a dictionary
options = {
1: lookup,
2: add,
3: change,
4: delete,
5: save_quit,
}
proceed = options[option_choice](employee_dictionary)
# STEP 3 - CALL MAIN
# Call the main function
main()
用法示例:
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 2
Enter the employee ID number: 123
Enter the name of the employee: asd
Enter the employee department: asd
Enter the employee job title: asd
Employee added succesfully
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 1
Enter the employee ID number: 123
Name: asd, ID Number: 123, Department: asd, Job Title: asd
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 3
Enter the employee ID you would like to change: asd
Error: Enter an integer, try again...
Enter the employee ID you would like to change: 123
Enter new employee name: zxc
Enter new employee department: zxc
Enter new employee job title: zxc
Employee changed successfully.
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 1
Enter the employee ID number: 123
Name: zxc, ID Number: 123, Department: zxc, Job Title: zxc
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 4
Enter the employee ID you would like to remove: 123
Employee removed successfully
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 1
Enter the employee ID number: 123
That ID number was not found.
Employee Management System
1. Lookup an employee
2. Add a new employee
3. Change an existing employee
4. Delete an existing employee
5. Save and Quit
Enter an option to continue: 5