ucass2021期末编程模拟题

写在前面的话:

题目来源:python123(选了一部分放上来)

虽然过了系统评测,但因为评测平台的评测数据过弱,不可保证代码逻辑完美

尽力使得代码算法最优,但由于题目设置的模糊性(不得不吐槽这些题目太烂了),为了保证代码尽可能涵盖最多可能性,使得算法未必针对数据最优(希望讲清楚了)

说白了就是代码可以优化

1.正整数的位数和逆序数

1)编写代码,输入一个正整数,输出该正整数的位数和逆序数。

1 a = input()
2 b = a
3 while a[-1]=='0':
4     a = a[:-1]
5 print("{}是{}位数,其逆序数为{}.".format(b,len(b),a[::-1]))
(a[::-1]好像是一种蛮高级的颠倒字符串的方法)

2.藏头露尾诗

1)编写代码,分次输入 4 句诗的每一句,每句字数相等,分别输出每行头字符串和尾字符串。

1 a = ''
2 b = ''
3 for i in range(4):
4     c = input()
5     a += c[0]
6     b += c[-2]
7 print(a)
8 print(b)

10.字符判定

1)编写代码,输入单个字符,并根据以下规则进行处理:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         如果输入的是一个数字字符,判定该数字的奇偶性;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         如果输入的是一个小写字母,输出该字母对应的大写字母;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         如果输入的是一个大写字母,输出该字母对应的小写字母;‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         如果输入的是其它字符,则输出“输入有误”。

 1 a = input()
 2 if "0"<=a<="9":
 3     b = ord(a)-48
 4     if b%2==0:
 5         print("偶数")
 6     else:
 7         print("奇数")
 8 elif "a"<=a<="z":
 9     print(chr(ord(a)-32))
10 elif "A"<=a<="Z":
11     print(chr(ord(a)+32))
12 else:
13     print("输入有误")

11.起名器

1)编写代码,输入名字长度(3或2),使用 random 模块随机生成一个姓名,随机数种子为 0,姓名第一个字从 surname 中选择,第二个字从 second 中选择,第三个字从 third 中选择。

 1 import random
 2 a = input()
 3 surname = '赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许'
 4 second = '中万斯近元伟丽利国士文连百宏可立成海'
 5 third = '隆智渝顺乐天杰夫煜兵思霆炜祺亮剀炫翔维瑞韬嘉林庆玮'
 6 random.seed(0)
 7 if a == "3":
 8     print(random.choice(surname)+random.choice(second)+random.choice(third))
 9 else:
10     print(random.choice(surname)+random.choice(third))

16.判断火车票座位

1)编写代码,输入一个数字和一个字母组成的座位号,根据字母判断位置是窗口、中间还是过道。目前中国高铁窗口位置的字母是 'A' 和 'F',过道位置是 'C' 和  'D',中间位置是 'B'。每个车厢座位排数是1-17,输入时不区分字母大小写。根据输入判定座位的位置,当输入的数据不是一个合法的座位号时,输出“座位号不存在”。

 1 a = input()
 2 
 3 if len(a)==3:
 4     b = (ord(a[0])-48)*10+ord(a[1])-48
 5     if b>17 :
 6         print("座位号不存在")
 7     else:
 8         if a[-1]=="a" or a[-1]=="A" or a[-1]=="f" or a[-1]=="F":
 9             print("窗口")
10         elif a[-1]=="c" or a[-1]=="C" or a[-1]=="D" or a[-1]=="d":
11             print("过道")
12         elif a[-1]=="b" or  a[-1]=="B":
13             print("中间")
14         else:
15             print("座位号不存")
16 elif len(a)==2:
17     if ord(a[0])-48==0:
18         print("座位号不存在")
19     else:
20         if a[-1]=="a" or a[-1]=="A" or a[-1]=="f" or a[-1]=="F":
21             print("窗口")
22         elif a[-1]=="c" or a[-1]=="C" or a[-1]=="D" or a[-1]=="d":
23             print("过道")
24         elif a[-1]=="b" or  a[-1]=="B":
25             print("中间")
26         else:
27             print("座位号不存")
28 else:
29     print("座位号不存在")

17.计算

1)编写代码,输入一个正整数 n,输出 1-1/2+1/3-1/4+1/5+……+1/n 的和,结果保留两位小数,如果输入的不是正整数则给出相应提示。

 1 n = eval(input())
 2 if n <= 0 or type(n) != int:
 3     print("请输入正整数")
 4 else:
 5     sum = 0
 6     for i in range(n):
 7         j = i+1
 8         if j%2 != 0:
 9             sum += 1/j
10         else:
11             sum -= 1/j
12     print("表达式的和为{:.2f}".format(sum))

18.组合(排列)

1)编写代码,输入一个正整数 N,输出集合 1~N 的所有 3 个元素的排列。

 1 n = eval(input())
 2 num = 0
 3 for x in range(1,n+1):
 4     for y in range(1,n+1):
 5         if y == x:
 6             continue
 7         for z in range(1,n+1):
 8             if z == x or z == y:
 9                 continue
