这个问题要求我们书写几个函数: 1) 输入10个职工的姓名和职工号; 2) 按职工号从小到大排序,姓名也相应改变顺序; 3) 要求输入一个职工号,用折半法找出该职工的姓名,从主函数输入要查找的职工的职工号,输出该职工的姓名。
时间: 2024-05-16 09:13:48 浏览: 17
好的,下面是代码实现:
```python
# 定义职工类
class Employee:
def __init__(self, name, id):
self.name = name
self.id = id
# 输入10个职工的姓名和职工号
def input_employee():
employees = []
for i in range(10):
name = input("请输入第{}个职工的姓名:".format(i+1))
id = int(input("请输入第{}个职工的职工号:".format(i+1)))
employee = Employee(name, id)
employees.append(employee)
return employees
# 按职工号从小到大排序,姓名也相应改变顺序
def sort_employee(employees):
employees.sort(key=lambda x:x.id)
# 折半查找职工姓名
def find_employee_name(employees, id):
left = 0
right = len(employees) - 1
while left <= right:
mid = (left + right) // 2
if employees[mid].id == id:
return employees[mid].name
elif employees[mid].id < id:
left = mid + 1
else:
right = mid - 1
return None
# 测试
if __name__ == '__main__':
employees = input_employee()
sort_employee(employees)
id = int(input("请输入要查找的职工的职工号:"))
name = find_employee_name(employees, id)
if name:
print("职工号为{}的职工姓名为{}".format(id, name))
else:
print("找不到职工号为{}的职工".format(id))
```
注意:在输入职工号时,要将输入的字符串转换为整数类型,否则会导致折半查找时无法比较大小。
阅读全文