Python学习:文件、异常和测试

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()

运行结果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值