10             num += 1
11             print("{}:{},{},{}".format(num,x,y,z))
12 print("共有{}种排列".format(num))

21.棋子回位

1)假定一枚棋子在棋盘上的移动方向用’东南西北’来表示,每次移动的距离相等。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

现在输入一个字符串,保存有该棋子的移动顺序,判断该棋子在执行完该步骤序列后能够回到起点。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

字符串只有‘东‘’南‘’西‘’北’四种字符组成‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬,输出‘是’ 或者‘否’,分别代表是否回到起点。

 1 x = 0
 2 y = 0
 3 a = input()
 4 for i in a:
 5     if i == "":
 6         x += 1
 7     elif i == "":
 8         y -= 1
 9     elif i == "西":
10         x -= 1
11     else:
12         y += 1
13 if x==0 and y==0:
14     print("")
15 else:
16     print("")

22.数列求和

1)编写代码,输入一个小于 10 的整数 n,计算形如 1 + 12 + 123 + 1234 + …… 算式的前 n 项的和。

 1 import math
 2 n = eval(input())
 3 sum = 0
 4 for i in range(1,n+1):
 5     m = 0
 6     for j in range(1,i+1):
 7         
 8         m += j*math.pow(10,i-j)
 9         
10     sum += m
11 print(int(sum))

25.大小写转换

1)编写代码,输入一个字符串,将其中大写字母转为小写,小写字母转为大写,其他字符保持原样,输出转换后的字符串。

 1 a = input()
 2 b = ""
 3 for i in range(len(a)):
 4     if "a"<a[i]<"z":
 5         b += chr(ord(a[i])-32)
 6     elif "A"<a[i]<"Z":
 7         b += chr(ord(a[i])+32)
 8     else:
 9         b +=a[i]
10 print(b)

26.从 1 到 n 整数中 1 的个数

1)编写代码,输入一个正整数 n ,求出 1~n 的整数中 1 出现的次数。

1 sum = 0
2 n = eval(input())
3 for i in range(1,n+1):
4     a = str(i)
5     for j in a:
6         if j == "1":
7             sum += 1
8 print(sum)

28.删除列表元素

1)编写代码,输入位置,删除给定列表 [('a',3,5),('b',1,6),('c',0,3),('d',9,2),('e',5,1),('f',0,7),('g',6,8)] 中的指定位置元素,如果位置不存在,则输出“没有该元素”,然后对列表按每个元素中最后一项降序排序。

 1 ls = [('a',3,5),('b',1,6),('c',0,3),('d',9,2),('e',5,1),('f',0,7),('g',6,8)]
 2 #哈哈哈这个做法好恶心但是我好喜欢哈哈哈
 3 lt = [('g',6,8),('f',0,7),('b',1,6),('a',3,5),('c',0,3),('d',9,2),('e',5,1)]
 4 
 5 n = eval(input())
 6 if n > 6:
 7     print("没有该元素")
 8 else:
 9     m=ls.pop(n-1)
10     print("删除后的列表为{}".format(ls))
11     lt.remove(m)
12 print("排序后的列表为{}".format(lt))

29.操作表达式(操作算式)

1)编写代码,输入形如 "3+5+2+16+8+2" 的算式,输出形如 "16.8.5.3.2.2" 的结果,结果里的数字是输入算式里数字的逆序。

 1 a = input()
 2 ls = []
 3 
 4 n = ""
 5 for i in a:
 6     if i == "+":
 7         ls.append(int(n))
 8         n = ""
 9     else:
10         n += i
11 ls.append(int(n))
12 
13 ls.sort(reverse=True)
14 for i in range(len(ls)-1):
15     print(ls[i],end=".")
16 print(ls[-1])

30.查找数列中重复数字

1)编写代码,输入以逗号分隔的若干整数,以列表形式从小到大输出其中的重复数字

 1 a = input()
 2 ls = []
 3 l = []
 4 n = ""
 5 for i in a:
 6     if i == ",":
 7         ls.append(int(n))
 8         n = ""
 9     else:
10         n += i
11 ls.append(int(n))
12 
13 ls.sort()
14 lt = set(ls)
15 for i in lt:
16     if ls.count(i) >=2 :
17         l.append(i)
18 print(l)

31.人员信息处理

1)编写代码,从键盘输入以空格分隔的一组人员的姓名、性别、年龄信息,每人一行,空行结束输入,分性别以列表形式输出人员信息(缺失性别不输出)。

 1 lb = [] 
 2 lg = []
 3 a = input()#输入一行
 4 while(a != ""):
 5     l = []
 6     m = ""
 7     for i in a:
 8         if i == " ":
 9             l.append(m)
10             m = ""
11         else:
12             m += i
13     l.append(m)
14     
15     if l[1]=="":
16         lb.append(l)
17     elif l[1]=="":
18         lg.append(l)
19     else:
20         continue
21     
22     a = input() 
23 if lb != []:
24     print(lb)    
25 if lg != []:
26     print(lg)

32.密码验证

