蓝桥杯STEMA 考试 Python 中高级试卷(12 月)
一、选择题
第一题
以下哪项是取余运算符?( C )
A、* B、// C、% D、+
第二题
已知:s = "python",执行 print(s[::2])语句后,输出的结果是( B )。
A 、 python B 、pto C 、 nohtyp D 、 yhn
第三题
在 Python 中,下面哪个选项可以获取字符串中某字符出现的次数?( B )
A、length() B、count() C、size() D、len()
第四题
Python 中的列表和元组的主要区别是( A )。
A、列表中元素的值可修改,元组中元素的值不可修改
B、列表是有序的,元组是无序的
C、列表是一维的,元组可以是多维的
D、列表可以包含不同类型的元素,元组只能包含相同类型的元素
第五题
关于 Python 语言的浮点数类型,以下选项中描述错误的是( A )。
A、小数部分不可以为 0
B、带有小数的类型通常用浮点数类型表示
C、float(x) 中 x 可以是十进制实数形式的字符串
D、整数写成指数形式是浮点数类型
二、编程题
第一题
编程实现:
小青有 N 个小球,小蓝有 M 个小球,请计算他们一共有多少个小球。
例如:N = 2,M = 3,表示小青有 2 个小球,小蓝有 3 个小球,一共有 5 个小球(5 = 2 + 3)。
输入描述:
第一行输入一个整数 N(1≤N≤1000),表示小青的小球数量第二行输入一个整数 M(1≤M≤1000),表示小蓝的小球数量
输出描述:
输出一个整数,表示一共有多少个小球
样例输入:
2
3
样例输出:
5
# 示例代码
a=int(input())
b=int(input())
print(a+b)
第二题
编程实现:
给定一个长度为 11 的字符串 S,表示电话号码,然后将电话号码中第三位数字后的连续四位数字用“*”替换,并输出替换后的字符串。
例如:S = "13900001234",用“*”替换第三位数字后的连续四位数字为“139****1234”。
输入描述:
输入一个长度为 11 的字符串 S(字符串仅包含 0~9 之间的数字且首个字符只能为 1),表示电话号码
输出描述:
输出一个字符串,表示替换后的字符串
样例输入:
13900001234
样例输出:
139****1234
# 示例代码
s=input()
print(s[0:3]+'*'*4+s[7:])
第三题
编程实现:
给定 N 个长度不同的字符串,请将每个字符串的最后一个字符删除,并按长度从短到长的顺序换行输出。
例如:N = 3,3 个字符串分别为 dfgas、abc、cbdf,删除最后一个字符后为 dfga、ab、cbd;
按长度从短到长的顺序换行输出为:
ab cbd dfga
输入描述:
第一行输入一个整数 N(2≤N≤10),表示字符串的个数
第二行输入 N 个长度不同的字符串(2≤字符串长度≤20),字符串之间以一个空格隔开
输出描述:
输出 N 行字符串,表示所有字符串删除最后一个字符后,按长度从短到长的顺序换行输出的结果
样例输入:
3
dfgas abc cbdf
样例输出:
ab cbd dfga
# 示例代码
n=int(input())
ls=list(input().split()) # 分割并放入列表
ans_ls=[x[0:len(x)-1] for x in ls] # 去掉每个字符串的最后一个字母
ans_ls.sort(key=len) # 按长度排序
for i in ans_ls:
print(i,end=' ') # 输出
第四题
编程实现:
有 N 张扑克牌叠放在桌上,A 和 B 两人轮流抽牌,每次只能从最上面或最下面抽一张牌,当最后一张牌被抽完时,比较 A 和 B 两人扑克牌的点数总和,点数总和大的一方胜利,点数相同时双方均不算胜利。A 先抽牌,请统计一共有多少种不同的抽牌情况,A 有多少种不同的获胜情况。
例如:N = 3,有 3 张扑克牌,从上往下的点数依次为 3、2、1。A 先抽牌,所有不同的抽取情况有:
第一种:A 抽 3,B 抽 1,A 再抽 2,A 的点数总和为 5,B 的点数总和为 1;第二种:A 抽 3,B 抽 2,A 再抽 1,A 的点数总和为 4,B 的点数总和为 2;第三种:A 抽 1,B 抽 3,A 再抽 2,A 的点数总和为 3,B 的点数总和为 3;第四种:A 抽 1,B 抽 2,A 再抽 3,A 的点数总和为 4,B 的点数总和为 2;一共有 4 种不同的抽牌情况,A 有 3 种不同的获胜情况。
输入描述:
第一行输入一个整数 N(2≤N≤20),表示扑克牌的张数
第二行输入 N 个整数(1≤整数≤13),同一个整数不能出现超过 4 次,表示从上往下每张扑克牌的点数, 整数之间以一个空格隔开
输出描述:
第一行输出一个整数,表示一共有多少种不同的抽牌情况第二行输出一个整数,表示 A 有多少种不同的获胜情况
样例输入:
3
3 2 1
样例输出:
4
3
# 示例代码 由于数据量比较小这里用位运算模拟了一下
n = int(input())
cards = list(map(int, input().split()))
res1= pow(2,n-1)
print(res1)
res2=0
for i in range(1,res1+1):
m,a,b,x, y =i, 0,0, 0, n - 1
for j in range(0,n):
if j%2==0 :
if m&1 :
a+=cards[x]
x+=1
else:
a += cards[y]
y-=1
else:
if m & 1:
b += cards[x]
x += 1
else:
b += cards[y]
y -= 1
m>>=1
if a>b:
res2+=1
print(res2)
第五题
编程实现:
有一张 N 行 N 列的网格纸,网格中每个小格子都是 1×1 的正方形,有些格子被填充成橙色。请数一数橙色区域一共有多少个矩形。
例如:N = 4,4 行 4 列的网格纸如下图:
图中网格纸的橙色区域一共有 7 个矩形。
输入描述:
第一行输入一个正整数 N(2≤N≤50)
接下来输入 N 行,每行 N 个整数(整数只能为 1 或 0 ),其中 1 表示填充成橙色,0 表示没有填充成橙色,整数之间以一个空格隔开
输出描述:
输出一个整数,表示橙色区域的矩形数量
样例输入:
4
1001
0000
1001
0110
样例输出:
7
# 示例代码
n=int(input())
ls=[]
for i in range(n):
lst=list(input())
ls.append(lst)
def judge(x,y,a,b):
for i in range(a):
for j in range(b):
if ls[x+i][y+j]!='1':
return False
return True
res=0
for a in range(1,n+1):
for b in range(1,n+1):
for x in range(n-a+1):
for y in range(n-b+1):
if judge(x,y,a,b):
res+=1
print(res)
第六题
编程实现:
老师在黑板上写了一个不超过 500 位的整数 n(1≤n<10500),要求同学们擦掉其中任意 k 个数字,剩余数字的顺序不变,希望得到的数最大。
例如:n = 69134,k = 2,从 69134 中擦掉 2 个数字;从左往右,将第一个位置的 6 和第三个位置的
1 擦掉,变成的新数 934 是最大的。
输入描述:
输入两个整数 n 和 k(1≤n<10500,0≤k<n 的位数),整数之间以一个空格隔开
输出描述:
输出一个整数,表示擦掉 k 个数字后,得到的最大数
样例输入:
69134 2
样例输出:
934
# 示例代码
s,n=input().split()
ls=list(s)
n=int(n)
for i in range(n):
t=True
for j in range(1,len(ls)):
if ls[j-1]<ls[j]:
ls.pop(j-1)
t=False
break
if t:
ls.pop()
s=''.join(ls)
print(s)