第十一届蓝桥杯青少组省赛Python中高级组真题及赏析

练习最好的办法就是实战。拿真题来做,不是解析是赏析。带着欣赏的眼光看,题目不但不难,反倒增加不少乐趣。接下来揭开第十一届蓝桥杯青少组省赛python编程题的神秘面纱,我们来一一赏析,看难不难。

选择题

选择题都比较基础,比较简单,属于送分题。

这个答案为A,在编程编程语言中没有所谓的char这个类型,尽管有字符这个概念,但是没有单独的字符类型。一般使用字符串如'a'即可表示一个字符。

这个答案为D. 

 

这个答案为D。 

这个答案为C,list类型不能作为字典的key,其他的几个可以。 

 这个答案为A, “LIST” 的第一个索引。

编程第1题

输入一个字符串,如果该字符串以er、Iy或者ing后缀结尾的,则删除该字符串后缀,并输出删除后的字符串,否者将原字符串输出。

输入描述
输入一个字符串

输出描述
输出删除后的字符串或原字符串

样例输入:
driver
样例输出:
driv

题目赏析 

第一题一般都是送分题,是最简单的。这个也不例外,只是简单的对字符串进行加工处理,去除末尾的指定要求的特殊字符。因此解法很简单:

# encoding: utf-8
# author:yangyongzhen
# blog.csdn.net/qq8864

n = input()

if n[-2:]=='er' or n[-2:]=='ly':
    print(n[:-2])
elif n[-3:]=='ing':
    print(n[:-3])
else:
    print(n)

#或者
if n.endswith('er'):
    print(n[:-2])
elif n.endswith('ly'):
    print(n[:-2])
elif n.endswith('ing'):
    print(n[:-3])
else: 
    print(n) 

写成一个小函数的形式,则可以这样:

# encoding: utf-8
# author:yangyongzhen
# blog.csdn.net/qq8864

n = input()

def remove_suffix(str1):
  if str1.endswith('er'):
    return str1[:-2]
  elif str1.endswith('ly'):
    return str1[:-2]
  elif str1.endswith('ing'):
    return str1[:-3]
  else:
    return str1

out = remove_suffix(n)

print(out)

编程第2题

因子,因子也叫因数,例如3*5=15,那么3和5是15的因子。同时15*1=15,那么1和15也是15的因子。1,3,5,15这四个因子是15的所有因子。

完数: 如果一个数等于不含它本身的其他因子之和,则称该数为"完数”。如6的因子有1,2,3,6,且1+2+3=6,因此6是完数。

编程实现

输入一个正整数N,输出小于N的所有完数及个数 (个数前加*,例如:*2)。

输入描述

输入一个正整数N

输出描述

输出小于N的所有完数及个数

样例输入:

100

样例输出:
6
28
*2 

题目赏析

这个题目也不难,其实就是一个简单的数学问题。用编程解决数学问题很常见,如果理解了这题的数学原理在编程中的体现(即建模,把数学语言通过建立一定的模型方便计算机处理),实现就简单了。比如求一个数的因子,如何求呢?既然是因子肯定能够被整除,因此可以使用%取余运算符,看余数是否为0,为0则除数肯定是这个数的因子。还有就是循环变量 j 不会超过 i 的一半,从而避免了计算 i 的所有因数,因此不用从头遍历到尾。这样遍历一遍就能得到这个数的所有因子。下面的代码使用了一个sum1用来记录对所有因子的求和。

# encoding: utf-8
# author:yangyongzhen

n = input()

n = int(n)

count = 0

