一、简答题
1、36.分解质因数
输入一个整数,分解质因数。例如:输入90,打印出90=2*3*3*5。请完善以下代码,运行程序。
target=int(input('输入一个整数:'))
print(target,'= ',end='')
if target<0:
target= ① (target)
print('-1*',end='')
flag=0
if target<=1:
print(target,end='')
flag= ②
while True:
if flag:
break
for i in range(2,int(target+1)):
if ③ :
print("%d"%i,end='')
if target==i:
flag=1
break
print('*',end='')
④
break
解析:
这是一个关于分解质因数的问题。给定的代码框架已经提供了基本的思路,我们需要完善其中的空缺部分。以下是详细的解析:
- 对于输入的整数target,首先需要判断其是否为负数。如果是负数,取其绝对值并进行分解质因数。因此,空缺①应填写abs(target)。
- 当输入的数小于或等于1时,直接打印该数即可,无需进行质因数分解。因此,在判断结束后,应将flag设为真(表示已经处理完毕),所以空缺②应填写flag=1。
- 在循环中,我们需要判断当前的数i是否是target的因数。如果是,就打印出来。因此,空缺③应填写条件判断语句target % i == 0。
- 当找到一个因数后,需要继续寻找其他的因数。因此,在打印当前因数后,需要继续循环寻找下一个可能的因数。所以空缺④应填写continue语句。
2、37.成绩系统
小王同学编写了一个成绩录入和查询系统,能实现输入多个互不相同的分数,自动进行从高到低排名,同时输入要查询的分数,可以获得相应同学的姓名。程序运行结果如下图所示,实现代码如下,请你补全空缺处。
n=int(input("请输入总人数:"))
name=[""]*n
score=[0]*n
\#输入功能,分别输入姓名与分数
for i in range(n):
name[i]=input("请输入第"+str(i+1)+"个人名:")
① =int(input("请输入第"+str(i+1)+"个分数:"))
\#排名功能
for i in range(n-1):
for j in range(0,n-1-i):
if score[j] ② score[j+1]:
score[j],score[j+1]=score[j+1],score[j]
name[j],name[j+1]=name[j+1],name[j]
print("——————各个同学分数排名如下——————")
print(name)
print(score)
\#查询功能
i=0
③
key=int(input("请输入要查询的分数:"))
b=-1
while i<=j and b==-1:
m=(i+j)//2
if score[m]==key:
b=m
elif score[m]<key:
j= ④
else:
i=m+1
if b==-1:
print("没有同学获得该分数!")
else:
print("分数为"+str(key)+"的同学是:"+ ⑤ )
解析:
这是一个关于成绩录入和查询系统的Python代码,需要补全空缺部分以实现相应的功能。我们来逐行解析代码并补全空白部分。
首先,需要创建一个列表来存储分数,并在循环中输入每个学生的分数。在第①处,我们需要将输入的分数存储在score列表中对应的位置,即score[i]。因此,该处的代码应为score[i]。
接下来是排名功能部分。这部分代码使用冒泡排序算法对分数进行排序,并将对应的名字也进行排序。在第②处,我们需要比较两个分数的大小以确定它们的排序顺序。因此,该处的代码应为">"表示大于。如果前一个分数大于后一个分数,则交换它们的位置。同时,名字列表中的对应元素也需要交换位置。排序完成后,打印出排名结果。
最后是查询功能部分。这部分代码使用二分查找算法查找指定分数的同学。在第③处,我们需要进入一个无限循环来执行查询操作。因此,该处的代码应为while True:。在循环中,根据输入的分数与中间值的比较结果来缩小查找范围。在第④处,如果中间值小于要查询的分数,那么查询范围缩小到中间值的右侧部分,因此该处的代码应为m-1。在找到匹配的分数后,打印出该分数的同学的姓名。在第⑤处,我们需要打印出找到的学生名字对应的名字列表中的元素,即name[b],其中b是找到的学生在列表中的位置索引。
3、38.统计总分
有下图左边名为“虚拟学校5年级学生数据.csv”的文件,要实现下图右边统计每位同学语、数、外三门学科的总分,小明编写了以下程序,请将红色 ①、② 两处的代码补充完整:
f = open('/data/ ① ','r',encoding='utf-8')
i = 1
for line in f:
s = ""
a = line.strip("").split(",")
if i >= 2 : #第一行是每列的标题,不用计算,要从第二行开始计算
s = str( ② ) + ' 的总分为:' + str(int(a[5]) +int(a[6]) +int(a[7]) )
i = i + 1
print(s)
f.close
解析:
根据题目描述,需要打开名为"虚拟学校5年级学生数据.csv"的文件进行读取。因此,在代码中的红色①处应填写文件名,即"虚拟学校5年级学生数据.csv"。在红色②处,根据程序逻辑和代码上下文,此处应该是要获取学生的姓名。由于第一行是标题行,不包含总分信息,所以从第二行开始计算总分,因此这里应该使用变量a的第0个元素(即姓名)来标识是哪个学生的总分。所以正确的代码应该是:a[0](或 ‘姓名’)。最后输出每个学生的姓名和总分。
喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!