Python学习:文件、异常和测试
1.目前只验证了txt和json文件的读写;
2.正确使用异常增强程序的健壮性和可读性;
3.编写测试代码可保证程序的正确性。
"""Employee moudle"""
import json
class Employees():
"""class employees"""
def __init__(self, employees):
"""init employee"""
self.employee = {
'name':'', 'age': 0, 'sex': 'male',
'position': '', 'score': 0
}
self.employees = employees[:]
def employee_input(self):
"""Obtain employee information through user input"""
while True:
for key in self.employee.keys():
self.employee[key] = input("\nPlease give the empolyee's " + key + ": ")
if self.employee[key] == '':
break
if key == 'age' or key == 'score':
self.employee[key] = int(self.employee[key])
if self.employee['name'] != '':
self.employees.append(self.employee)
end_of_input = input("Do you want to continue? (Y/n) ")
if end_of_input.lower() != 'y':
break
return self.employee
def employee_writer(self,employees):
"""Store employee information to employee.json"""
employee_filename = 'employee.json'
with open(employee_filename, 'w') as f_obj:
json.dump(self.employees, f_obj)
def employee_information_name(self):
"""Describe what employee information is included"""
keys = ['']
employee_num = len(self.employees)
while employee_num:
employee_num -= 1
for key_temp in self.employees[employee_num].keys():
keys_num = 0
for key in keys:
if key_temp != key:
keys_num += 1
if keys_num == len(keys):
keys.append(key_temp)
keys.pop(0)
#~ print(keys)
return keys
def employee_key_sort(self, keys):
"""Put employee position last"""
keys_num = 0
keys_len = len(keys)
for key in keys:
if key == 'position':
keys[keys_num ] = keys[keys_len -1]
keys_num += 1
keys[keys_len -1] = 'position'
return keys
def employee_information_print(self):
"""Print employee information"""
keys = self.employee_information_name()
self.employee_key_sort(keys)
message = '\n'
for key in keys:
message += key + " "
message += '\n'
employee_num = len(self.employees)
while employee_num:
employee_num -= 1
for key in keys:
if key == 'age' or key == 'score':
message += str(self.employees[employee_num][key]) + " "
else:
message += self.employees[employee_num][key] + " "
message += '\n'
print(message)
def employee_rank(self, key):
"""Rank employees based on key"""
try:
values = []
employee_num = len(self.employees)
while employee_num:
employee_num -= 1
values.append(self.employees[employee_num][key])
values.sort(reverse = True)
value_temp = 0
for value in values:
if value == value_temp:
values.remove(value)
value_temp = value
employees_sorted = []
value_num = len(values)
while value_num:
value_num -= 1
employee_num = len(self.employees)
while employee_num:
employee_num -= 1
if self.employees[employee_num][key] == values[value_num]:
employees_sorted.append(self.employees[employee_num])
self.employees = employees_sorted[:]
return self.employees
except KeyNotFoundError:
print(key + " is not a key in: ")
print(self.employee_information_name())
"""Test cases for class Employees"""
import unittest
import json
from employee_class_file import Employees
class TestEmployees(unittest.TestCase):
"""Test cases for class Employees"""
def setUp(self):
"""Create an Employees instance"""
employee_0 = {
'name': 'jack', 'age': 30, 'sex': 'male',
'position': 'intermediate engineer',
'score': 91
}
employee_1 = {
'name': 'nick', 'age': 25, 'sex': 'male',
'position': 'junior engineer',
'score': 85
}
employee_2 = {
'name': 'jason', 'age': 28, 'sex': 'male',
'position': 'super engineer',
'score': 95
}
employee_3 = {
'name': 'tom', 'age': 35, 'sex': 'male',
'position': 'expert',
'score': 98
}
employee_4 = {
'name': 'jacky', 'age': 33, 'sex': 'male',
'position': 'manager',
'score': 95
}
employees = [employee_0, employee_1, employee_2, employee_3, employee_4]
self.employees = Employees(employees)
def test_employee_input(self):
""""""
employee = self.employees.employee_input()
self.assertIn(employee, self.employees.employees)
def test_employ_rank(self):
""""""
employees_0 = self.employees.employee_rank('score')
num = 0
for employee in employees_0:
num += 1
if num == len(employees_0):
break
if employee['score'] <= employees_0[num]['score']:
flag = True
else:
flag = False
self.assertTrue(flag)
def test_employee_writer(self):
""""""
self.employees.employee_writer(self.employees)
with open('employee.json', 'r') as f_obj:
employees_0 = json.load(f_obj)
self.assertEqual(employees_0, self.employees.employees)
unittest.main()