for i in range(2,n):
    sum1 = 0
    for j in range(1,i//2+1):
        if i%j == 0:
            sum1 += j
    if sum1 == i:
        print(i)
        count += 1

print('*' + str(count))

i//2 表示 i 除以 2 的整数部分(在python2.2及以后的算术运算符“//”来表示整数除法,返回不大于结果的一个最大的整数。而“/”则单纯的表示浮点数除法)。 在该代码中,i//2 用于计算 i 的一半,然后用这个一半作为循环变量 j 的最大值。这样做是为了确保循环变量 j 不会超过 i 的一半,从而避免了计算 i 的所有因数。 此外,sum1用于计算 i 的所有因数之和。当 i 的所有因数之和等于 i 时,i 就是一个完全数。因此,该代码会在 i 的所有因数之和等于 i 时打印 i。

编程第3题

题目描述:
用户输入一个正整致a作为如图半圆的直径,同时作为如圈等腰直角三角形的直角边长度,求下图的阴影部分面积 。

输入描述
一个正整数 (作为半圆的直径)
输出描述
图形阴影面积 (保留2位小数)
样例输入:
10
样例输出
25.00

题目赏析 

这道题与其说是编程题,不如直接说是数学题,几何题。为啥说数学一定要学好,对编程最有利?因为编程也是逻辑思维,现实世界中遇到的难题,大都需要用到数学,再用计算机建模,设计相应的算法解决问题。

三角形面积公式: S= (ah) /2 (公式中a为三角形的底边,h为底边所对应的高)。

圆形面积公式: S=n*r^2 (公式中r为园的半径,n=3.14(圆周率))。

上面的几何题,一眼就看出来了,阴影部分明显是三角形面积的一半。因此编码的工作最简单。

(注意题目要求,要保留两位小数)

# encoding: utf-8
# author:yangyongzhen

a = input()

a = int(a)

s = 0

s =  a*a/4

print("%.2f" %s)

编程第4题

在生活中,为保证信息安全,我们会把重要的信息进行加密后再发送给对方,对方需要通过相同的策路对信息进行解密,才能了解到传递的信息。我个把加密前的信息称为原文,将加密后的信息称为密文。

有这样一种加密的策略:第一次加密策略是将明文中字母a加密为01,b加密为02,c加密为03,以此类推,x加密为24,y加密为25,z加密为26,空格不加密。然后在第一次加密的基出上进行二次加密,第二次加密是将数字0加密为27,数字1加密为28,以此类推,数字8加整为35、数字9加密为36,空格则加密为00。

编程实现
请输入一段明文,按照上述加密策略,输出对应密文。

输入描述

输入一段明文 (只包含小写字母和空格)

输出描述

按照上述加密策略,输出对应密文

样例输入:

ab c
样例输出:

27282729002730 

题目赏析

这已经是第四道题目了,发现竟也不难。其实就是一简单的替换。类似于查字典(密文手册),找到对应的依次按要求替换即可。因此,解法如下:

首先设计一字典。设计字典可以每个都手写出来也行,比如设计字典d = {'a':'01','b':'02'},但是这样有点儿繁琐,直接找到规律可以用个循环,就能输出字典了。如何设计输出字典呢?需要有点儿字符的基础知识,小写字母a,b,c,d,......z 对应的十进制,依次是97,98,99....

在python的解释器中可以直接输入chr()函数查看数字对应的ascII字母值,也可以使用ord()函数,输入字符查看其对应的10进制数值。python3 内置函数 hex()、oct()、bin()、chr()、ord().

chr()将Ascii的值转换成对应字符,与之相对应的ord()函数则将字符转换为值。

因此,字典的设计可以使用一个for循环,设计如下:

#设计明文对应的密文字典
d = {}

for i in range(1,27):
    #小于10的前面补个0凑够两位
    if i < 10:
        d[chr(i+96)] = '0'+str(i)
    else:
        d[chr(i+96)] = str(i)

#打印出字典
print(d)

完整答案如下:

# encoding: utf-8
# author:yangyongzhen

#设计明文对应的密文字典
d = {}

for i in range(1,27):
    #小于10的前面补个0凑够两位
    if i < 10:
        d[chr(i+96)] = '0'+str(i)
    else:
        d[chr(i+96)] = str(i)

#打印出字典
print(d)

#输入明文内容
ss = input()

s1 = ''

#遍历明文
for c in ss:
    #空格不加密
    if c ==' ':
       s1+= ' ' 
    else:
        s1 += d[c]

#至此完成了要求的一级加密
print(s1)
s2 = ''
for i in s1:
    if i == ' ':
        s2 += '00'
    else:
        s2 += str(int(i)+27)
        
#输出最终结果     
print(s2)

 结果输出

编程第5题

“二十四节气”被列入联合国教科文组织人类非物质文化遗产名录。在国际气象界,这一已有千年历史的时间认知体系被誉为“中国第五大发明”。

春雨惊春清谷天,夏满芒夏暑相连。秋处露秋寒霜降,冬雪雪冬小大寒。二十四节气,在四季轮回流淌,每个节气都有它较为稳定的目子。

下图给出了公历2020年1月25日~2021年1月20日之间,二十四个节气的名称,公历具体日期及汉语拼音的缩写。

输入描述

输入一个日期,介于公历2020年1月25日~2021年1月20日之间。例如:2020年5月2日写为”2020*05*02”

输出描述

如果当天恰好是一个节气,输出这个节气的汉语拼音缩写,如当天不是节气则输出下一个节气的汉语拼音缩写。

样例输入1:

2020*06*21

样例输出1:

XZ

样例输出1说明:6月21日是夏至,汉语拼音缩写是”XZ'

样例输入2:

2020*07*04

样例输出2:

XS

祥例输出2说明:7月4日之后的节气是小暑,汉语拼音缩写是 XS

题目赏析

这道题的解法可以有多种实现,只要达到目的即可。这个题目虽然描述比较长,其实考察的还是基础的查找和比较,主要就是遍历和比较。需要把文字的描述,变成实际的编程去求解出答案。这里给出两种解决。

# encoding: utf-8
# author:yangyongzhen
# blog.csdn.net/qq8864

#names 列表,其中包含了所有节气的汉语拼音缩写
names = ['XH','DH' 'LC','YS','JZ', 'CF', 'OM', 'GY','LX','XM','MZ','XZ','XS','DS','LQ', 'CS','BL', 'QF','HL','SJ' ,'LD','XX','DX','DZ']

#dates列表,其中包含了所有节气的日期。
#这里把日期进行了抽象,实际105可不是1月5号。但用105来表示也不是不可以,方便比较大小来解题即可。
dates = [105,120,204,219,305,320,404,419,505,520,605,621,706,722,807,822,907,922,1008,1023,1107,1122,1207,1221]

#处理输入,把*替换掉并只取后面的日期
day = int(input().replace('*','')[-4:])

#输出日期
print(day)

dates_= [ i for i in dates if i < day]

print(dates_)

if len(dates_)==24:
    print('XH')
else :
    print(names[len(dates_)-1])

使用 replace() 函数将输入日期中的 * 替换为空字符串,并只取后面的日期。使用 int() 函数将输入日期转换为整数。 然后使用 dates_= [ i for i in dates if i < day] 语句创建了一个新的列表,其中包含了所有小于输入日期的节气日期。

然后使用 len() 函数计算新列表的长度,如果新列表的长度为 24,那么它将输出 "XH",因为这是第一个节气。 否则,输出 names[len(dates_)-1],其中 names[len(dates_)-1] 是新列表中最后一个节气的汉语拼音缩写。因为题目要求是如当天不是节气则输出下一个节气的汉语拼音缩写,dates_中包含了所有小于给出日期的节气,那么自然的dates_的下一个节气就是names[len(dates_)-1]。注意索引是从0开始。

这段代码可以用来计算任何日期的节气。 例如如果输入日期为 "2020*06*21",那么代码将输出 "XZ",因为 6 月 21 日是夏至,夏至是第 21 个节气。 如果输入日期为 "2020*07*04",那么代码将输出 "XS",因为 7 月 4 日是小暑,小暑是第 22 个节气。 如果输入日期为 "2020*07*22",那么代码将输出 "XZ",因为 7 月 22 日是夏至,夏至是第 21 个节气。  

方法二:

# encoding: utf-8
# author:yangyongzhen
# blog.csdn.net/qq8864

def get_solar_term(year, month, day):
  """
  获取指定日期的节气

  Args:
    year: 年份
    month: 月份
    day: 日期

  Returns:
    节气的汉语拼音缩写
  """

  # 获取节气表
  solar_term_table = [
      ('小寒', 'XX', '2020-01-05'),
      ('大寒', 'DH', '2020-01-20'),
      ('立春', 'LC', '2020-02-04'),
      ('雨水', 'YS', '2020-02-19'),
      ('惊蛰', 'JX', '2020-03-05'),
      ('春分', 'CF', '2020-03-20'),
      ('清明', 'QM', '2020-04-04'),
      ('谷雨', 'GY', '2020-04-19'),
      ('立夏', 'LX', '2020-05-05'),
      ('小满', 'XM', '2020-05-20'),
      ('芒种', 'MZ', '2020-06-05'),
      ('夏至', 'XZ', '2020-06-21'),
      ('小暑', 'XS', '2020-07-06'),
      ('大暑', 'DS', '2020-07-22'),
      ('立秋', 'LQ', '2020-08-07'),
      ('处暑', 'CX', '2020-08-22'),
      ('白露', 'BL', '2020-09-07'),
      ('秋分', 'QF', '2020-09-22'),
      ('寒露', 'HL', '2020-10-08'),
      ('霜降', 'SG', '2020-10-23'),
      ('立冬', 'LD', '2020-11-07'),
      ('小雪', 'XS', '2020-11-22'),
      ('大雪', 'DS', '2020-12-07'),
      ('冬至', 'DZ', '2020-12-21'),
  ]

  # 遍历节气表,找到第一个日期大于等于输入日期的节气
  inpt = '%02d'%(year) + '-' + '%02d'%(month) + '-' + '%02d'%(day)
  print(inpt)
  for solar_term in solar_term_table:
    if solar_term[2] >= inpt:
        print(solar_term[2])
        return solar_term[1]

  # 没有找到节气,返回空字符串
  return ''


def main():
  # 获取输入日期
  year, month, day = input().split('*')

  # 获取节气
  solar_term = get_solar_term(int(year), int(month), int(day))

  # 输出节气
  print(solar_term)


if __name__ == '__main__':
  main()

 输入2020*07*04,得到结果为XS。输入2020*06*21,输出结果为XZ。

总结

分析完一套蓝桥杯试题,感慨是真的不难,还蛮简单的。蓝桥杯青少组省赛Python中/高级组编程题,即便是最后一个大题,除了文字描述上啰嗦了一大堆,实现起来也不难。理解了题意,把其转换为编程实现即可。可能这是面向初学者和青少年,对于程序员来说这有点儿简单了。即便面向青少年,只要扎实基础,也能全做出来。

题目难度和蓝桥杯全国赛中/高级组差不多,主要考察Python编程基础知识,包括数据类型、变量、运算符、函数、循环、条件判断等。 还会考察一些常见的编程题型,比如字符串处理、数组处理、排序、查找、递归等。 难度不算太难,只要掌握了Python编程基础知识,熟悉常见的编程题型,扎实数学基础,就能顺利通过考试,拿到满分。

其他资源

Python中不同进制的数字的表示以及转换的方式,一些函数的使用(hex,oct,bin函数详解,进制转换计算过程详解)_进制函数python_时代稍等198的博客-CSDN博客

python输出字符的ascii码_mob64ca12e83232的技术博客_51CTO博客

python3 内置函数 hex()、oct()、bin()、chr()、ord()_yyy9331的博客-CSDN博客

GDB online Debugger | Compiler - Code, Compile, Run, Debug online C, C++

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/211058.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决Linux的端口占用报错问题

文章目录 1 Linux报错2 解决方式 1 Linux报错 Port 6006 is in use. If a gradio.Blocks is running on the port, you can close() it or gradio.close_all(). 想起之前运行Gradio 6006&#xff0c;端口被占用 2 解决方式 输入 netstat -tpl查看当前一些端口号的占用号&a…

【智能家居】二、添加火灾检测模块(烟雾报警功能点)

可燃气体传感器 MQ-2 和 蜂鸣器 代码段 controlDevice.h&#xff08;设备控制&#xff09;smokeAlarm.c&#xff08;烟雾报警器&#xff09;buzzer.c&#xff08;蜂鸣器&#xff09;mainPro.c&#xff08;主函数&#xff09;运行结果 可燃气体传感器 MQ-2 和 蜂鸣器 代码段 …

知识蒸馏测试(使用ImageNet中的1000类dog数据,Resnet101和Resnet18分别做教师模型和学生模型)

当教师网络为resnet101,学生网络为resnet18时&#xff1a; 使用蒸馏方法训练的resnet18训练准确率都小于单独训练resnet18&#xff0c;使用蒸馏方法反而导致了下降。当hard_loss的alpha为0.7时&#xff0c;下降了1.1 当hard_loss的alpha为0.6时&#xff0c;下降了1.7说明当学生…

Unity--互动组件(Input Field)||Unity--互动组件(Scroll View)

Unity--互动组件&#xff08;Input Field&#xff09; 一个输入字段是一种方法&#xff0c;使文本控件可编辑&#xff1b; 此组件中的&#xff0c;交互&#xff0c;过渡&#xff0c;导航与文章&#xff08;Unity--互动组件&#xff08;Button&#xff09;&#xff09;中的介绍…

【数据中台】开源项目(3)-Linkis

关于 Linkis Linkis 在上层应用程序和底层引擎之间构建了一层计算中间件。通过使用Linkis 提供的REST/WebSocket/JDBC 等标准接口&#xff0c;上层应用可以方便地连接访问MySQL/Spark/Hive/Presto/Flink 等底层引擎&#xff0c;同时实现统一变量、脚本、用户定义函数和资源文件…

TCA9548A I2C 多路复用器 Arduino 使用相同地址 I2C 设备

在本教程中&#xff0c;我们将学习如何将 TCA9548A I2C 多路复用器与 Arduino 结合使用。我们将讨论如何通过整合硬件解决方案来使用多个具有相同地址的 Arduino 的 I2C 设备。通过使用 TCA9548A I2C 多路复用器&#xff0c;我们将能够增加 Arduino 的 I2C 地址范围&#xff0c…

12.1平衡树(splay),旋转操作及代码

平衡树 变量定义 tot表示结点数量&#xff0c;rt表示根的编号 v[i]表示结点i的权值 fa[i]表示结点i的父亲节点 chi[i][2]表示结点i的左右孩子 cnt[i]表示结点i的权值存在数量&#xff0c;如1123&#xff0c;v[3]1&#xff0c;则cnt[3]2;就是说i3的三号结点的权值为1&…

深入理解贝叶斯分类与朴素贝叶斯模型(Naive Bayes, NB):从基础到实战

目录 贝叶斯分类 公式 决策规则 优点 贝叶斯分类器的例子——垃圾邮件问题 1. 特征&#xff08;输入&#xff09;&#xff1a; 2. 类别&#xff1a; 3. 数据&#xff1a; 4. 模型训练&#xff1a; 注&#xff1a;类别先验概率 5. 模型预测&#xff1a; 朴素贝叶斯模…

为自己创建的游戏编程源码申请软件著作权详细流程(免费分享模板)

以为我这篇文章制作的游戏申请软件著作权为例 Ren‘py 视觉小说 交互式故事游戏制作过程学习笔记(Windows下实现)(多结局游戏)-CSDN博客 一、网站注册 申请软著时&#xff0c;所有的著作权人都需要在中国版权保护中心官网注册账号&#xff0c;并进行实名认证后&#xff0c;才…

【LeetCode】链式二叉树OJ题---C语言版

链式二叉树OJ题 一、单值二叉树&#xff08;1&#xff09;题目描述&#xff1a;&#xff08;2&#xff09;思路表述&#xff1a;&#xff08;3&#xff09;代码实现&#xff1a; 二、二叉树最大深度&#xff08;1&#xff09;题目描述&#xff1a;&#xff08;2&#xff09;思路…

java学习part26线程安全

136-多线程-同步代码块解决两种线程创建方式的线程安全问题_哔哩哔哩_bilibili 1.安全问题 关键在于某些数据操作 2.解决 2.1同步代码块 相当于给数据操作加了互斥锁 2.1.1在实现runnable接口的方式下 锁对象要求必须是唯一的&#xff0c;因为可以看成是谁占了这个对象&…

SpringBoot 是如何启动一个内置的Tomcat

为什么说Spring Boot框架内置Tomcat 容器,Spring Boot框架又是怎么样去启动Tomcat的?我简单总结下学习过程。 一:简单了解SpringBoot的启动类 我们都知道Spring Boot框架的启动类上是需要使用 @SpringBootApplication 注解标注的, @SpringBootApplication 是一个复合注解…

Jupyter Markdown 插入图片

首先截图 注意 这一步是关键的&#xff01;&#xff01; 它需要使用电脑自带的截图&#xff0c;用qq啊vx啊美图秀秀那些都不行哦。 截图之后复制&#xff1a; 然后快捷键粘贴到jupyter里面&#xff0c;它会生成一段代码&#xff08;没有代码就是说截图形式不对&#xff09;&a…

深入计算机系统看性能优化

一&#xff0e;引言 “性能优化”&#xff0c;从计算机诞生之初就一直伴随着计算机技术的发展&#xff0c;直到现在。将来也必定不会消失。这是因为每个人都会追求性价比&#xff0c;花最少的钱&#xff0c;办最多的事。生活中也一样&#xff0c;就比如说泡茶&#xff0c;但凡…

2023年12月03日新闻简报(国内国际)

新闻简报 每天三分钟&#xff0c;朝闻天下事。今天是&#xff1a;2023年12月03日&#xff0c;星期日&#xff0c;农历十月廿一&#xff0c;祝工作愉快&#xff0c;身体健康&#xff0c;生活喜乐&#xff1a; &#x1f449;&#x1f449;国内新闻 1、1日凌晨&#xff0c;四川…

docker-速通

1.命令-镜像操作 docker pull nginx #下载最新版 docker pull nginx:1.20.1 #下载指定版本 镜像名:版本名&#xff08;标签&#xff09; docker images #查看所有镜像 # 如果只写镜像名实际就是redis redis:latest 记住这个不是命令 docker rmi 镜像名:版本号/镜像id…

Pandas教程06:DataFrame.merge数据的合并处理

DataFrame.merge() 是 pandas 库中用于合并两个DataFrame数据的方法。该方法主要用于根据一个或多个键&#xff08;键可以是列名或索引&#xff09;将两个 DataFrame 连接在一起&#xff0c;这个过程类似于 SQL 中的 JOIN 操作。 #我的Python教程 #微信公众号&#xff1a;wdPy…

【PTA-C语言】实验四-循环结构II

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 实验四-循环结构II 7-1 跟奥巴马一起画方块&#xff08;分数 15&#xff09;7-2 打印九九口诀表&#xff08;分数 10&#xff09;7-3 求符合给定条件的整数集&#xff08;分数 15&#xff09;7-4 求特殊方程…

网络虚拟化场景下网络包的发送过程

网络虚拟化有和存储虚拟化类似的地方&#xff0c;例如&#xff0c;它们都是基于 virtio 的&#xff0c;因而在看网络虚拟化的过程中&#xff0c;会看到和存储虚拟化很像的数据结构和原理。但是&#xff0c;网络虚拟化也有自己的特殊性。例如&#xff0c;存储虚拟化是将宿主机上…

爬虫学习-基础(HTTP原理)

目录 一、URL和URI 二、HTTP和HTTPS &#xff08;1&#xff09;HTTP &#xff08;2&#xff09;HTTPS &#xff08;3&#xff09;HTTP与HTTPS区别 &#xff08;4&#xff09;HTTPS对HTTP的改进&#xff1a;双问的身份认证 三、TCP协议 &#xff08;1&#xff09;TCP三次握手…