image

编辑人: 未来可期

calendar2025-07-29

message3

visits575

第15届蓝桥杯Python青少组选拔赛(STEMA)2023年8月真题(附视频解析)参考答案

一、单选题

1、以下不符合 Python 语言变量命名规则的是(   )。

A k

B 2_k

C _k

D ok


2、已知:s = python,执行 print( s[-1] )语句后,输出的结果是(   )。

A python

B p

C nohtyp

D n


3、运行 print(type(str(3.14)))语句后,输出的是(   )。

A class ‘int’

B class ‘complex’

C class ‘float’

D class ‘str’


4、在 Python 中,以下哪个选项可以用来遍历一个字典的键和值?(   )

A for key, value in dict.items()

B for key, value in dict.keys_values()

C for key, value in dict.iter()

D for key, value in dict.loop()


5、在 Python 中,以下哪个选项用于获取一个文件的大小?(   )

A os.path.size()

B os.path.getsize()

C os.path.length()

D os.path.filesize()


二、实操题

6、编程实现:

给定一个字符,连续输出 3 个该字符。

例如:字符为 A,连续 3 个字符为 AAA。

输入描述:

输入一个字符

输出描述:

输出连续 3 个该字符(字符之间没有空格)


样例输入:

A

样例输出:

AAA

参考答案:```pythonchar = input("请输入一个字符:")print(char * 3)```


7、编程实现:

给定一个字符串 S(3≤S 长度≤1000),输出字符串 S 的最后两个字符。

例如:S =“abcd”,abcd 最后两个字符为“cd”,则输出 cd。

输入描述:

输入一个字符串 S(3≤S 长度≤1000)

输出描述:

输出一个字符串,表示字符串 S 的最后两个字符


样例输入:

abcd

样例输出:

cd

参考答案:br />```pythondef get_last_two_chars(s):if len(s) < 3:return ""else:return s[-2:]# 测试s = input("请输入字符串:")print(get_last_two_chars(s))```


8、编程实现:

给定一个正整数 N(100≤N≤1000000),分别将 N 中奇数位上的数字相加,偶数位上的数字相加,最后将两个相加的和相乘,并输出相乘的结果(奇数位包含个位、百位、万位、百万位,偶数位包含十位、千位、十万位)。

例如:N=1234,奇数位上的数字为 4、2,相加的和为 6;偶数位上的数字为 3、1,相加的和为 4;最后相乘的结果为 24(24=64)。

输入描述:

输入一个正整数 N(100≤N≤1000000)

输出描述:

输出一个整数,表示奇数位和与偶数位和相乘的结果


样例输入:

1234

样例输出:

24

参考答案:br />```pythondef calculate(N):odd_sum = 0even_sum = 0for i in range(len(str(N))):if i % 2 == 0:even_sum += int(str(N)[i])else:odd_sum += int(str(N)[i])return odd_sum * even_sumN = int(input())print(calculate(N))```


9、编程实现:

有 1 个细胞,从第二天开始,它每天早上会分裂出 1 个新的细胞(分裂这天算新细胞的第一天)。每个新分裂的细胞从它出生的第 3 天开始,每天早上也会分裂出 1 个细胞。

请计算出到第 N(2≤N≤30)天晚上共有多少个细胞(假设细胞不会死亡)。

例如:N = 5,第 5 天晚上共有 8 个细胞。

输入描述:

输入一个正整数 N(2≤N≤30)

输出描述:

输出一个整数,表示到第 N 天晚上细胞的总个数


样例输入:

5

样例输出:

8

参考答案:```pythondef count_cells(n):if n == 2:return 2elif n == 3:return 4else:return 2 + 2 * count_cells(n - 2)N = int(input())print(count_cells(N))```


10、编程实现:

在一个 M 行 N 列的网格中放有若干个坚果(一个小格子里最多放一个坚果),第 X 行 Y 列的小格子是小松鼠的家。

小松鼠可以向上下左右的格子移动寻找坚果,但它每次从家出发后,最多可以移动 K 个小格子,发现格子中有坚果,就会将其运回家储藏起来(运回家所移动的格子不做计算),然后再从家出发寻找其他坚果。小松鼠最多可以储藏几个坚果。

例如:M=7,N=6,X=3,Y=4,K=3,在 7 行 6 列的网格中有若干个坚果(如下图),小松鼠的家在第 3 行,第 4 列的位置,最多可以移动 3 个小格。

小松鼠最多可以储藏 7 个坚果(小格子底色为绿色的坚果)。

输入描述:

第一行输入两个正整数 M 和 N(2≤M≤30,1≤N≤30),表示 M 行 N 列的网格,两个正整数之间以一个英文逗号隔开;

