全国计算机等级考试二级Python(2021年9月)备考笔记 第十四天

Python 二级等考(第三季)精品题5

单项选择题

第一题

在这里插入图片描述

第二题

在这里插入图片描述

第三题

在这里插入图片描述

第四题

在这里插入图片描述

第五题

在这里插入图片描述

第六题

在这里插入图片描述

第七题

在这里插入图片描述

第八题

在这里插入图片描述

第九题

在这里插入图片描述

第十题

在这里插入图片描述

第十一题

在这里插入图片描述

第十二题

在这里插入图片描述

第十三题

在这里插入图片描述

第十四题

在这里插入图片描述

第十五题

在这里插入图片描述

第十六题

在这里插入图片描述

第十七题

在这里插入图片描述

第十八题

在这里插入图片描述

第十九题

在这里插入图片描述

第二十题

在这里插入图片描述

第二十一题

在这里插入图片描述

第二十二题

在这里插入图片描述

第二十三题

在这里插入图片描述

第二十四题

在这里插入图片描述

第二十五题

在这里插入图片描述

第二十六题

在这里插入图片描述

第二十七题

在这里插入图片描述

第二十八题

在这里插入图片描述

第二十九题

在这里插入图片描述

第三十题

在这里插入图片描述

第三十一题

在这里插入图片描述

第三十二题

在这里插入图片描述

第三十三题

在这里插入图片描述

第三十四题

在这里插入图片描述

第三十五题

在这里插入图片描述

第三十六题

在这里插入图片描述

第三十七题

在这里插入图片描述

第三十八题

在这里插入图片描述

第三十九题

在这里插入图片描述

第四十题

在这里插入图片描述

程序设计题

第一题

在这里插入图片描述

#解法一
ls= input().split(',') #将从键盘上输入的用逗号隔开的字符串转换为列表
                       #例如输入:10,@  
                       #ls为['10', '@']
                       #ls[0]为'10' ,eval(ls[0])*2+len(ls[0])表达式值为22   
                       #ls[1]为'@'
print(ls[0].center(eval(ls[0])*2+len(ls[0]),ls[1]))
                       #'10'.center(22,"@")即为输出结果,考察字符串的center方法
#str.center(x,y) 会用字符串str构造一个新的字符串,
#新的字符串长度是x, 两边填充y。此处的x是数字,y是填充字符
# str:'10'
#   x:22
#   y:"@"
#输出结果为"@@@@@@@@@@10@@@@@@@@@@"
'''
参考讲解:
1. 理解 input 的结果是返回一个字符串
2. split 是字符串的方法,能够以逗号把字符串分割成列表,但列表的元素都是字符串
3. 用 ls[0] 和 ls[1] 分别取得输入的数字和后面的符号
4. 题目要求用一行表达式来解决这个问题,所以增加了难度
5. 此时要想起来用字符串的操作方法 center,问题就迎刃而解了,这个方法 str.center(x,y) 会用字符串 str 构造一个新的字符串,新的字符串长度是 x , 两边填充 y。此处的 x 是数字,y 是字符
6. 要记得 ls[0] 里的 10 是一个字符串,所以要记得用 eval 把它变成数字,乘 2,加上 10 自己的长度,就得到了所需的 x;y 就是 ls[1] 里的字符
7. 这道题关键是深入理解,并灵活运用 center
'''
#解法二
ls= input().split(',')
print(eval(ls[0])*ls[1]+ ls[0] + eval(ls[0])*ls[1])

第二题

在这里插入图片描述

#studs列表中的元素是字典
studs= [{'sid':'103','Chinese': 90},
{'sid':'101','Chinese': 80},
{'sid':'102','Chinese': 70}]
scores = {}  
for stud in studs:
    sv = stud.items()  #sv被赋值为二维列表,形如[('sid','103'),('Chinese',90)]
    for it in sv:      
        if it[0] == 'sid':   #第一次访问:it = ('sid','103')
            k = it[1]        # k = '103'
        else:                #第二次访问:it = ('Chinese',90) it[1] = 90
            scores[k]  = it[1]   #scores["103"] = 90
so = list(scores.items())   #形如:[('103':90),('101':80),...]
so.sort(key = lambda x:x[0],reverse = False) #按学号进行排序
for l in so:
    print('{}:{}'.format(l[0],l[1]))   #遍历输出排序后结果
'''
要点:
1. 字典作为元素,定义在列表里,用列表的遍历就可以从中提取出来
2. 提取出来的元素直接就是字典,因此可以用 items()直接获取,形成键值对对象集合 sv;
3. 对键值对对象集合sv遍历,就可以以元组it的方式访问其中的每一对键值对,sv = stud.items(),是第一个空的答案;
4. 题目要求提取学生的学号,所以需要比较键it[0]是否是'sid',是则将学号it[1]提取出来作为新的字典scores的键k;不是则将成绩提取出来作为新字典scores的值,scores[k]  = v,是第二个空的答案
5. 经过对studs列表里的各条字典处理完之后,新的scores字典就全部生成。
6. 题目要求按学号从小到大的顺序输出学号和成绩,所以需要对字典的键值对内容items()提取到列表so里,此处是第三个空的答案:so = list(scores.items())
7. 用Lambda函数进行排序。这个不在考试范围里,所以代码模板直接给出语句;
8. 对排好序的列表输出每组列表。
'''

