写在前面的话:
题目来源: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]))