python2级_python 二级考试操作题(一)

一、参照代码模板完善代码,实现下述功能。从键盘输入一个整数和一个字符,以逗号隔开,在屏幕上显示输出一条信息。

示例如下:

输入

10,@

输出

@@@@@@@@@@ 10 @@@@@@@@@@

输入输出示例

输入

输出

示例 1

10,@

@@@@@@@@@@ 10 @@@@@@@@@@

参考答案:

ContractedBlock.gif

ExpandedBlockStart.gif

1 a,x = input().split(',') # 请输入1个整数和1个符号,逗号隔开2 print(x*eval(a),a,x*eval(a))

View Code

要点:

1. 输入两个值组成的字符串,要用split()分割开

2.同时赋值给两个变量

3.利用eval得到数值做运算,给字符做乘法,得到需要的格式

二、参照代码模板完善代码,实现下述功能。从键盘输入一个由 1 和 0 组成的二进制字符串 s,转换为八进制数输出显示在屏幕上,示例如下:

输入:

1100

输出:

转换成八进制数是:14

输入输出示例

输入

输出

示例 1

1100

14

参考答案:

ContractedBlock.gif

ExpandedBlockStart.gif

1 s = input() #请输入一个由1和0组成的二进制数字串

2 d =03 whiles:4 d = d*2 + (ord(s[0]) -ord('0'))5 s = s[1:]6 print("转换成八进制数是:{:o}".format(d))7

View Code

要点:

1.print和format的格式用法,字符串的内置处理函数,切片

2.理解数据类型及其转换

三、参照代码模板完善代码,实现下述功能。文件 data.txt 文件中有多行数据,打开文件,读取数据,并将其转化为列表。统计读取的数据,计算每一行的总和、平均值,在屏幕上输出结果。

文件内容示例如下:

Chinese: 80,Math:85,English:92, Physical: 81,Art:85,Chemical:88

屏幕输出结果示例如下:

总和是:511.0,平均值是:85.17

1475022-20180917093549138-1442725799.png

输入输出示例

输入

输出

示例 1

从文件 data.txt 中读取

总和是:511.0,平均值是:85.17

参考答案:

ContractedBlock.gif

ExpandedBlockStart.gif

1 fi = open("data.txt", 'r')2 for l infi:3 l = l.split(',')4 s = 0.0

5 n =len(l)6 for cours inl:7 items = cours.split(':')8 s += eval(items[1])9 print("总和是:{},平均值是:{:.2f}".format(s,s/n))10 fi.close()

View Code

四、参照代码模板完善代码,实现下述功能,不得修改其它代码。使用 turtle 库的 turtle.circle() 函数

和 turtle.seth() 函数绘制同心圆套圈,最小的圆圈半径为 10 像素,不同圆圈之间的半径差是 40 像素,效果如下图所示。

1475022-20180917094237005-88738108.png

参考答案:

ContractedBlock.gif

ExpandedBlockStart.gif

1 importturtle2 r = 10

3 dr = 40

4 head = 90

5 for i in range (4):6 turtle.pendown()7 turtle.circle(r)8 r +=dr9 turtle.penup()10 turtle.seth(-head)11 turtle.fd(dr)12 turtle.seth(0)13 turtle.done()

View Code

要点:

1. 同心圆主要问题是要挪动画笔,用到 pendown 和 penup

2. 用循环来处理重画的个数

五、参照代码模板完善代码,实现下述功能。从键盘输入一个中文字符串变量 s,内部包含中文标点符号。

问题1:(8分)用 jieba 分词,计算字符串 s 中的中文词汇个数,不包括中文标点符号。显示输出分词后的结果,用”/ ”分隔,以及中文词汇个数。示例如下:

输入:

工业互联网”实施的方式是通过通信、控制和计算技术的交叉应用,建造一个信息物理系统,促进物理系统和数字系统的融合。

输出:

工业/ 互联网/实施/ 的/ 方式/是/ 通过/ 通信/控制/ 和/ 计算技术/的/ 交叉/ 应用/建造/ 一个/ 信息/物理/ 系统/ 促进/物理/ 系统/ 和/数字/ 系统/ 的/融合/

中文词语数是:27

问题2:(7分)在问题1的基础上,统计分词后的词汇出现的次数,用字典结构保存。显示输出每个词汇出现的次数,以及出现次数最多的词汇。如果有多个词汇出现次数一样多,都要显示出来。示例如下:

继续输出:

控制: 1

物理: 2

通信: 1

交叉: 1

互联网: 1

和: 2

是: 1

计算技术: 1

一个: 1

的: 3

数字: 1

促进: 1

信息: 1

方式: 1

建造: 1

应用: 1

系统: 3

通过: 1

实施: 1

融合: 1

工业: 1

出现最多的词是(的 系统):3 次

输入输出示例

输入

输出

问题 1

“工业互联网”实施的方式是通过通信、控制和计算技术的交叉应用,建造一个信息物理系统,促进物理系统和数字系统的融合。

中文词语数是:27

问题2

控制: 1

物理: 2

通信: 1

交叉: 1

互联网: 1

和: 2

是: 1

计算技术: 1

一个: 1

的: 3

数字: 1

促进: 1

信息: 1

方式: 1

建造: 1

应用: 1

系统: 3

通过: 1

实施: 1

融合: 1

工业: 1

出现最多的词是(的 系统):3 次

参考答案1:

ContractedBlock.gif

ExpandedBlockStart.gif

1 importjieba2 #问题一

3 #s = “工业互联网”实施的方式是通过通信、控制和计算技术的交叉应用,

4 #建造一个信息物理系统,促进物理系统和数字系统的融合。”

