A38134. 新学期到了, 学校接收了一批捐赠的图书, 小明编写了一个简单的程序用来管理图书, 并支持借阅功能。 为了提高查找图书的效率, 小明使用了二分查找法来设计图书借阅功能。以下是小明编写的图书借阅管理程序, 请你补全代码。library=dict() #用字典生成一个图书管理数据结构(字典的键为编号, 字典的值为[' 书名' , 本数])#书籍入库nums=len(library) #先计算图书编号总…
题目描述
新学期到了, 学校接收了一批捐赠的图书, 小明编写了一个简单的程序用来管理图书, 并支持借阅功能。 为了提高查找图书的效率, 小明使用了二分查找法来设计图书借阅功能。以下是小明编写的图书借阅管理程序, 请你补全代码。
library=dict() #用字典生成一个图书管理数据结构(字典的键为编
号, 字典的值为[' 书名' , 本数])
#书籍入库
nums=len(library) #先计算图书编号总数
library[nums+1]=[' 红楼梦' , 5] #在编号总数的基础上继续添加新书:
library[新编号]=[' 书名' , 本数]
library[nums+2]=[' 西游记' , 10]
library[nums+3]=[' 水浒传' , 5]
library[nums+4]=[' 三国演义' , 10]
print(library)
blist=list(library. keys() )
#按书名借阅:
bookname=input(' 请输入借阅图书名称: ' )
min_v = blist[0]
max_v = blist[-1]
turns=0
while min_v <= ____① ____:
turns += 1
cur = (min_v + max_v) ____② ____
print(cur)
if library[cur][0] == ____③ ____:
if library[cur][1] > 0:
library[cur][1] -= ____④ ____
print(' 《%s》 借阅成功! ' %bookname)
else:
print(' 抱歉, 您选择的书籍已被借完! ' )
break
elif blist[cur-1] > cur:
min_v = ____⑤ ____
else:
max_v = ____⑥ ____
print("经过%d 轮二分查找, 完成图书的搜索。 "%turns)
参考答案
#学校图书管理系统
library=dict() #用字典生成一个图书管理数据结构(字典的键为编号, 字典的值为
['书名',本数])
#书籍入库
nums=len(library) #先计算图书编号总数
library[nums+1]=['红楼梦',5] #在编号总数的基础上继续添加新书: library[新编号]=['书名
',本数]
library[nums+2]=['西游记',10]
library[nums+3]=['水浒传',5]
library[nums+4]=['三国演义',10]
print(library)
blist=list(library.keys())
#按书名借阅:
bookname=input('请输入借阅图书名称: ')
min_v = blist[0]
max_v = blist[-1]
turns=0
while min_v <= max_v:
turns += 1
cur = (min_v + max_v) // 2
print(cur)
if library[cur][0]==bookname:
if library[cur][1] > 0:
library[cur][1] -= 1
print('《%s》 借阅成功!'%bookname)
else:
print('抱歉, 您选择的书籍已被借完! ')
break
elif blist[cur -1] > cur:
min_v = cur +1
else:
max_v = cur -1
print("经过%d 轮二分查找, 完成图书的搜索。 "%turns)答案解析
评分标准:
(1) max_v; (2 分)
(2) // 2; (2 分)
(3) bookname; (3 分)
(4) 1; (3 分)
(5) cur +1; (3 分)
(6) cur -1。 (3 分)