编写程序,能够输入10个学生的学号和姓名,并将学生按照学号由小到大排序。当输入一个学号时能用折半查找法找出该学生的姓名。 2、分析与提示: 分别编写3个函数,一个函数inputdata用于完成10个学生的数据的录入,一个函数sort用于按学号进行排序,一个函数search用折半查找法找出指定学号的学生姓名。 3、将这三个函数定义为外部函数然后调用它们完成功能
时间: 2024-02-29 12:53:15 浏览: 77
编程实现:(1) 键入某组学生(共 10 人)的学号、姓名、组成原理考试 成绩、数据结构考试成绩、汇编语言考试成绩
好的,我了解了您的要求,下面是代码实现:
```python
# 定义外部函数
def inputdata():
# 定义学生列表
students = []
# 循环输入学生信息
for i in range(10):
sid = input("请输入学生学号:")
name = input("请输入学生姓名:")
# 将学生信息添加到列表中
students.append((sid, name))
# 返回学生列表
return students
def sort(students):
# 按学号排序
students.sort(key=lambda x: x[0])
# 返回排序后的学生列表
return students
def search(students, sid):
# 定义折半查找函数
def binary_search(lst, target):
low = 0
high = len(lst) - 1
while low <= high:
mid = (low + high) // 2
if lst[mid][0] == target:
return lst[mid][1]
elif lst[mid][0] < target:
low = mid + 1
else:
high = mid - 1
# 如果没有找到,返回None
return None
# 调用折半查找函数,返回学生姓名
return binary_search(students, sid)
# 调用外部函数完成功能
students = inputdata()
students = sort(students)
sid = input("请输入要查找的学生学号:")
name = search(students, sid)
print("该学生姓名为:", name)
```
以上代码中,我们定义了三个外部函数 `inputdata`、`sort` 和 `search`,分别用于输入学生信息、按学号排序和折半查找。在主程序中,我们先调用 `inputdata` 函数输入学生信息,然后调用 `sort` 函数按学号排序,最后调用 `search` 函数折半查找指定学号的学生姓名,并输出结果。
注意,在 `search` 函数中,我们定义了一个内部函数 `binary_search`,用于实现折半查找算法。这样做的好处是,内部函数只在外部函数中使用,避免了命名冲突和代码冗余。
阅读全文