蓝桥杯Python初级测试题之字符串及数学练习
字符串练习
- 统计输入的一个字符串中某一字母出现的次数最多的那一个,把字母和次数显示出来,如果两个字母最多且次数一样,就显示排序比较小的那个。
例如: aabbbccccdddd 则输出c 4 (c和d都是4次,c比较小)
思路解析:
(1)用从‘a’到‘z’的每一个字符去查找在输入字符串str1中出现的次数
(2)用变量max_times 存储同一个字符出现最多的次数,同时对应的max_char储存对应的字符,新的字符次数超过时替换这两个变量;
次数相等时不替换,这样就遵守了次数想等于取较小字符的要求。
(3) ord(‘a’)可以获取‘a’的ASCii值,而chr(i)可以将ASCii为i的数字转为字符
(4) range(ord(‘a’),ord(‘z’))会漏掉一个字符,最好用print验证一下,正确的列举是 range(ord(‘a’),ord(‘z’)+1)
#变量用来存储出现次数最多的字符和次数
max_char = ''
max_times = 0
str1 = input("请输入小写字符串:")
#字符串本身是一个由单个字符组成的数组,字符之间比较大小时实际是ASCii码进行比较
for i in range(ord('a'),ord('z')+1):
x=chr(i)
#print(x) 测试一下a-z输出是否正确
#用str1.count获取单个字符出现的次数
t = str1.count(x)
#如果出现次数多于本次则替换次数和字符,这样始终保持最多次数,而同样多时不替换保证字符最小
if t > max_times:
max_char =x
max_times = t
print(max_char)
print(max_times)
- 输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数并输出。
输入描述:输入一行字符
输出描述:按英文字母、空格、数字和其它字符的顺序输出其对应的个数
【样例输入】
a1 b2 c d4 !!! 5
【样例输出】
4
5
4
3
思路解析:python中单个字符是可以比较大小的,实际比较的就是ASCII码值,因此采用IF…ELIF ELSE 分支语句就可以统计各种类型的字符个数。
str1 = input("请输入字符串:")
# n1是因为字母个数,n2是空格个数,n3是数字个数,n4是其它
n1 = 0
n2 = 0
n3 = 0
n4 = 0
for i in range(len(str1)):
x = str1[i]
if 'a' <= x <= 'z':
n1 += 1
elif 'A' <= x <= 'Z':
n1 += 1
elif x == ' ':
n2 += 1
elif '0' <= x <= '9':
n3 += 1
else:
n4 += 1
print(n1)
print(n2)
print(n3)
print(n4)
数学练习
- 分别输入两个正整数 M、N,输出 M 到 N 之间(含 M、N)所有可被 7 整除,但不是 5 的倍数的数字,并以逗号分隔按顺序打印在一行。
输入描述:分别输入两个正整数 M、N
输出描述:输出 M 到 N 之间(含 M、N)所有可被 7 整除,但不是 5 的倍数
的数字,并以逗号分隔按顺序打印在一行
【样例输入】
100
147
【样例输出】
112,119,126,133,147
思路解析: 利用for循环列举出M,N之间所有数字,将能够被7整除同时不能被5整除的数字(数字转换为字符)列入数组中,
再用join组成新的新的字符串。
注意:
(1) for循环时,range(M,N)是不能列举出M,N之间的数字的,只能列举出M到N-1,为避免出错最好用print输出验证一下,应该是range(M,N+1)
(2) ‘’,’’.join(list_n)可以用逗号把list_n数组中的元素连接成新的字符串,但是list_n必须为字符串数组,需要提前转一下类型
M = int(input("请输入较小的正整数:"))
N = int(input("请输入较大的正整数:"))
list_n = []
for i in range(M, N + 1):
# 查验输出是否正确
# print(i)
if i % 7 == 0 and i % 5 != 0:
list_n.append(str(i))
str1 = ",".join(list_n)
print(str1)
- 有 n 个人围成一个圈,按顺序排好号。然后从第一个人开始报数(从 1 到 3报数),报到 3 的人退出圈子,然后继续从 1 到 3 报数,直到最后留下一个人游戏结束,问最后留下的是原来第几号。
输入描述:输入一个正整数 n
输出描述:输出最后留下的是原来的第几号
【样例输入】
5
【样例输出】
4
思路解析: 这个题比较难理解,于是用样例1,2,3,4,5做例子分析,因为是圆形,所以每次三个一组,消除第三个数以后,把剩余的数转移到头部进行不断循环,直至剩余数到2个时,取第2个即为所需要的数字。
n = input("输入一个正整数")
n = int(n)
list_n = [i for i in range(1, n + 1)]
# 验证一下输出是否正确
# print(list_n)
while len(list_n) > 2:
# nl为list_n的个数
nl = len(list_n)
# m为数组中序号是3的倍数中最大的
# m之前的切片为list1,m之后的切片为list2
m = nl - nl % 3
# print(m)
list1 = list_n[0:m]
list2 = list_n[m:nl]
# 输出list1,list2验证一下
# print(list1)
# print(list2)
# 把序号不是3的整数倍的list1中的数复制转移到list3中
list3 = []
for i in range(len(list1)):
if (i + 1) % 3 != 0:
list3.append(list1[i])
# 用m之后的切片组合m之前的不能被3整除的部分合成新的list_n
list_n = list2 + list3
if len(list_n) == 2:
break
print(list_n[1])
- 计算某个电梯的用电量。
电梯可到达最低楼层为地下 3 层(-3),最高为地上 12 层(12),中间没有0 层;
电梯向上运行时每上升 1 层消耗 1 单位电量,向下运行时每下降 1 层消耗 0.3单位电量;
请你通过输入的某段时间内电梯停过的楼层顺序,计算电梯消耗了多少单位电量。
输入描述:N 个数字(2<=N<=10),数字间以逗号分隔,代表电梯停过的楼层[-3,12];
输出描述:电梯消耗的单位电量数;
【样例输入】
1,11,1
【样例输出】
13.0
思路解析: a-b-c
(1) 先分析a-b 再分析b-c,两个过程一样
(2) a-b需要判断 a b大小 上楼下楼
(3) ab同为正数或同为负数, 如1-3则为 则为a-b的高层减低层之差;
如其中一个为负另一个为正,例如-1到2则为a-b高层减低层之差-1因为0不算。
str1 = input("请输入电梯经过的楼层,以逗号分隔:")
# 用split分隔获取楼层字符串
list_n = str1.split(",")
# 字符串数组转换为楼层数字数组
list_n = [int(x) for x in list_n]
# 验证一下
# print(list_n)
# 循环计算每两个楼层数字之间的电量
dianliang = 0
for i in range(len(list_n) - 1):
a = list_n[i]
b = list_n[i + 1]
# print(a,b)
if a < b:
# 上楼,每层1个单位,楼层没有0,a<b时,楼层数为b-a或者b-a-1
if (a < 0 and b < 0) or (a > 0 and b > 0):
dianliang += (b - a) * 1
else:
dianliang += (b - a - 1) * 1
else:
# 下楼,每层0.3个单位,楼层没有0,a>b时,楼层数为a-b或者a-b-1
if (a < 0 and b < 0) or (a > 0 and b > 0):
dianliang += (a - b) * 0.3
else:
dianliang += (a - b - 1) * 0.3
print(dianliang)
版权声明:本文为qq_43662503原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。