5

6 s = input("请输入一段中文,可以有标点:")7 ls =jieba.lcut(s)8 sym = ",。:;“”、!"

9 for each inls:10 if each insym:11 ls.remove(each)12 #剔除中文标点符号

13 str_to_output= "/".join(ls)14 print(str_to_output)15 print("中文词语数是:%d\n\n" %len(ls))16

17

18 print("--------我是两个问题的分割线------------\n\n")19

20

21

22 #问题二

23 d ={}24 for each inls:25 d[each] = d.get(each, 0) + 1

26 for key ind:27 print("{}:{}".format(key,d[key]))28 max =029 lss =[]30 #寻找出现最多的次数

31 for key ind:32 if max

35 #把出现最多的词语放在lss列表里

36 for key ind:37 if max ==d[key]:38 lss.append(key)39

40 str_to_output= " ".join(lss)41

42 print("出现最多的词是({}):{}次".format(str_to_output,max))

View Code

参考答案2:

ContractedBlock.gif

ExpandedBlockStart.gif

1 importjieba2 #s = '“工业互联网”实施的方式是通过通信、控制和计算技术的交叉应用,建造一个信息物理系统,促进物理系统和数字系统的融合。'

3 s = input("请输入一个中文字符串,包含逗号和句号:")4 s = s.replace(',','').replace('。','').replace('、','').replace('“','').replace('”','')5 k=jieba.lcut(s)6 d1 ={}7 maxc =08 wo = ''

9 for i ink:10 print(i, end= "/")11 d1[i] = d1.get(i,0) + 1

12 print("\n中文词语数是:{}".format(len(k)))13 for key ind1:14 if maxc

View Code

要点:

1. 用 jieba 分词处理词汇统计

2. 要处理掉输入的各种标点符号,用到replace()

3. 用字典保存各个词出现次数

4. 要遍历字典的键值对,找到最大的值,及其对应的键

六、一个人脸识别研究小组对若干名学生做了人脸识别的测试,将测试结果与被测试者的现场照片组合成文件名,写到了一个文件 dir_100.txt 中,每行是一个文件名的信息,示例如下:

['1709020621', '0']_116.jpg

['1709020621']_115.jpg

['1770603107', '1770603105', '0', '0']_1273.jpg

文件名各部分含义如下:

[‘识别出学号1’,‘ 识别出学号2’,…,‘0表示检测到人脸但未识别出人’]_照片的顺序编号.jpg

测试过程中,一个学生可能被抓拍到多张照片中,所以会在多个文件名中被识别,学号出现在多个文件名中;一张照片中,可能有多个人脸,但有些分辨率不够而识别不出来,文件名位置用‘0’代替学号。

使用字典和列表型变量进行数据分析,最终获取实际参加测试的学生人数和人均被测次数。

(1)读入 dir_300.txt 文件的内容,处理每一行文件名信息。将文件名中的学号内容以列表形式保存,丢掉‘0’的字串;照片的顺序编号作为字典的关键字,学号列表作为字典的值。转换后,显示字典中的每行信息,示例如下:

116:1709020621

115:1709020621

117:1709020621

1273: 1770603107,1770603105

(2)将该字典中的学号提取出来,构造另一个字典,以学号作为字典的关键字,累计学号出现的次数,将累计值作为字典的值。格式示例如下:

1709020621:3

1770603107:1

1770603105:1

(3)累计字典中关键字的个数,即为实际参加测试的学生人数;累加每个关键字对应的值,即为所有学号测试次数;与实际测试人数之比,即为人均被测次数。将实际参加测试人数和人均被测次数显示输出在屏幕上,示例如下:

实际参加测试的人数是:1024

人均被测次数是:2.7

输入输出示例

输入

输出

问题 1

从文件dir_50.txt读入

实际参加测试的人数是:1024

人均被测次数是:2.7

参考答案:

ContractedBlock.gif

ExpandedBlockStart.gif

1 picd ={}2 numd ={}3 fi = open("dir_50.txt",'r')4 for l infi:5 l=l.replace('\n','').split('_')## print(l[1])

6 if l[0] != '':7 lkey,lvalue = l[1][:-4],eval(l[0])8 lval =[]9 for v inlvalue:10 if v != '0':11 lval.append(v)12 iflval:13 lv= ','.join(lval)14 print("{}:{}".format( lkey,lv))15 picd[lkey] =lv16

17 fi.close()18 idd ={}19 for key inpicd:20 ids = picd[key].split(',')21 for num inids:22 idd[num] = idd.get(num,0) +1

23 #print(num,idd[num])

24 s =025 for key inidd:26 s +=int(idd[key])27 #print("{}:{}".format(key, idd[key]))

28 count =len(idd)29 print("实际参加测试的人数是:",count)30 print("人均被测次数是:{:.1f}".format(s/count))

View Code

要点:

1. 这是一个实际问题,解决问题的方法有实际的推广意义。问题的关键是要完成数据提取,然后才是分析统计

2. 文件的读写,打开关闭是基础

3. 读入文件要进行字符串的处理,按行,分割成列表

3. 数据提取:先取得文件里的有效内容,转换成列表,利用列表的切片,提取出照片编号和学号,放到字典picd里

4. 第二步数据分析,需要先从字典里把学号提取出来,为了便于统计每个学号被测的次数,再建一个字典idd

5. idd字典的键是学号,所以字典的len就是参加测试的人数

6. 为了计算平均测试次数,需要累计每个学号被测的次数,最后除以参加测试人数就得到结果

野生程序员一枚,有错误的地方希望各位大佬指正!

欢迎在评论区发表您自己的意见和看法

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值