蓝桥杯Python初级测试题之字符串及数学练习

蓝桥杯Python初级测试题之字符串及数学练习

字符串练习

  1. 统计输入的一个字符串中某一字母出现的次数最多的那一个,把字母和次数显示出来,如果两个字母最多且次数一样,就显示排序比较小的那个。
    例如: 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)
  1. 输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数并输出。
    输入描述:输入一行字符
    输出描述:按英文字母、空格、数字和其它字符的顺序输出其对应的个数
    【样例输入】
    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)

数学练习

  1. 分别输入两个正整数 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)
  1. 有 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])
  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版权协议,转载请附上原文出处链接和本声明。