内容正文:
第六节 简单算法及其程序实现
一尧选择题
1. 计算球表面积的过程如下院
淤输入球半径 r曰
于仔=3.14曰
盂计算球表面积为 4仔r2曰
榆输出球表面积 S遥
求解该问题适合使用的算法是 渊 冤
A. 排序算法 B. 枚举算法
C. 解析算法 D. 查找算法
2. 下列问题中袁适合使用枚举算法解决的有
渊 冤
淤找出 50内的所有素数
于计算已知半径的圆的周长
盂列举 10000以内所有 13的倍数
榆某次测试成绩排名
虞在某字符串中找出所有数字
A. 淤于盂 B. 淤盂虞
C. 于盂榆 D. 于榆虞
3. 水往低处流袁下雨时道路上的低洼地(两边
高中间低的凹处)总会有积水遥 例如某地面
高度数据为野0 0 2 1 2 0 0 1冶袁则该地面
有 2处低洼地遥 实现该算法的程序段如下院
gd越input ("请输入地面高度 袁以空格间隔
开院")
h越list(map(int,gd.split(","))) # 将字符串转
换为列表袁例如野1 0 2冶袁转换为咱1,0,2暂
cnt越0
f越False
for i in range(1,len(h)):
if 淤 :
f越True
elif h咱i原1暂<h咱i暂 and f:
cnt垣越1
于
print("该地面有",cnt,"处低洼地遥 ")
上述代码中画线处应填入的代码是 渊 冤
A. 淤h咱i暂>h咱i垣1暂 于f越False
B. 淤h咱i暂>h咱i垣1暂 于f越True
C. 淤h咱i原1暂>h咱i暂 于f越False
D. 淤h咱i原1暂>h咱i暂 于f越True
二尧非选择题
4. 机器人移动路线管理遥机器人在一平面内按
照程序预置数据来完成移动操作渊如图 a所
示冤袁规则如下院淤只能水平或垂直方向移
动袁方向取值院上要U尧下要D尧左要L尧右要R袁
不能走斜线曰每次移动 1~5 单位距离曰于从
起点出发袁经过若干步后袁尽可能返回到起
点袁如不能自动返回袁则计算剩余移动次数遥
相关程序代码如下袁请在画线处填入合适的
代码遥
渊1冤解决上述问题的主程序如下院
bp越startpos() #输入起点坐标
dirt越咱暂 #移动方向
step越咱暂 #移动距离
readdata() # 从 data.csv 文件中读取移
动数据
pos越咱bp暂 #从起点开始存储所有经过
点的 x尧y坐标
for i in range(0袁len(dirt)): # 利用预置数
据移动
tmp越move(pos咱i暂,dirt咱i暂,step咱i暂)
100
于2
1
淤2
00
图 b
图 a
位置 起点 A B C D E 终点
移动数据
坐标点 咱0袁0暂 咱-3袁0暂 咱-3袁4暂 咱2袁4暂 咱2袁-1暂 咱0袁-1暂 咱0袁0暂
咱"L"袁3暂 咱"U"袁4暂 咱"R"袁5暂 咱"D"袁5暂 咱"L"袁2暂 咱"U"袁1暂
x
y
O D
C
EA
B
91
pos.append(tmp)
print("经过的位置点如下所示院","n",
pos)
if tmp越越 淤 : #判断能否返回起点
print("可以直接返回起点位置浴 ")
else:
print("不能直接返回起点位置浴 ",end越"")
stpx越gettimes(pos咱0暂咱0暂,pos咱原1暂咱0暂)
stpy越gettimes(pos咱0暂咱1暂,pos咱原1暂咱1暂)
print ("至少需要移动 "垣str (stpx垣stpy)垣
"次才能返回起点位置浴 ")
渊2冤编写函数 startpos()袁功能为输入起点坐
标袁返回坐标的值袁返回值类型为列表遥代码
如下院
def startpos():
x越int(input('输入起点的 x坐标院'))
y越int(input('输入起点的 y坐标院'))
return 于
渊3冤编写 readdata()函数袁功能为从 CSV文件
中读取预置的移动数据遥 代码如下院
def readdata():
import csv
f越open("data.csv","r",encoding越"utf原8")
f_csv越csv.reader(f )
title越next(f_csv) #读取标题行
for line in f_csv:
dirt.append(line咱0暂)
step.append( 盂 )
f.close()
渊4冤编写位置移动函数 move()袁实现计算移
动到的新位置遥 代码如下院
def move(pos,dr,lg): #位置移动
new_pos越咱0,0暂
if dr越越"U":
x越0;y越1
elif dr越越"D":
x越0;y越原1
elif dr越越"L":
x越原1;y越0
elif dr越越"R":
x越1;y越0
new_pos咱0暂越pos咱0暂垣x*lg
榆
return new_pos
渊5冤编写函数 gettimes()袁计算剩余移动次数遥
代码如下院
def gettimes(p1,p2):
p越abs(p1原p2)//5
if abs(p1原p2)%5浴 越0:
虞
return p
淤
于
盂
榆
虞
5. 一个数袁求它的所有数位的平方和袁得到的
新数再次求其所有数位的平方和袁 如此重
复袁最终结果为 1袁则该数为快乐数遥 如正
整数 129院
12+22+92=86袁
82+62=100袁
12+02+02=1袁
129是一个快乐数遥
渊1冤根据以上规则袁数 19 渊选
填院是/否冤快乐数遥
渊2冤编写程序如下袁请在画线处填入合适的
代码遥
def square_sum(n):
temp=0
while n>0:
淤
n//=10
return temp
res=咱暂
num=int(input("请输入一个正整数院"))
于
while n! =1:
res.append(n) #将 n的值添加到列表
res的尾部
n= 盂
if n in res:
break
if n==1:
print(num,"是快乐数! ")
92
else:
print(num,"不是快乐数! ")
淤
于
盂
6. 检查数学表达式中的括号是否配对是计算
机进行数学计算的重要环节遥 括号序列野( )
( )冶中的野(冶与野)冶是配对的袁而序列野( ) ) (冶
中的括号则是不配对的遥 对于不配对的序
列袁可以将野(冶修改为野)冶袁或者将野)冶修改为
野(冶来实现配对遥如图所示是括号序列野( ) )
( ( )冶通过不同的修改方案所需要的修改次
数袁最少修改次数为 2遥
请回答下列问题院
渊1冤若括号序列为野( ) ) ) ) ( ) )冶袁最少需要
修改 次才能使得括号序列中
的括号配对遥
渊2冤编写程序袁计算修改括号序列使其配对
的最少次数遥 部分 Python程序如下袁请在画
线处填入合适的代码遥
s=input() #输入括号序列袁序列中仅包含
野(冶野)冶两种字符袁且长度为偶数
x=0
ans=0
for i in range(len(s)):
if s咱i暂=='(':
淤
elif s咱i暂==')' and x>=1:
x-=1
elif s咱i暂==')' and 于 :
ans+=1;x+=1;
ans+= 盂
print(ans)
淤
于
盂
7. 小明在学习历史时袁从公元 1000年至今袁发
现有的日期特别的野优美冶袁如 1010年 01年
01日袁2021年 12月 02日袁小陈把它们称为
野对称日冶遥 为了寻找指定年份中的野对称
日冶袁小陈编写了 Python程序袁程序运行结果
如图所示遥
渊1冤Python 程序如下袁请在画线处填入合适
的代码遥
淤
于
盂
渊2冤程序加框处代码有错袁请改正院
遥
def check(k):
check=True
y=int(k咱0:4暂)
m=int(k咱4:6暂)
d=int(k咱6:8暂)
flag=0
if m<1 or m>12:
check=False
if (y%4==0 and y%100! =0 or y%400
==0) and 淤 : #判断闰年时的相应
情况
flag=1
if 于 :
check=False
盂
ks=int(input("请输入开始年份院"))
js=int(input("请输入结束年份院"))
lst=咱31,28,31,30,31,30,31,31,30,31,30,31暂
for i in range(ks,js+1):
k1=str(i)
k1=k1+k1
if check(k1)==True:
print(k1)
8. 如图所示的算式表示一个四位数乘以 9袁积
还是一个四位数遥算式中相同的字母表示相
同的数字袁不同的字母表示不同的数字遥 小
明为了求出算式中的 a尧b尧c尧d 各代表什么
数字袁编写了如下的程序遥
93
a,d= 淤
for b in range( 于 ):
for c in range(b+1,9):
if a==b or a==c:
continue
if ( 1000*a + 100*b + 10*c + d ) *9 ==
盂 :
print(a,b,c,d)
渊1冤小明解决这个问题采用的是
算法遥
渊2冤请在画线处填入合适的代码遥
淤
于
盂
9. 某书平台在新书上架前会邀请 10位专业评
审与 10 位大众评审给新书进行打分袁评分
区间为咱1,20暂袁得分计算规则为将专业评审
均分的 60%与大众评审均分的 40%求和并
取整遥 再根据得分给出推荐等级袁1 分为
野翌冶袁2 分为野翌翌冶袁5 分可以升级为野阴冶袁
最高推荐等级为野阴阴阴阴冶遥 进行统计时袁
若两组评审中任一组评审人数少于 7 人则
本轮打分无效遥 请回答下列问题遥
渊1冤某新书计算后得分为 11分袁则推荐等级
为渊填写等级符号袁从高到低排列冤 遥
渊2冤实现上述功能的部分 Python 程序如下袁
请在画线处填入合适的代码遥
'''
读取各评审的打分袁存入 s袁且无异常数据袁
如 s=咱"A12","B20","B7","A6","B6"噎暂袁野A冶
表示专业评审袁野B冶表示大众评审袁代码略遥
'''
fa=fb=ca=cb=0
for i in s:
淤
if i咱0暂=="A":
fa+=int(x)
ca+=1
elif i咱0暂=="B":
fb+=int(x)
cb+=1
if 于 :
score=int(fa/ca*0.6+fb/cb*0.4)
x=score%5
盂
grade="阴"*y+"翌"*x
print("推荐度为:"+grade)
else:
print("本轮评分需重新进行浴 ")
淤
于
盂
10. 寻找字符串中连续数字渊全部分解为 1位数冤
之和为 s的全部字串袁如字符串野20210521冶
中和为 6 的字串为野105冶遥 实现该功能的
Python程序如下袁运行界面如图所示遥 请在
画线处填入合适的代码遥
a=input("输入数字字符串院")
i=0;j=0;s=6
sum=0
flag=False
while j<len(a):
淤
sum+=int(c)
while sum>s:
n=a咱i暂
于
i+=1
if sum==s:
print("符合条件的字串为院", 盂 )
flag=True
榆
if not flag:
print("没有符合要求条件的字串为院")
淤
于
盂
榆
伊
a
9
d
b
c
c
b
d
a
94
为野T冶袁chr((18+26-2)%26+65)的值为野Q冶袁继续推
导袁可得 A正确袁但此方法效率太低遥 观察可知奇
数位渊或偶数位冤上的字符 ASCII码刚好相差 2袁
而 D中野Z冶和野Y冶相差 1袁这是不可能的遥
13. 渊1冤淤v越int(s咱j:i暂) 于k%2越越1 渊2冤7
揖解析铱渊1冤淤变量 s存储输入的数据袁遇到逗号代
表一个数字的结束遥 变量 j用于存储每个数字的
起始位置袁下一个数字起始位置为 i垣1遥 于坐标
(x,y)两个数字交替出现袁第奇数个是 x袁第偶数个
是 y遥 渊2冤变量 k记录第几个数字袁如果是第偶数
个袁则代表坐标(x,y)两个数字均提取完成袁计算距
离袁并累加距离袁遇到逗号袁就会执行 k越k垣1袁总共
6个逗号袁k的初值为 1袁最终变为 7遥
14. 渊1冤淤s咱i暂==s咱i-1暂 于i+1 渊2冤最长连续相同
字符为院BBBB
揖解析铱渊1冤当 s咱i暂==s咱i-1暂时袁说明相邻字符相
同袁使用变量 c统计连续相同字符的长度曰变量 d
存储最大长度袁变量 r存储最长连续字符的右边
界遥 故当 c>=d时袁需要更新 d和 p的值袁根据函
数返回值 s咱p-d:p暂可知袁p值是取不到的袁故填入
代码为 i+1遥 渊2冤字符串野ABBAAAABBBBCBD冶中
野AAAA冶和野BBBB冶长度相同袁返回第二个满足条
件的子串野BBBB冶遥
15. 渊1冤检查整数 x是否与列表 list1中的元素重复
渊2冤淤x in list1 于 list2咱num//10暂+=1渊或 list2
咱num//10暂=list2咱num//10暂+1冤 盂i%10==9
揖解析铱渊2冤根据 check函数的功能可知袁淤处代码
为 x in list1曰于处循环的功能是统计各区间段中
整数的个数袁根据程序最后的 for循环可知袁区间
咱10,19暂内的数统计在 list2咱1暂中袁其他区间的统
计原理也是如此曰盂处代码的功能是以每行 10
个数输出随机整数遥
16. 渊1冤0臆j<128渊或其他等价描述冤 渊2冤C 渊3冤实
现原图像的水平翻转并以灰度模式显示
揖解析铱渊1冤图像的水平和垂直像素均为 128袁根据
野for j in range(cols)冶袁可知其范围为咱0,127暂遥 渊2冤C
选项的语句应该修改为野img咱i,j暂,img咱i,cols-j-1暂=
img 咱i,cols -j -1暂,img 咱i,j暂冶遥 渊3冤语句 野plt.imshow
(img,cmap="gray")冶完成图像变成灰度图像袁语句
野img咱i,j暂,img咱i,cols-j-1暂=img咱i,cols-j-1暂,img咱i,
j暂冶可完成图像水平翻转遥
第六节 简单算法及其程序实现
1. C揖解析铱解析算法的基本思想是根据问题的前提
条件与所求结果之间的关系袁找出求解问题的数学
表达式袁并通过对其计算来实现问题的求解遥
2. B揖解析铱枚举算法的基本思想是把问题所有可能
的解一一列举袁然后判断每一个列举出的可能解是
否为正确的解遥 本题中袁只有淤盂虞适合使用枚举
算法解决袁于适合使用解析算法袁榆适合使用排序
算法遥
3. C揖解析铱flag是下降段的标志袁从索引1开始遍历袁
若当前值比前一位数小袁表示处理下降段袁将 flag
置为 True遥 在下降过程中袁若当前值比前一位的数
大袁表示从该位置开始处理上升段袁因此将增加一
个下降段袁同时将标志设置为 False遥
4. 淤pos咱0暂渊或 bp冤 于咱x,y暂 盂int(line咱1暂)
榆new_pos咱1暂越pos咱1暂垣y*lg 虞p越p垣1
揖解析铱淤起点坐标保存在列表 bp 索引为零的位
置遥 于输入起点坐标袁返回坐标咱x袁y暂的值袁返回值
类型为列表遥 榆new_pos咱0暂是横坐标袁new_pos咱1暂
是纵坐标遥 虞变量 p保存的是移动次数遥 根据 p越
abs(p1原p2)//5袁如果条件语句不满足渊能整除 5冤袁函
数值直接返回 p遥
5. 渊1冤是 渊2冤淤temp+=(n%10)**2 于n=num
盂square_sum(n)
揖解析铱渊1冤结合题干袁分析 19是否为快乐数的过程
如下院12+92=82袁82+22=68袁62+82=100袁12+02+02=1袁所
以 19是快乐数遥渊2冤淤函数 square_sum(n)的功能是
依次提取数字 n每个数位上的数字袁并累加其平方
和袁用变量 temp统计遥于此空是用来声明变量 n并
赋值遥 盂利用函数 square_sum(n)袁不断去求得其每
个位置上的数字的平方和遥
6. 渊1冤2 渊2冤淤x+=1渊或 x=x+1冤 于x==0渊或<=0冤
盂x//2
揖解析铱渊1冤括号序列野( ) ) ) ) ( ) )冶需要修改为
野( ) ( ( ) ( ) )冶袁修改次数为 2次遥 渊2冤x的初始值
为 0袁当 s咱i暂的值为野)冶时且 x 的值大于 1 时袁x 的
值减 1袁即刚好出现一对括号袁可推断出 x 对应左
括号的数量遥 由此可知 ans对应需要修改的次数遥
淤处院当 s咱i暂的值等于野(冶时袁则左括号数量加 1袁则
此处填 x+=1遥 于处院需要判定右括号时分为两种情
况袁一种是左括号刚好和右括号匹配袁则左括号数
量减 1袁即第一条 elif语句曰第二种情况为出现右括
号袁在这之前没有与之相匹配的左括号袁此时袁左括
号的数量应为 0袁此时需要修改括号袁即 x+=1袁且
要增加修改次数袁即 ans+=1袁此时刚好与第二个 elif
匹配袁则次数填 x==0或 x<=0遥 盂处院在 for循环语
句执行完后袁由于我们只将右括号修改为左括号袁
未将左括号修改为右括号袁可能存在循环结束时袁
左括号的数量大于 0的情况袁 此时 x的数量刚好
是一对左右括号的两倍袁只需让 x整除 2后袁则为
未处理的括号对数袁加上后则为总修改次数遥 如括
号序列野( ) ) ) ) ( ) )冶修改完后为野( )( ( ( ( ) )冶袁
此时还存在两个左括号袁那么计算完后 x 的值为
2袁即还需进行一次修改遥 即答案为 x//2遥
7. 渊1冤淤m==2 于check==True and d>lst咱m-1暂+flag
渊或 check==True and (d<1 or d>lst咱m-1暂+flag)冤
盂return check 渊2冤k1=k1+k1咱::-1暂
揖解析铱渊1冤淤空根据注释该条 if 语句是为了判断
是否为闰年的相应情况袁考虑到闰年只有 2月份和
其他年份的天数不一样袁再看满足条件表达式后袁
201
flag=1袁因此该空应该为月份的判断是否为 2月份遥
于空联系上下代码袁以及满足表达式后 check=False袁
可明确该空需要填写表达式的功能是不能满足题
目要求中的野对称日冶袁则首先需要检验 check==True袁
因为第一个 if已经检验了 m的值袁月份已经满足
要求袁故还需要检验每个月的天数是否符合要求袁
每月的天数存放在列表 lst中袁可以用 d>lst咱m-1暂+
flag来表示遥 盂空根据代码结构可知是为了返回调
用函数的结果遥 渊2冤根据上文可知 k1仅仅是年份
值袁需要构造月份和日期袁同时根据题目要求的野对
称日冶袁月份和日期刚好和年份相反遥
8. 渊1冤枚举 渊2冤淤1,9 于9 盂d*1000+c*100+
b*10+a
揖解析铱渊1冤for循环遍历所有可能的解袁然后逐一判
断每个答案是否符合条件袁属于枚举算法遥 渊2冤淤a
的值只能是 1袁a若等于 2以上的数字乘以 9袁结果
就会成为 5位数曰a是 1袁d只能是 9袁9*9个位数才
能取到 1遥 于根据 a==b or a==c得出 b的取值在
0~8之间袁若是和 a的值相同则跳过袁所以填写 9遥
盂正读和翻转等值袁则输出结果遥
9. 渊1冤阴阴翌 渊2冤淤x=i咱1:暂渊或 x=i咱1::暂或 x=咱1:len(i)暂
或其他等价表达式冤 于ca>=7 and cb>=7
盂y=score//5
揖解析铱渊2冤淤每个评审打分包括类型和分数两项袁
需要从字符串中将分数 x 切片切出曰于题干中规
定了两组评审中任意一组评审人数少于 7人则本
轮无效袁所以需要判断 ca尧cb中统计的两组评审人
数曰盂计算野阴冶的数量遥
10. 淤c=a咱j暂 于sum-=int(n) 盂a咱i:j+1暂 榆j+=1
揖解析铱淤根据下一行代码野sum+=int(c)冶可知袁此
处要对变量 c进行赋值袁并且 c的值为字符串型袁
易知变量 sum统计连续字串的和袁 变量 j为数字
字符串 a的索引袁故填入代码为 c=a咱j暂曰于当 sum
的值大于 s时袁需要减去连续字串中第一个累加
到 sum中的值袁然后将连续字串向后移动一位袁
变量 i表示连续字串的第一个位置索引袁代码野n=
a咱i暂冶表示取出该字符存储在变量 n中袁故填入代
码为 sum-=int(n)曰盂连续字串的第一个位置索引
为 i袁最后一个位置索引为 j袁故填入代码为 a咱i:j+
1暂曰榆变量 j为数字字符串 a的索引袁步长为 1袁故
填入代码为 j+=1遥
第四章 数据处理与应用
第一节 常用表格数据的处理
1. C
2. A
3. C揖解析铱2月没有 30日遥
4. B揖解析铱绝对引用的符号需要放在字母和数字的
前面遥
5. D揖解析铱相对引用随单元格变化袁绝对引用不随单
元格变化遥
6. C揖解析铱数据缺失问题最简单的处理方法是忽略
含有缺失值的实例或属性袁也可以采用平均值尧中
间值或概率统计值来填充缺失值曰异常数据不能直
接删除或忽略曰格式不一致的数据可根据后续分析
和挖掘的需要进行数据转换遥
7. B揖解析铱数据的质量直接影响数据分析的结果遥
8. 渊1冤=AVERAGE(H34:H40) 渊2冤B1袁B10:B16袁I1袁
I10:I16 渊3冤ABD
揖解析铱渊3冤A34是合并单元格袁排序时不可选择袁C
错误遥
第二节 编程处理数据
1. B揖解析铱按照索引提取值遥
2. C揖解析铱A. df1对象的行索引 index为默认索引 0尧
1尧2袁df1.at咱2,"姓名"暂即选取 df1对象中第 3行渊行
索引为 2冤野姓名冶列的值曰B. 输出结果中袁除索引
列外袁第 1列是野姓名冶袁第 2列是野信息分数冶袁第 3
列是野性别冶曰C. dfl咱1:2暂查看指定的行数据袁包含
起始值袁不包含终值曰D. 语句野df1咱"信息分数"暂=
40冶为赋值语句袁执行后袁所有的信息分数都会被修
改为 40遥
3. B揖解析铱程序利用字典创建 DataFrame对象袁然后
修改野化学冶列的值袁再计算野化学冶列的最大值与最
小值之差袁即 ans=94-83=11遥
4. C揖解析铱groupby()函数表示对各列或各行中的数据
进行分组袁然后对其中每一组数据进行不同的操
作袁mean()函数表示求平均值袁要求不同班级不同
性别的平均值袁groupby()函数的参数应为咱"班级","
性别"暂遥
5. A揖解析铱df咱"id"暂用于查看 df对象的野id冶列数据曰
df.tail(5)用于查看 df对象的尾 5行数据曰df.columns
用于查看 df对象的列标题曰df咱2:5暂用于查看 df对
象的第 2尧3尧4行遥
6. A揖解析铱df.groupby("学校 ").mean()是以学校为单位袁
统计各校学生各列的成绩平均值袁包括野语文冶遥
7. D揖解析铱该运行结果属于一维的数据结构 Series袁
需要运用 pandas模块遥 此外袁为了得到运行结果袁
算法必须包含至少一个输出遥
8. D揖解析铱该程序段创建了一个 Series对象 s1袁i遍
历 s1中的各个值袁res=1+6+7+9=23遥
9. D揖解析铱DataFrame对象 df2为对象 df1的前两行数
据袁对象 df3 为对象 df1 最后两行数据袁求出对象
df2中剩余积分的总和并赋值给 a袁求出对象 df3中
剩余积分的总和并赋值给 b袁最后求出 round(b/a,2)
的值袁输出结果为 0.82遥
10. B揖解析铱sort_values()函数表示排序袁默认纵向升
序排列袁若增加 ascending=False则表示降序排列遥
11. 渊1冤A 渊2冤淤lst咱i暂咱2暂>=h 于dic咱city暂=lst咱i暂咱1暂
渊3冤淤df咱df.获奖等级=="一等奖"暂渊或 df咱df咱"获
奖等级"暂=="一等奖"暂冤 于C
揖解析铱渊1冤B. sum()函数用于统计数值袁因此对
202