第二行输入两个正整数 X 和 Y(1≤X≤M,1≤Y≤N),表示小松鼠家的位置在第 X 行第 Y 列,两个正整数之间以一个英文逗号隔开;

第三行输入一个正整数 K(1≤K≤max(M, N)-1),表示小松鼠从家出发后,最多可以移动的小格子数第四行开始,输入 M 行,每行 N 个整数,除了第 X 行 Y 列的小格子用 2 表示小松鼠的家,其他小格子的整数只能是 0 或者 1。0 表示小格子中没有坚果,1 表示小格子中有 1 个坚果,整数之间以一个英文逗号隔开。

输出描述:

输出一个整数,表示小松鼠最多可以储藏的坚果数量。


样例输入:

7,6
3,4
3
0,0,1,0,1,0
0,0,0,0,1,0
0,1,0,2,0,0
1,0,0,1,0,1
0,0,1,0,0,0
0,0,0,0,0,1
1,0,0,1,0,0

样例输出:

7

参考答案:```pythondef max_nuts(M, N, X, Y, K):grid = [[0] * N for _ in range(M)]for i in range(M):grid[i] = list(map(int, input().split()))visited = [[False] * N for _ in range(M)]visited[X-1][Y-1] = Truestack = [(X-1, Y-1)]nuts = 0directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]while stack:x, y = stack.pop()for dx, dy in directions:nx, ny = x + dx, y + dyif 0 <= nx < M and 0 <= ny < N and not visited[nx][ny] and abs(nx-x) + abs(ny-y) <= K:if grid[nx][ny] == 1:visited[nx][ny] = Truenuts += 1stack.append((nx, ny))return nutsM, N = map(int, input().split())X, Y = map(int, input().split())K = int(input())print(max_nuts(M, N, X, Y, K))```


11、编程实现:

蚂蚁王国住着 N 只蚂蚁,每只蚂蚁都有自己的领地,领地之间可以直接到达或经过其他领地间接到达,可以直接到达的领地之间的道路距离都为 1,但所有领地都有一条唯一的最短路径可以相互到达。

现要在 N 块领地(依次编号为 1~N)中,选出一块领地建立游乐场,使得所有蚂蚁到游乐场的最小距离总和是 N 种情况中最小的。

例如:N = 8,1~8 号领地之间的连接关系为:1 和 5、2 和 6、3 和 6、4 和 5、5 和 6、4 和 7、5 和 8。

如果将游乐场创建在 5 号领地,最小距离总和为 10。

1 号到 5 号距离为 1;2 号到 5 号距离为 2;3 号到 5 号距离为 2;4 号到 5 号距离为 1;6 号到 5 号距离为 1;

7 号到 5 号距离为 2;8 号到 5 号距离为 1。

如果将游乐场创建在 6 号领地,最小距离总和为 12。

1 号到 6 号距离为 2;2 号到 6 号距离为 1;3 号到 6 号距离为 1;4 号到 6 号距离为 2;5 号到 6 号距离为 1;

7 号到 6 号距离为 3;8 号到 6 号距离为 2。

……

可以发现,将游乐场创建在 5 号领地,最小距离总和 10 是最小的,故输出 10。

输入描述:

第一行输入一个正整数 N(2≤N≤20),表示领地数量

接下来输入 N-1 行,每行包含两个正整数(1≤正整数≤N,两个正整数不相同),表示两块领地相互之间可以直接到达,正整数之间以一个英文逗号隔开(数据保证 N 块领地相互之间可以到达)

输出描述:

输出一个整数,表示 N 种情况中最小距离总和的最小值


样例输入:

8
1,5
2,6
3,6
4,5
5,6
4,7
5,8

样例输出:

10

参考答案:```pythonfrom collections import defaultdictdef min_distance_sum(N, edges):# 构建邻接矩阵graph = defaultdict(list)for u, v in edges:graph[u].append(v)graph[v].append(u)# 使用 Floyd-Warshall 算法计算任意两点间的最短距离dist = [[float('inf')] * (N + 1) for _ in range(N + 1)]for i in range(1, N + 1):dist[i][i] = 0for k in range(1, N + 1):for i in range(1, N + 1):for j in range(1, N + 1):dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j])# 遍历每个点作为游乐场,计算最小距离总和min_sum = float('inf')for i in range(1, N + 1):total_dist = 0for j in range(1, N + 1):total_dist += dist[i][j]min_sum = min(min_sum, total_dist)return min_sumN = int(input())edges = [tuple(map(int, input().split(','))) for _ in range(N - 1)]print(min_distance_sum(N, edges))```


喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:第15届蓝桥杯Python青少组选拔赛(STEMA)2023年8月真题(附视频解析)参考答案

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share