一、编程题
1、36.学校图书馆为了方便查找管理书籍,给每本书编写了号码,[8,9,10,12,13,14,16,17,25,27],输入号码提示这本书号码排第几。例如:输入12,输出:要查找的书号12排第4 。请完善程序:lst=[8,9,10,12,13,14,16,17,25,27] hm=int(input('请输入书本号码')) ① i,j=0,n-1 b=-1 while ② : m=(i+j)//2 if ③ : b=m break elif hm>lst[m]: ④ else: j=m-1 if b==-1: print('要查找的书号['+str(hm)+']不在列表lst中。') else: print('要查找的书号['+str(hm)+']排第'+ ⑤ )
参考答案:① n=len(lst)② i<=j③ hm==lst[m]④ i=m+1⑤ str(n-m))
解析:【喵呜刷题小喵解析】:
这个程序的目标是在给定的书号码列表(lst)中查找特定的书号码(hm),并返回它在列表中的位置。
① 在开始查找之前,我们需要知道列表的长度,所以我们需要添加一行代码:n=len(lst)。
② 查找的过程通常使用二分查找算法,其条件是当i(开始位置)小于等于j(结束位置)时,继续查找。
③ 在中间位置m,我们需要检查hm是否等于lst[m]。如果等于,那么hm就在列表中找到,并且它的位置是m。
④ 如果hm大于lst[m],那么hm肯定在m的右侧,所以我们需要更新i=m+1。
⑤ 如果hm小于lst[m],那么hm在m的左侧,或者hm不在列表中,所以我们需要更新j=m-1。
⑥ 如果hm不在列表中,我们需要打印出“要查找的书号[hm]不在列表lst中。”的信息。
⑦ 如果hm在列表中,我们需要打印出“要查找的书号[hm]排第[n-m]”的信息,其中n是列表的长度,m是hm在列表中的位置。注意,列表的索引是从0开始的,所以我们需要用n-m来得到hm在列表中的位置。
2、37.有一个“/data/书籍存单.csv”文件,内容如下图所示。小明编写代码,想查询小说《封神榜》的价格,请补充代码中缺失的部分。
with open('/data/书籍存单.csv', 'r', encoding='utf-8') as f:
for line in f.readlines():
a = ① .split(",")
if a[0] == "封神榜" :
print( ② )
参考答案:① line② a[2]
解析:【喵呜刷题小喵解析】:
根据题目中的代码和图片信息,我们可以得出以下结论:
1. 代码中的`with open('/data/书籍存单.csv', 'r', encoding='utf-8') as f:`表示打开一个名为“/data/书籍存单.csv”的文件,并指定编码方式为utf-8。
2. 接下来的`for line in f.readlines():`表示逐行读取文件内容。
3. 在`for`循环中,`line`表示当前读取的行,我们需要将其赋值给变量`a`,以便后续处理。因此,①处应填写`line`。
4. 接下来,代码使用`split(",")`将每行的内容按逗号分割成多个字段,并将结果存储在变量`a`中。
5. 代码通过`if a[0] == "封神榜":`判断当前行是否包含小说《封神榜》的名称。如果是,则执行后续操作。
6. 由于题目要求查询《封神榜》的价格,而价格应该位于逗号分割后的第三个字段,因此②处应填写`a[2]`。
综上所述,代码中的①处应填写`line`,②处应填写`a[2]`。
3、38.当我们过马路的时候,经常会遇到红绿灯,你知道这些信号灯的时长是怎么来的吗?若要用python分析计算人行马路最短绿灯时长,我们需要知道马路的宽度s,行人的步行速度v以及行人的反应时长t0,因为绿灯的最短时长计算公式为t=s/v+t0。
不同的人有不同的行走速度。通常在正常成人、老人、小孩的步行速度中,应选取老人或者小孩的数据进行计算比较合理。
用Python模拟编写绿灯最短时长程序和测试输出结果(测试输入马路宽度为15)分别如下,请补全划线处代码:
v=1.2 #设置行走速度
t0=1 #设置行人反应时长
s=int(input("请输入马路的宽度(米):"))
t= ①
print(t)
\#观察发现,在实际生活中,绿灯显示时长不可能为小数,因此若要上述输出结果正常,可以修改print(t)语句,那么你会如何修改?请在下方填入你的代码。
if t>int(t):
print( ② )
elif t==int(t):
print( ③ )
参考答案:br />① s/v+t0② round(t)③ int(t)
解析:【喵呜刷题小喵解析】
首先,根据题目给出的信息,我们知道绿灯的最短时长计算公式为t=s/v+t0。因此,在程序中,我们需要计算这个公式来得到t的值。
然后,题目中提到,在实际生活中,绿灯显示时长不可能为小数,因此我们需要将t的值四舍五入或者取整。观察代码,我们发现有一个条件语句,判断t是否为整数。如果t大于取整后的t,那么说明t不是整数,我们需要将t四舍五入到最近的整数。如果t等于取整后的t,那么说明t已经是整数,我们直接输出t即可。
因此,在程序中,我们需要将①处填为s/v+t0,将②处填为round(t),将③处填为int(t)。这样,程序就可以正确地计算出绿灯的最短时长,并且保证输出的绿灯时长为整数。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!