第三题

在这里插入图片描述

#代码如下:
import jieba
Tempstr = input()
ls = jieba.lcut(Tempstr)
print(ls)

第四题

在这里插入图片描述

#代码如下:
r = 10
dr = 50
head = 90
for i  in range (4):
    turtle.pendown()
    turtle.circle(r)
    r +=  dr
    turtle.penup()
    turtle.seth(-head)
    turtle.fd(dr)
    turtle.seth(0)
turtle.done()

第五题

在这里插入图片描述
在这里插入图片描述

flag = 1
while flag:
    try:
        n = eval(input())
        xin = input().split(',')
        yin = input().split(',')
        flag =0
        sum = 0
        for i in range(n):
            sum += int(xin[i]) * int(yin[i])
        print("x和y的内积是:", sum)
    except:
       print("请输入整数!")
       flag =1

第六题

在这里插入图片描述
在这里插入图片描述

#代码如下:
jl = [[],[],[],[],[]]   # 定义空的二维列表jl,例如:
                           #jl[1]用于存放左臂高压值:[104,154,131,...]
                           #jl[2]用于存放左臂低压值:[82,88,82,...]
                           #jl[3]用于存放右臂高压值:[136,155,139,...]
                           #jl[4]用于存放右臂低压值:[90,85,74,...]

zyc = [] #存放左臂压差值列表[22,66,...]
yyc = [] #存放右臂压差值列表[46,60,...]

#用with语句打开xueyajilu.txt文件
with open("xueyajilu.txt", 'r',encoding='utf-8') as fi:
    for l in fi:  #对文件中的每一行内容进行处理
        if len(l):            #过滤空行
            lls = l.split(',')
            #print(l.split(','))
            #例如第一行的lls:['2018/7/2 6:00', '140', '82', '136', '90']
            #注意第一列是时间,不需要,跳过            
            for i in range(1,5):     #i从1开始,就是为了跳过第一列时间
                jl[i].append(eval(lls[i])) #构建二维列表jl
            zyc.append(eval(lls[1])- eval(lls[2]))  #左臂压差:左臂高压值 - 左臂低压值
            yyc.append(eval(lls[3])- eval(lls[4]))  #右臂压差:右臂高压值 - 右臂低压值

cnt = len(zyc)   #记录条数

res = []   #构建对比表
res.append(list(("高压最大值",max(jl[1]),max(jl[3]))))
#"高压最大值"、左臂高压最大值和右臂高压最大值构建列表增加到res[0]
res.append(list(("低压最大值",max(jl[2]),max(jl[4]))))
#"低压最大值"、左臂低压最大值和右臂低压最大值构建列表增加到res[1]
res.append(list(("压差平均值",sum(zyc)//cnt,sum(yyc)//cnt)))
#"压差平均值"、左臂高低压差平均值和右臂高低压差平均值构建列表增加到res[2]   //:取整除 - 返回商的整数部分(向下取整)
res.append(list(("高压平均值",sum(jl[1])//cnt,sum(jl[3])//cnt)))
#"高压平均值"、左臂高压平均值和右臂高压平均值构建列表增加到res[3]           //:取整除 - 返回商的整数部分(向下取整)
res.append(list(("低压平均值",sum(jl[2])//cnt,sum(jl[4])//cnt)))
#"低压平均值"、左臂低压平均值和右臂低压平均值构建列表增加到res[4]           //:取整除 - 返回商的整数部分(向下取整)

print('{0:<10}{1:<10}{2:<10}'.format("对比项", "左臂", "右臂"))  #输出标题行
for r in range(len(res)):
    print('{0:<10}{1:<10}{2:<10}'.format(res[r][0],res[r][1],res[r][2]))
    #输出左右臂的高压最大值、低压最大值、压差平均值、高压平均值、低压平均值
输出结果:

对比项                左臂        右臂        
高压最大值             168       155       
低压最大值             93        90        
压差平均值             62        60        
高压平均值             147       141       
低压平均值             85        81

要点:
1. 这道题的关键问题是把数据按照列的方式来处理
2. 参考答案给出的是一般思路,把文件里读出来的数据分别按列的方式,拷贝到一维列表中去,对一维列表进行各种maxminsumlen操作
3. 其次,是当列数有些多的时候,程序看起来很冗余,需要做一些优化合并
4. 前四个计算公式类似的,放到一个二维列表里,加个循环结构,就可以把四条语句缩成一条
5. 显示输出要求像表格一样输出,又要比较高效率,就引入了一个二维列表,把要输出的行头和内容,变成列表,再加到二维列表中去
  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张同学啦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值