1)编写代码,从键盘输入列表形式的密码,根据下列规则对密码进行验证,输出符合规则的密码。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

         * 至少包含1个大写字母
         * 至少包含1个数字
         * 至少包含 $#@* 的一个字符
         * 密码长度最短为8位

 1 a = eval(input())
 2 for i in a:
 3     if len(i) < 8:
 4         continue
 5     x = 0
 6     y = 0
 7     z = 0
 8     for j in i:
 9         if "A"<=j<="Z":
10             x = 1
11         elif "1"<=j<="9":
12             y = 1
13         elif j == '$' or j == '#' or j == '@' or j == '*':
14             z = 1
15         else :
16             continue
17     if x*y*z != 0:
18         print(i)

34.求不重复元素的列表

1)编写程序,从键盘输入一个的列表,输出去重(只保留第一次出现的元素)后的列表和重复的元素的个数。

 1 a = eval(input())
 2 b = a.copy()
 3 c = [] 
 4 num = 1
 5 for i in b:
 6     if a.count(i) > 1:
 7         num+=1
 8         c.append(i)
 9         while(a.count(i) >= 1):
10             a.remove(i)
11     elif a.count(i) == 1:
12         c.append(i)
13 print(c)
14 print("重复元素有{}个".format(num))

35.求两个列表的向量积

1)编写程序,从键盘输入一个整数 n 作为向量的长度,然后输入 n 个整数,以逗号隔开,够成一个向量 x;再输入 n 个整数,以逗号隔开,构成另一个向量 y,计算向量 x 和 y 的內积。如果输入的向量长度和向量不匹配时,给出错误提示。向量的内积为两个向量的对应元素的乘积的和,计算公式如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 1 def ls(a,lx):
 2     t = ""
 3     for i in a:
 4         if i == ",":
 5             lx.append(int(t))
 6             t = ""
 7         else:
 8             t += i
 9     lx.append(int(t))
10     
11 n = eval(input())
12 a = input()
13 b = input()
14 lx = []
15 ly = []
16 ls(a,lx)
17 ls(b,ly)
18 if len(lx) != n or len(ly) != n:
19     print("错误,向量对应元素数量不等于n。")
20 else:
21     sum = 0
22     for i in range(n):
23         sum += lx[i]*ly[i]
24     print("x和y的内积是: {}".format(sum))

 

36.职位津贴计算

1)编写代码,输入员工编号,并根据给定的映射关系计算津贴总额,如果输入为空,则输出“请输入数据,例如:A01,B02”。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

d1 = {'经理': 1000, '主管': 800, '职员': 500}
d2 = {'经理': ['A01'], '主管': ['B01', 'B02'], '职员': ['C01', 'C02', 'C03']}
 1 d1 = {'经理': 1000, '主管': 800, '职员': 500}
 2 d2 = {'经理': ['A01'], '主管': ['B01', 'B02'], '职员': ['C01', 'C02', 'C03']}
 3 a = input()
 4 if a == "":
 5     print("请输入数据,例如:A01,B02")
 6 else:
 7     lx = []
 8     t = ""
 9     for i in a:
10         if i == ",":
11             lx.append(t)
12             t = ""
13         else:
14             t += i
15     lx.append(t)
16     sum = 0 
17     for i in lx:
18         for j in d2:
19             if i in d2[j]:
20                 sum += d1[j]
21     print("津贴总额为{}元".format(sum))

 

37.字频降序‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 

1)编写代码,输入一个句子,对句子中字符的出现次数进行统计,然后将句子中的字符按频次降序进行输出。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 

2)运行结果如下图所示。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 

 1 a = input()
 2 c = {}
 3 #get()方法语法:
 4 #dict.get(key, default=None)
 5 #key -- 字典中要查找的键。
 6 #default -- 如果指定键的值不存在时,返回该默认值。
 7 for i in a:
 8     c[i] = c.get(i,0) + 1
 9 d = list(c.items())
10 # 将字典d按value的值进行排序    key=lambda x: x[1]  实现
11 d.sort(key=lambda x:x[1],reverse=True)
12 ls = []
13 for i in d:
14     ls.append(i[0])
15 print(" - ".join(ls))

补充:" ".join(x) :将列表转为字符串," "中参数确定间隔符

 

39.水果统计

 

1)编写代码,输入一行以空格分隔的水果名称,统计各类型水果的数量并按照数量从多到少进行输出。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 

2)运行结果如下图所示。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬

 

 

 1 a = input()
 2 b = a.split(" ")
 3 c = {}
 4 #get()方法语法:
 5 #dict.get(key, default=None)
 6 #key -- 字典中要查找的键。
 7 #default -- 如果指定键的值不存在时,返回该默认值。
 8 for i in b:
 9     c[i] = c.get(i,0) + 1
10 d = list(c.items())
11 # 将字典d按value的值进行排序    key=lambda x: x[1]  实现
12 d.sort(key=lambda x:x[1],reverse=True)
13 
14 for i in d:
15     print("{}:{}".format(i[0],i[1]))

 

 

 

 
posted @ 2021-12-14 10:17  beca~se  阅读(515)  评论(0编辑  收藏  举报