目录
愿你我都能在彼此看不到的地方褶褶生辉
1. (程序题)【求圆柱体的体积】
Description
从键盘输入一个圆柱体的半径r和高h,求:圆柱体的体积v。结果要求保留2位小数。圆周率为3.14159。
Input
圆柱体的半径r和高h
Output
圆柱体的体积
Sample Input 1
1.5
3
Sample Output 1
v=21.21
r=eval(input())
h=eval(input())
v=(r**2*3.14159)*h
print(f'v={v:.2f}') #结果保留两位小数 f-string 语法 输出格式 f'' {变量}
2. (程序题)【时间计算】
Description
接收用户输入的一个秒数(非负整数),折合成小时、分钟和秒输出。
Input
输入格式:一个非负整数
Output
输出格式:将小时、分钟、秒输出到一行,中间使用空格分隔。
Sample Input 1
Plain Text
70000
Sample Output 1
Plain Text
19时26分40秒
s=int(input())
h=s//3600 #整除得到结果为小时
m=(s-(h*3600))//60 #计算分钟
s=s-h*3600-m*60 #秒
print(f'{h}时{m}分{s}秒')
3. (程序题)【利息计算】
Description
假如你想将一笔钱以固定年利率存入账户。如果你希望三年之后账户中有5000元,你现在需要存入多少钱?使用下面的公式可以算出初始存款:
编写一个程序,提示用户输入最终金额值、百分比表示的年利率以及年数,然后显示最初存款额。
Input
输入格式:最终金额值、百分比表示的年利率以及年数,输入下一项需换行
Output
输出格式:最初存款额(注意:计算后保持原样输出,保留两位小数位数)
Sample Input 1
Plain Text
1000
4.25
5
Sample Output 1
Plain Text
808.86
w=eval(input()) #最终金额
p=eval(input())# 百分比表示的年利率,
n=eval(input())# 年数
m=(p/100)/12 #月利率
e=w/((1+m)**(n*12)) #最初金额
print(f'{e:.2f}')
4. (程序题)【BMI指数计算】
Description
身体质量指数(Body Mass Index,BMI)是根据人的体重和身高计算得出的一个数字,BMI对大多数人来说,是相当可靠的身体肥胖指标,其计算公式为:
其中体重单位为公斤,身高单位为米。编写程序,提示用户输入体重和身高的数字,输出BMI。
Input
输入格式:输入两行数字,第一行为体重(公斤),第二行为身高(米)
Output
输出格式:相应的BMI值,保留两位小数。
Sample Input 1
Plain Text
80
1.75
Sample Output 1
Plain Text
26.12
w=eval(input())
h=eval(input())
B=w/(h**2)
print(f'{B:.2f}')
5. (程序题)【烧热水】
Description
编写一个程序,计算将水从初始温度加热到最终温度所需的能量。提示用户输入以千克计算的水量以及水的初始温度和最终温度。计算能量的公式是:Q = M * (最终温度–初始温度) * 4184。M是按千克计的水量,温度为摄氏温度,热量Q以焦耳计。
Input
输入格式:以千克计算的水量以及水的初始温度和最终温度(摄氏温度),输入下一项需换行
Output
输出格式:以焦耳计算的能量(小数点后保留一位)
Sample Input 1
Plain Text
55.5
3.5
10.5
Sample Output 1
Plain Text
1625484.0
M=eval(input())#水量
T1=eval(input()) #初始温度
T2=eval(input()) #最终温度
Q=M*(T2-T1)*4184
print(f'{Q:.1f}')
6. (程序题)【三角形面积】
Description
由三角形的三边长,求其面积。规定:输入的三条边一定能构成三角形,不用进行判定。提示:a,b,c小于1000由三角形的三边a,b,c求面积可以用如下的公式:
Input
输入格式:三行,每行一个数字。
Output
输出格式:一个实数,保留两位小数。
Sample Input 1
Plain Text
3
4
5
Sample Output 1
Plain Text
6.00
import math
a=eval(input())
b=eval(input())
c=eval(input())
p=(a+b+c)/2
#S=math.sqrt(p*(p-a)*(p-b)*(p-c))
#函数sqrt()返回一个数字的算数平方根,使用时需要导入import math,使用格式math.sqrt()
S=(p*(p-a)*(p-b)*(p-c)) **0.5 #方法2:1/2方
print(f'{S:.2f}')
7. (程序题)【节约用电】
Description
某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。输入格式:输入在一行中给出某用户的月用电量(单位:千瓦时)。输出格式:在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost =应付电费值”;若用电量小于0,则输出"InvalidValue!"。
Input
输入样例1:10
Output
输出样例1:cost = 5.30
Sample Input 1
Plain Text
100
Sample Output 1
Plain Text
cost = 55.50
Sample Input 2
Plain Text
-100
Sample Output 2
Plain Text
Invalid Value!
m=eval(input()) #月用电量
cost=0 #应付电费值
if 0<=m<=50:
cost=m*0.53
print(f'cost = {cost:.2f}')
elif m<0:
print("Invalid Value!") #单独输出字符串要加双引号“ ”或者单引号‘’,否则报错为无定义变量
else: #排除0-50和赋值,其余都>50
cost=((m-50)*(0.53+0.05)+50*0.53)
print(f'cost = {cost:.2f}')
8. (程序题)【四位数逆序输出】
Description
编写一个程序,提示用户输入四位整数并以反向顺序显示。
Input
输入格式:一个四位的整数
Output
输出格式:四个一位整数,在同一行输出,空格分隔,结尾无空格无换行
Sample Input 1
1234
Sample Output 1
4 3 2 1
#最简单方法把他当作字符串处理,使用切片逆序输出
a=int(input())
b=str(a)
b=b[::-1]#逆序输出 等价于b=b[-1:-5:-1] 切片前取后不取,所以为-5
print(' '.join(b)) #.join()函数功能为用分隔符连接字符串 ' '.join(b) b字符串用空格分隔连接
9. (程序题)【计算年薪】
Description
编写程序,要求输入一个人的姓名和目前的年薪,然后计算这个人下一年的薪水。如果年薪小于40000元,则下一年的年薪将增长5%。如果年薪大于等于40000元收入,下一年的年薪除增加2000元外,还会增加超过40000元部分的2%。
Input
输入格式:共输入两行信息,第一行为姓名(字符串),第二行为目前年薪(数字)。
Output
输出格式:输出 【**新一年的年薪是:****元 】 不要增加额外的提示信息。
Sample Input 1
Plain Text
Linda
10000
Sample Output 1
Plain Text
Linda新一年的年薪是:10500.0元
Sample Input 2
Plain Text
Bob
78946
Sample Output 2
Plain Text
Bob新一年的年薪是:81724.9元
10. (程序题)【三个数必有最大——part 1】
Description
孔子曰:三人行必有我师
我师曰:三个数必有最大
Input
三个数字a b c
Output
a b c其中最大的数
Sample Input 1
Plain Text
10
20.0
30
Sample Output 1
Plain Text
30
a=eval(input())
b=eval(input())
c=eval(input())
#print(max(a,b,c)) 直接输出也可以
m=max(a,b,c) #max()取最大值函数,min()取最大值函数
print(m)
11. (程序题)【三个数必有最大——part 2】
Description
孔子曰:三人行必有我师
我师曰:三个数必有绝对值最大
Input
三个整数a b c
Output
a b c其中绝对值最大的数
(若存在多个绝对值相等的数,则输出第一个数,即最先出现的数)
Sample Input 1
Plain Text
-30
20
30
Sample Output 1
Plain Text
-30
a=eval(input())
b=eval(input())
c=eval(input())
max=a #假设a值最大,依次遍历比较大小保证多个绝对值相等的数,则输出第一个数,即最先出现的数,较大的赋值给max
if abs(b)>abs(a):
max=b
if abs(c)>abs(max):
max=a
print(max)
12. (程序题)【简单计算2】
请你统计从1~1000000之间(包括二者)7的倍数的个数。
n=0 #计数器
for i in range(1,1000001): #range(),取值 前闭区间,后开区间,取前不去后
if i%7==0: #7的倍数,对7取余一定为0
n+=1 #n=n+1 python中不存在 ++ --
print(n)
13. (程序题)【计算字符个数】
Description
通过输入,在一行内接收一个仅由字母和数字组成的字符串,还有一个单一字符,然后输出“输入的字符串”中含有该字符的个数。不区分大小写。输入格式:输入一个由字母和数字组成的字符串,和一个字符,以空格隔开。输出格式:输出“输入的字符串”中含有该字符的个数。
【提示】:1、必须使用字符串处理方法str.lower()或str.upper()。2、输入数据仅占一行,获取输入的字符串和字符必须使用str.split()分别获取。
Input
输入样例:
a1234bAcdeAf a
Output
输出样例:
3
Sample Input 1
Plain Text
a1234bAcdeAf aSample Output 1
Plain Text
3
a=input() #输入时敲个空格再输入a
b=a.lower() #.lower()转换成小写 .upper()转换成大写,因为大小写字母视为相同字母,遍历时需要同一大小写
c=b.split() #以空格分割字符串,分割后变成列表
n=0 #统计输入的字符串中含有a字符的个数
for i in c[0]: #c目前状态为列表['a1234bacdeaf', 'a'],c[0]为字符串a1234bacdeaf,相当于遍历字符串,
# 区分range()函数迭代对象,for循环语句的迭代对象可以为字符串、列表、元组、字典、集合、range对象
if i==c[1]: #c[1]为a
n=n+1
print(n)
14. (程序题)【判断回文字符串】
Description
输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。
Input
输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
Output
输出格式:
输出在第1行中输出字符串。如果它是回文字符串,在第2行中输出Yes,否则输出No。
Sample Input 1
Plain Text
levelSample Output 1
Plain Text
level
Yes
s1=input()
s2=s1[::-1] #逆序
print(s1)
if s1==s2:
print('Yes') #字符串加引号
else:
print('No')
15. (程序题)【字符串截取】
Description
输入一个长度为10的字符串,截取其中第4-5和第7-8两个区域并显示。
Input
输入格式:一个长度为10的字符串
Output
输出格式:输出两个切片区域,中间无间隔。
Sample Input 1
Plain Text
我喜欢去故宫和长城。Sample Output 1
Plain Text
故宫长城
s=input()
s1=s[4:6] #切片正向下标从0开始,默认步长为1
s2=s[7:9]
str=s1+s2 #字符串不可变数据类型,两个字符串可以用+连接
print(str)
16. (程序题)【克莱姆法则求解方程】
Description
请用克莱姆法则解下面的线性方程2x2系统:
编写程序,用户输入数字a、b、c、d、e和f,然后显示x和y的结果。如果ad-bc为零,呈现“The equation has no solution”。
Input
输入格式:a,b,c,d,e和f的值(英文逗号分隔)
Output
输出格式:x和y的值(空格分隔,小数点后保留1位)
Sample Input 1
Plain Text
1.0,2.0,2.0,4.0,4.0,5.0Sample Output 1
Plain Text
The equation has no solutionSample Input 2
Plain Text
2,4,1,8,3,2Sample Output 2
Plain Text
x=1.3,y=0.1
a,b,c,d,e,f=eval(input())
if a*d-b*c==0:
print('The equation has no solution')
else:
x=(e*d-b*f)/(a*d-b*c)
y=(a*f-e*c)/(a*d-b*c)
print(f'x={x:.1f},y={y:.1f}')
17. (程序题)【数列求和 - part one】
【题目描述】
现有数列:
现在请输入一个正整数N,计算S的值。
【输入描述】
输入格式:一个正整数N
【输出描述】
输出格式:一个整数
【输入样例1】
3
【输出样例1】
24
正负数相间,不妨分开求和再相加,正数数列+负数数列=总数列和
n=int(input())
s1,s2,s=0,0,0
for i in range(1, n+1):
if i % 2 == 1: #奇数
i = i ** i
s1 = s1 + i
else: #偶数
i = i ** i
s2 = s2 - i
s=s1+s2
print(s)
18. (程序题)【删除字符串中连续的重复字符】
Description
通过键盘输入一串小写字母(a~z)组成的字符串,编写一个测试程序,将字符串中连续出现的重复字符删去(即在一个字符串中,如果遇到连续重复的字符只出现一次),然后输出处理后的字符串。例如:str1="aabbccddaabbccdd",输出结果为:"abcdabcd"。
Input
输入格式:共一行,为一个字符串
Output
输出格式:共一行,为删除连续的重复字符后得到的新字符串
Sample Input 1
Plain Text
aabcccccaaaSample Output 1
Plain Text
abca
s=input()
l=list(s) #字符串转换成列表
ls=[0] #定义的列表中有0这个原素
ls[0]=l[0]
for i in range(1,len(s)): #下标或者索引都是从0 ~ len(s)-1
if l[i]!=l[i-1]: #前面元素不等于后面元素
ls.append(l[i]) #向列表末尾添加原素a[i]
print("".join(ls)) #将列表转换成字符串 ""代表字符串类型
#print("".join(map(str,ls))) #将列表转换成字符串 方法2 map函数对ls列表中每一个元素进行转换str操作,map返回值是一个地址
19. (程序题)【温度转换】
Description
温度的刻画有两个不同体系:摄氏度(Celsius)和华氏度(Fahrenheit)。请编写程序将用户输入华氏度转换为摄氏度,或将输入的摄氏度转换为华氏度。转换算法如下:(C表示摄氏度、F表示华氏度)C = ( F - 32 ) / 1.8;F = C * 1.8 + 32。
要求如下:
(1) 输入输出的摄氏度可采用大小写字母C结尾,温度可以是整数或小数,如:12.34C指摄氏度12.34度;
(2)输入输出的华氏度可采用大小写字母F结尾,温度可以是整数或小数,如:87.65F指华氏度87.65度;
(3)输出保留小数点后两位,输入格式错误时,输出提示:输入格式错误;
(4) 使用input()获得测试用例输入时,不要增加提示字符串。
Input
输入示例1:
12.34C
输出示例1:
54.21F
Output
输入示例2:
12.34
输出示例2:
输入格式错误!
Sample Input 1
12.34C
Sample Output 1
54.21F
Sample Input 2
12.34
Sample Output 2
输入格式错误!
Sample Input 3
12.34c
Sample Output 3
54.21f
#方法1:
'''
s=input()
if s[-1] in ['C','c']: #取字符串s中最后一个元素判断是否为C,c,使用列表['C','c'],该列表为字符串列表
C=float(s[0:-1:]) #取数值部分,字母为最后一个元素下标-1,字母前都是数字
F=C*1.8+32
f=chr(ord(s[-1])+3) #ord()函数将字符串转换为ASIIC码,chr()函数将ASIIC码转换为字符串 C/c与F/fASIIC码值差3
print(f'{F:.2f}{f}')
elif s[-1] in ['F','f']:
F2=float(s[0:-1:])
C2=(F2-32)/1.8
c=chr(ord(s[-1])-3)
print(f'{C2:.2f}{c}')
else:
print("输入格式错误!")
'''
#方法2:
a=input()
if a[-1: -2:-1]=='C':
F=float(a[0:-1])*1.8+32
print(f'{F:.2f}F')
elif a[-1:-2:-1]=='c':
f=float(a[0:-1])*1.8+32
print(f'{f:.2f}f')
elif a[-1:-2:-1]=='F':
C=(float(a[0:-1])-32)/1.8
print(f'{C:.2f}C')
elif a[-1:-2:-1]=='f':
c=(float(a[0:-1])-32)/1.8
print(f'{c:.2f}c')
else:
print('输入格式错误!')
20. (程序题)【字符串循环左移】
Description
给定一个字符串S,要求把S的前k个字符移动到S的尾部,如把字符串“abcdef”前面的2个字符‘a’、‘b’移动到字符串的尾部,得到新字符串“cdefab”,称作字符串循环左移k位。
Input
输入格式:输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。
Output
输出格式:在一行中输出循环左移N次后的字符串。
Sample Input 1
Plain Text
abcd2
Sample Output 1
Plain Text
cdab
s=input()
n=eval(input())
s1=s[0:n:]
s2=s[n::]
st=s2+s1
print(st)
21. (程序题)【字符串替换】
Description
将给定字符串中的大写字母和小写英文字母都按以下对应规则替换:
Input
输入格式:输入在一行中给出一个不超过80个字符、并以回车结束的字符串。
Output
输出格式:输出在一行中给出替换完成后的字符串。
Sample Input 1
Plain Text
CAPItaL LeTtERSSample Output 1
Plain Text
The replaced text is:XZKRgzO OvGgVIH
s=input()
l=list(s)
s1=[0]
for i in range(0,len(s)):
if 'A'<=l[i]<='Z':
l[i]=chr(abs((ord(l[i])-155))) #A 65 Z 90 相差155
elif 'a' <=l[i] <='z':
l[i] = chr(abs((ord(l[i]) - 219))) #a 97 z 122 相差219
print(f'The replaced text is:{"".join(l)}') #转字符串
22. (程序题)【字符串基本操作】
Description
输入一行字符串,输出每行英文字母、数字及其他字符的个数,并将字符串中的小写字母变成大写字母,大写字母保持不变后输出。
Input
输入样例:
aBBcc学123习一个BCc
Output
输出样例:
字母字符数有8个,阿拉伯数字字符数有3个,其他字符有4个,本条字符转换为:ABBCC学123习一个BCC
Sample Input 1
Plain Text
aBBcc学123习一个BCc
Sample Output 1
Plain Text
字母字符数有8个,阿拉伯数字字符数有3个,其他字符有4个,本条字符转换为:ABBCC学123习一个BCC
s=list(input().upper()) #.lower()
a,b,c=0,0,0
for i in range(len(s)):
if 'A'<=s[i] <='Z':
#if s[i].isalpha():#不对,python中汉字当做字母处理
a+=1
elif s[i].isdigit():
b+=1
else:
c+=1
s=''.join(s)
print(f"字母字符数有{a}个,阿拉伯数字字符数有{b}个,其他字符有{c}个,本条字符转换为:{s}")
23. (程序题)【字符串逆序】
Description
输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。
Input
输入格式:
输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。
Output
输出格式:
在一行中输出逆序后的字符串。
Sample Input 1
Plain Text
Hello World!Sample Output 1
Plain Text
!dlroW olleH
s=input()
s=s[::-1]
print(s)
24. (程序题)【列表合并去重】
【题目描述】
输入两个列表alist和blist,要求列表中的每个元素都为正整数且不超过10;合并alist和blist,并将重复的元素去掉后输出一个新的列表clist。同时为保证输出结果一致,请将列表clist内元素按升序排序之后再输出。
【输入描述】
输入样例:共两行,每一行都用来输入列表中的元素值,以空格隔开。
【输出描述】
输出样例:共一行,以列表形式打印输出。
【输入样例1】
1 2 3
4 3 2【输出样例1】
[1, 2, 3, 4]
alist = list(map(int,input().split()))
blist = list(map(int,input().split()))
clist = list(set(alist + blist))
#print(sorted(clist))#默认升序
print(str(clist).replace(' ',''))
25. (程序题)【列表的基本操作】
【题目描述】
输入一串用空格隔开的数字字符,请依次将他们放入列表中保存,并去除列表中的重复项,最后将列表中的元素按数值大小从小到大进行排序,输出排好序后下标为i的字符。
【注意】测试样例中保证排完序的列表中至少有i+1个元素。
【输入描述】
第一行:一串以空格隔开的数字字符串。
第二行:待输出列表的下标值i。
【输出描述】
排好序的列表中下标为i的元素。
【输入样例1】
9 7 17 6 7 5 8
4【输出样例1】
9
s=input().split() #列表
a=eval(input())
l=list(set(s)) #集合去重-->列表 字符串列表
l1=list(map(int,l)) #变成整数列表
l2=sorted(l1) #默认升序
print(l2[a])
26. (程序题)【列表排列】
【题目描述】
给定一个由数字组成的列表sList,编写程序将所有 0 移动到列表的末尾,同时保持非零元素的相对顺序。
【输入描述】
输入格式:共一行,元素以英文逗号隔开。
【输出描述】
输出格式:共一行,为重新排列好的列表。
【输入样例1】
1,3,4,1.2,0,0,0.0,2,3,5.6【输出样例1】
[1, 3, 4, 1.2, 2, 3, 5.6, 0, 0, 0.0]
sList=input().split(',')
cList=[]
for i in range(len(sList)):
if sList[i] not in ['0','0.0']: #去0
cList.append(sList[i])
for j in range(len(sList)): #添加0
if sList[j] in['0','0.0']:
cList.append(sList[j])
ls=list(map(eval,cList)) #去‘’
print(ls)
27. (程序题)【列表求平均值】
Description
依次输入1到多个整数,并保存在列表中,求此列表的平均值。
Input
1到多个整数,以空格隔开。
Output
输出此列表的平均值,四舍五入保留一位小数。
Sample Input 1
Plain Text
1 2 3 4 5Sample Output 1
Plain Text
3.0
n=input().split()
n=list(map(eval,n))
ave=round(sum(n)/len(n),1)#round四舍五入 奇数进偶不进位 5.215-5.22 5.225-5.22
print(ave)
28. (程序题)【有序列表插入元素】
【输入描述】
从键盘上获取一个已按升序排好的整数列表(测试样例的数都已严格按照升序输入),用户输入一个待插入的整数,编写程序,实现插入该数后,列表后仍保持有序。
【输入描述】
样例输入:
1、列表元素由空格隔开。
2、待插入的整数。
【输出描述】
样例输出:
输出后的列表为X,插入后的索引值为X
若插入元素的值与已有列表中的元素相同,则X为最大下标索引值。
【输入样例1】
1 2 3 3 3 4
3【输出样例1】
输出后的列表为[1, 2, 3, 3, 3, 3, 4],插入索引值为5
n=list(map(int,input().split()))
n=sorted(n)#升序
m=int(input())
a=len(n)
j=0 #记录索引
if n[0]>m:
n.insert(0, m)
j=0
elif n[a-1]<m:
n.insert(a, m)
j=a
else:
for i in range(len(n)):
if n[i]==m and (n[i+1]!=m):
n.insert(i+1,m)
j=i+1
break
print(f'输出后的列表为{n},插入索引值为{j}')
29. (程序题)【字符子串下标匹配】
【题目描述】
从键盘输入两个字符串 Parent和 child,请你在字符串Parent中找出字符串child的第一个匹配项的下标(下标从 0 开始)。如果字符串child不是字符串Parent的一部分,则返回 -1 。
【注意】不区分大小写
【输入描述】
输入格式:两行字符串
【输出描述】
输出格式:一个整数
【输入样例1】
sadbutsad
Sad
【输出样例1】
0
【输入样例2】
ilovepython
then
【输出样例2】
-1
parent = input().lower()
child = input().lower()
print(parent.find(child))#.find函数查找字符串中是否包含子串,如果有返回开始索引值,如果没有返回-1
#区别于.index()函数,如果有返回开始索引值,如果没有抛出异常
30. (程序题)【查验身份证】
Description
一个合法的身份证号码由17位地区、日期编号和顺序编号加1位校验码组成。校验码的计算规则如下:首先对前17位数字加权求和,权重分配为:[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];然后将计算的和对11取模得到值Z;最后按照以下关系对应Z值与校验码M的值:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。
Input
输入格式:
输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。
Output
输出格式:
按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。
Sample Input 1
Plain Text
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
Sample Output 1
Plain Text
12010X198901011234
110108196711301866
37070419881216001X
Sample Input 2
Plain Text
2
320124198808240056
110108196711301862
Sample Output 2
Plain Text
All passed
num = int(input())#输入个数
M = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6',7: '5', 8: '4', 9: '3', 10: '2'}#字典存Z与M对应关系
quan = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
uneffective = [] #把不满足的存入一个列表中
for i in range(num):
number = list(input())#输入身份证号
try:
ber = list(map(int, number[:-1]))#前17位为整数话存入ber列表
s = 0
except: #try ... except 为异常处理关键字,try有异常话直接抛出执行except,如果try没有异常只执行try,跳过except
uneffective.append(number)#不符合存入该列表
continue #结束本次输入的身份证号循环
for i in range(17):#0-16 共17位
s += ber[i] * quan[i] #总和
s %= 11
if M[s] != number[-1]: # 最后1位是否 等于 Z对应的校验码
uneffective.append(number) #把不满足的存入该列表中
if len(uneffective) != 0: #只要有长度,说明存入了身份证不合格的列表
for i in uneffective: #s输出不合格的
print(''.join(i))
else:
print('All passed') #全部合格
31. (程序题)【又见字符统计】
【题目描述】
输入英文字符,请按照字母表顺序统计字符串中所有出现的字母的个数(计数时不区分大小写),若输入的内容有误,则输出Error!
【输入描述】
一串只包含英文字母的字符。
【输出描述】
按题目要求输出。
【输入样例1】
HelloWorld【输出样例1】
[0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 3, 0, 0, 2, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0]【输入样例2】
Hello, World!
【输入样例2】
Error
s=input().upper() #/.lower()
a=[0 for i in range(26)]#26个0,计数作用
flag=0 #假
for i in s:
if i>='A' and i<='Z':
a[ord(i)-ord('A')]+=1 #通过ASCII码值确定字符在a列表中位置,并且出现一次加1一次
else:
flag=1
if flag:
print('Error')
else:
print(a)
32. (程序题)【不常见的单词】
Description
给定两个字符串 S1 和 S2 ,确保 S1 与 S2 都只有空格和单词组成。且保证每个单词仅由小写字母组成。
如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却没有出现 ,那么这个单词就是 不常见的 。
给你两个 句子s1和s2 ,返回所有不常用单词的列表。返回列表中单词要求按 S1 中出现,S2中出现的顺序组织。
Input
输入格式:
两行,一行代表一个字符串Output
输出格式:
一行,不常见单词列表Sample Input 1
Plain Text
this apple is sweet this apple is sourSample Output 1
Plain Text
['sweet', 'sour']
s1=input().split()
s2=input().split()
l=[]
for i in range(len(s1)):#列表的索引必须是整数或者切片
if s1[i] not in s2:
l.append(s1[i])
for j in range(len(s2)):
if s2[j] not in s1:
l.append(s2[j])
print(l)
33. (程序题)【打印空心三角形】
Description
输入任意一个大于零的整数N,根据输入的整数不同打印出不同行数的空心三角形。
Input
输入格式:一个大于0的整数
Output
输出格式:一个空心三角形
Sample Input 1
Plain Text
6Sample Output 1
Plain Text
* ** * * * * * * ******
n=int(input())
print("*") #第一行
for i in range (2,n):
line="*" + " " *(i-2)+"*" #第2~n-1行
print(line)
if n>1:
print("*" * n)#最后一行
34. (程序题)【字符串的重新排列】
【题目描述】
从键盘输入两个长度相同的字符串 sLis 和 整数列表 iLis ,请重新排列字符串 sLis ,排列规则为:将字符串 sLis的第 i 个字符,按照列表元素 iLis[i] 所给出的数值,进行重新排列。
返回重新排列后的字符串。
【输入描述】
输入格式:共两行,第一行是字符串 sLis;第二行时整数列表 iLis中的元素(列表元素用逗号隔开)
【输出描述】
输出格式:共一行,重新排列后的字符串。
【输入样例1】
e vlPooynht
3,4,2,0,5,1,9,6,10,8,7【输出样例1】
love Python
sLis=list(input())
iLis=list(map(int,input().split(",")))
l=[]
s=0
for i in range(len(iLis)):#记录s值从0~len(iLis)
for j in range(len(sLis)):#s=i,遍历有没有与之相等的位置下标
if iLis[j]==s: #ilis索引与slist索引相同,可以通过一方索引寻找另一方元素,比如iLis[3]=0=s=0,slist[3]=l
l.append(sLis[j])
s+=1
print(''.join(l))
35. (程序题)【在区间范围内统计回文数字的数目】
Description
给你两个非负整数 low 和 high 。请你返回 low 和 high 之间(包括二者)回文数的数目。回文就是数字中心对称,从左向右读和从右向左读的内容是一样的【注意:low 一定小于 high,且 low 大于10】
Input
输入格式:一行,两个非负整数,中间用英文逗号隔开
Output
输出格式:一行,一个整数
Sample Input 1
Plain Text
100,200
Sample Output 1
Plain Text
10
Sample Input 2
Plain Text
456,654
Sample Output 2
Plain Text
19
low,high=input().split(',')
low=int(low)
high=int(high)
s=0
for i in range(low,high+1):
if str(i)==str(i)[::-1]:
s=s+1
print(s)
36. (程序题)【单词的区域】
Description
输入一个列表 words ,列表中的元素全部为由字符串组成的单词,遍历整个列表,将所有可以使用键盘中同一区域字母打印出来的单词,和其所对应的颜色区域组成”键值对“存入字典当中,并输出。键盘如下图所示。
美式键盘 中:
红色区域由字符 "qweasdzxc" 组成。
蓝色区域由字符 "rtyfghvbn" 组成。
黄色区域由字符 "uiopjklm" 组成。
Input
输入格式:
一行仅由单词组成的字符串,单词之间用空格隔开
Output
输出格式:
一行,单词区域的字典Sample Input 1
sea hello Dad Peace try popSample Output 1
{'Red': ['sea', 'Dad'], 'Blue': ['try'], 'Yellow': ['pop']}Sample Input 2
BLUE red yellow pinkSample Output 2
{'Red': [], 'Blue': [], 'Yellow': []}
s=list(input().split())
Red=['q','w','e','a','s','d','z','x','c','Q','W','E','A','S','D','Z','X','C']
Blue=['r','t','y','f','g','h','v','b','n','R','T','Y','F','G','H','V','B','N']
Yello=['u','i','o','p','j','k','l','m','U','I','O','P','J','K','L','M']
LR=[]
LB=[]
LY=[]
words={}#空字典
#红:
for i in s: #i为sea/hello/Dad...元素,一次取一个单词
r=0
b=0
y=0
for j in i: #j 字符,一个单词的长度,一次取一个字母
# 红:
if j in Red:
r+=1
if r==len(i):#如果相等,说明这个单词全部字母都在Red区间
LR.append(i)
#蓝:
if j in Blue:
b+=1
if b==len(i):#如果相等,说明这个单词全部字母都在Blue区间
LB.append(i)
#黄:
if j in Yello:
y+=1
if y==len(i):#如果相等,说明这个单词全部字母都在Blue区间
LY.append(i)
words['Red']=LR #字典[索引]:[列表LR] 键:值,键:值
words['Blue']=LB
words['Yello']=LY
print(words)
37. (程序题)【你好,分段函数】
Description
有这样一个函数,如果x大于0时,y等于x的三次方除以5,如果x等于0时,y的值为-1,如果x小于0时,y等于x的两倍加5。请输入相应的x的值,输出y的值。
无论结果是整数还是小数,请将结果保留1位小数输出。
Input
一个数,可以是整数,也可以是小数。
Output
一个数,保留一位小数输出。
Sample Input 1
Plain Text
0Sample Output 1
Plain Text
-1.0
x=eval(input())
if x>0:
y=(x**3)/5
elif x==0:
y=-1
else:
y=x*2+5
print(f'{y:.1f}')
38. (程序题)【矩阵相加】
Description
正整数n,代表要输入的是n*n的矩阵,两个矩阵由用户输入,计算输出两个矩阵相加的和。
Input
一个整数n,和两个矩阵的值。
Output
两个矩阵相加后的值,每个元素占三位,中间对齐,元素之间由两个空格组成。
Sample Input 1
Plain Text
3
12 3 -5
1 -9 0
3 6 8
1 8 9
6 5 4
3 2 1
Sample Output 1
Plain Text
13 11 4
7 -4 4
6 8 9
#方法1:
n=int(input())
x=[]
for i in range(n):
x.append(list(map(int,input().rstrip().split()))) #矩阵X
y=[]
for j in range(n):
y.append(list(map(int,input().rstrip().split()))) #矩阵Y
result=[[0 for i in range(n)]for j in range(n)] #行列全为0,也就是说为一个全0的空矩阵 i行数,j列数
for i in range(len(x)):
for j in range(len(x[i])):
result[i][j]=x[i][j]+y[i][j]#将相加的结果放入空矩阵中
for i in range(n):#矩阵输出
for j in range(n):
print(f'{result[i][j]:^3}',end=' ')#每个元素占三位,元素间空格隔开
print()#换行
'''
#方法2:
n = int(input())
tag = 0
alist = [[0] * n] * n #[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for i in range(n):
alist[i] = input().split(' ')#空格隔开,存储形式[['12', '3', '-5'], ['1', '-9', '0'], ['3', '6', '8']]
blist = [[0] * n] * n #[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
for i in range(n):
blist[i] = input().split(' ')
su = []
for i in range(n):
for j in range(n):
su.append(int(alist[i][j]) + int(blist[i][j]))
for i in range(n ** 2): #元素数目
print(f'{su[i]:^3}', end=' ')
tag += 1
if tag == n: #每次循环输出3个元素换行
print()
tag = 0 #恢复初始计数
'''
39. (程序题)【字符统计】
题目描述
从键盘输入任意一个字符串 S 和一个整数 N,中间用英文逗号’,‘隔开,并保证整数 N 小于字符串 S的长度。
编写程序,完成以下要求:
1、把字符串 S 最右边的 N 个不重复的小写英文字母挑选出来,并以字符串的形式,按照该字符在字符串 S 中的相对位置排列输出。如果输入的内容中没有 N 个小写英文字母,则显示信息“Not Found”。
2、若字符串 S中存在数字,则计算 S 中所有数字的和并输出,若不存在数字,则显示信息 ”No Number“。
【注:题目规定若S中存在数字则一定只为0~9的整数,其他情况不需要考虑】
输入要求
仅一行,任意输入一个字符串 S 和一个整数 N,中间用英文逗号’,‘隔开。
输出要求
共两行,第一行为字符串 S 中最右边的 N 个不重复的小写英文字母,若不够N个,则输出“Not Found”;
第二行输出字符串 S 中所有数字的和,若S中没有数字,则输出”No Number“。
输入样例 1
Plain Text
poemp133314567,7
输出样例 1
Plain Text
Not Found
Sum=33
输入样例 2
Plain Text
AiBe12shwQ2 shAdu 12shu,5
输出样例 2
Plain Text
wdshu
Sum=8
输入样例 3
Plain Text
syenish%$#@#&yesoosrqo,8
输出样例 3
Plain Text
ihyesrqo
No Number
输入样例 4
Plain Text
%aabc$#@dc#&ddcaa,10
输出样例 4
Plain Text
Not Found
No Number
#s=input()
#st,n=s.split(',')
s=input().split(',')
n=int(s[1])#取整
st=str(s[0])#取字符串
st=st[::-1]
ss=[]
sum=0
for i in range(len(st)):
if st[i].islower() and st[i] not in ss:
ss.append(st[i])
if n>len(ss):
print('Not Found')
else:
ss=''.join(ss)
print(ss[n-1::-1])
flag=1
for j in range(len(st)):
if st[j].isdigit():
sum=sum+int(st[j])
if sum==0:
print('No Number')
else:
print(f'Sum={sum}')
40.【单词统计 — part one】
【题目描述】
本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。
【输入描述】
输入格式:输入给出一行字符。
【输出描述】
输出格式:在一行中输出单词个数。
【输入样例1】
Let's go to room 209.
【输出样例1】
5
s=input().split()#列表统计元素个数
n=len(s)
print(n)
41. (程序题)【列表求平均值】
【题目描述】
依次输入1到多个整数,并保存在列表中,求此列表的平均值。
【输入描述】
1到多个整数,以空格隔开。
【输出描述】
输出此列表的平均值,四舍五入保留一位小数。
【输入样例1】
1 2 3 4 5【输出样例1】
3.0
n=list(map(int,input().split()))
s=0
for i in range(len(n)):
s=s+n[i]
ave=round(s/len(n),1)#round四舍五入 看要保留的前一位奇数进偶不进位 5.215-5.22 5.225-5.22
print(ave)
42. (程序题)【乘积的列表】
【题目描述】
给定一个包含若干个整数的列表alist,要求返回输出列表blist,blist中的元素为除与alist对应位置上的元素之外其余各元素的乘积。(注:原列表的1位于1号位置,结果应该等于除去1号位置的其他元素的积,对应输出6=2*3,原列表的2,对应输出3=1*3,原列表的3,对应输出2=1*2)
【输入描述】
输入格式:共一行,元素以空格隔开。
【输出描述】
输出格式:共一行,为一个列表。
【输入样例1】
1 2 3
【输出样例1】
[6, 3, 2]
alist=list(map(int,input().split()))
blist=[]
a=1
for i in alist: #遍历列表每个元素 1 , 2 , 3
al=alist[::] #不可以写成al=alist !!!!!疑问
al.remove(i)#删除列表中指定元素
for j in range(len(al)):
a=a*al[j]
blist.append(a)
a=1 #恢复1,重新算乘积
print(blist)
43. (程序题)【寻找不一样的约数】
【题目描述】
输入两个数n与m,寻找n和m之间不同的约数,并按不同约数的大小从大到小进行排序输出。
例如8的约数有1,2,4,8。9的约数有1,3,9,所以不同的约数是2、3、4、8、9。
【输入描述】两个正整数n和m,中间以空格隔开。
【输出描述】输出不同的约数,数据间以逗号进行分隔。,若没有不同约数,则输出“not found”。
【输入样例1】
8 9
【输出样例1】
2,3,4,8,9
【输入样例2】
4 16
【输出样例2】
8,16
【输入样例3】
5 5
【输出样例3】
not found
n,m=map(int,input().split())
nlist=[]
mlist=[]
for i in range(1,n+1):
if n%i==0:
nlist.append(i) #1 2 4 8
for j in range(1,m+1):
if m%j==0:
mlist.append(j) #1 3 9
if mlist==nlist:
print('not found')
else:
snlist=set(nlist)#转成集合
smlist=set(mlist)
ls=snlist^smlist #集合 对称差集,将两个集合合并并去除公共部分
l=sorted(list(ls)) #默认升序
for i in range(len(l)):
print(l[i],end=','if i!=len(l)-1 else' ')
44. (程序题)【亲和数】
【题目描述】
古希腊数学家毕达哥拉斯在自然数研究中发现,220的所有真约数(即不是自身的约数)之和为:1+2+4+5+10+11+20+22+44+55+110=284。
而284的所有真约数为1、2、4、71、 142,加起来恰好为220。
人们对这样的数感到很惊奇,并称之为亲和数。
一般地讲,如果两个数中任何一个数都是另一个数的真约数之和,则这两个数就是亲和数。
你的任务就编写一个程序,判断给定的两个数是否是亲和数
【输入描述】
两个整数A,B; 其中 0 <=A,B <=600000 ;
【输出描述】
如果A和B是亲和数的话输出YES,否则输出NO。
【输入样例1】
220 284
【输出样例1】
YES
【输入样例2】
100 200
【输出样例2】
NO
a,b=map(int,input().split())
al=[]
bl=[]
for i in range(1,a):
if a%i==0:
al.append(i)
for j in range(1,b):
if b%j==0:
bl.append(j)
if sum(al)==b and sum(bl)==a:
print('YES')
else:
print('No')
45. (程序题)【有序列表的重复项删除】
【题目描述】
给你一个列表sList,请你删除重复出现的元素,使每个元素只出现一次,返回删除后列表的新长度。元素的相对顺序应该保持一致。
【输入描述】
输入格式:一行整数,数字之间用逗号隔开
【输出描述】
输出格式:一个整数,为新列表的长度
【输入样例1】
1,11,1,2,2,3,3,4,4,5
【输出样例1】
6
#方法1:
n=map(int,input().split(','))
n=list(set(n)) #去重问题都可以转换成集合
print(len(n))
'''
#方法2:
n=map(int,input().split(','))
l = []
for i in n: #遍历列表元素
if i not in l: #如果该元素不在l列表中便添加该元素,如果存在了,就不在添加
l.append(i)
print(len(l))
'''
46. (程序题)【身份证提取信息】
【题目描述】
从键盘获取1个18位的身份证号18位身份证号前17位必须是数字,第18位可以是数字或是大写字母,不足18位或组成不正确的身份证号,输出"输入错误!";输入正确,则输出此人的出生日期、性别、以及今年多少岁(占3位有效位)。
提示:第1、2位数字表示:所在省份的代码;第3、4位数字表示:所在城市的代码;第5、6位数字表示:所在区县的代码;第7~14位数字表示:出生年(不能超过2023)、月(应为有效月份数)、日(应为有效日期数);第15~17位数字为顺序码,表示同一区域内同年同月同日出生的顺序号,其中第17位数字表示性别,奇数表示男性,偶数表示女性;第18位数字是校检码。
【输入描述】
输入样例:一个身份证号
【输出描述】
输出样例:输入正确时,输出:此人出生日期是1902年02月28日,性别是男,今年120岁;输入错误时:输入错误!
注意:标点符号为中文输入法,无空格
【输入样例1】
37050219020228003X
【输出样例1】
此人出生日期是1902年02月28日,性别是男,今年120岁
【输入样例2】
123243
【输出样例2】
输入错误!
import datetime #引入时间模块,如果直接写y=2023就不用引入了
s=input()
s1=s[0:17:1]#取前17位
s2=s[-1]#取最后一位
if len(s)==18:
if s1.isdigit() or (s2.isdigit() or s2.isupper()):
n = int(s[6:10]) # 需要进行整数年月日份算术和比较运算所以取整数类型
m = int(s[10:12])
d = int(s[12:14])
now = datetime.datetime.now() # 获取当前时间
y = now.year # 可以写y=2023
if 0 < n <= y and 1 <= m <= 12 and 1 <= d <= 31:#限定年月日范围
a = y - n - 1
if int(s[-2]) % 2 == 1:
sex = '男'
else:
sex = '女'
print(f'此人出生日期是{n}年{m:02d}月{d:02d}日,性别是{sex},今年{a}岁')
#保证输出02月,:02d等价于%02d,表示输出宽度为2的字符串,如果宽度不够2话,则用0补
else:
print('输入错误!')
else:
print('输入错误!')
else:
print('输入错误!')
47. (程序题)【最常见的单词】
【题目描述】
给定一个字符串 (S) 和一个禁用单词列表 (banned)。返回出现次数最多,同时不在禁用列表中的单词。题目保证至少有一个词不在禁用列表中,但答案不唯一。
禁用列表中的单词用小写字母表示,不含标点符号(标点符号包括【!】【,】【.】【:】【;】【'】【?】)。段落中的单词不区分大小写。答案都是小写字母。
【提示】注意S.split()和S.split(' ')的使用区别,简单来说:split()切割时会将多个空格当成一个空格;split(’ ')的时候,多个空格也要分割,因此会分割出来空。
【输入描述】
输入格式:输入两行,一个字符串和一个禁用单词列表。
【输出描述】
输出格式:一行,最常用单词列表。
【输入样例1】
Bob hit a ball, the hit BALL flew far after it was hit.
['hit']【输出样例1】
['ball']
【输入样例2】
A big black bug bit a big black bear and made the big black bear bleed blood.
['a','and']【输出样例2】
['big', 'black']
paragraph = input()
banned = input()#禁用单词
for c in "!?',;.":
paragraph = paragraph.replace(c, " ")#replace(old,new[,max]) max替换的个数,同一空格方便切割成列表
paragraph = paragraph.lower()
counter = {}
for word in paragraph.split():
if word not in banned: #单词是不在禁用表中
if word in counter: #如果单词已经在字典中了
counter[word] += 1 #统计单词出现次数 word为Bob a ball the hit BALL flew far after it was hit.相当于键
else:
counter[word] = 1 #如果这个第一次出现,不在字典中,这个单词出现次数为1
#counter={'bob': 1, 'a': 1, 'ball': 2, 'the': 1, 'flew': 1, 'far': 1, 'after': 1, 'was': 1}
most_common = []#出现次数最多得的单词,放入该列表
max_count = 0
for word, count in counter.items(): #字典中的.items()输出的是 键值对 输出key值和value值 ,count统计每个键的值
if count > max_count:
most_common = [word] #把键 赋值给列表
max_count = count
elif count == max_count: #如果出现多个最大值,也就是说出现次数最多得不止一个时,那放入一个列表中全部输出
most_common.append(word)
print(most_common)
48. (程序题【列表下标转换】
【题目描述】
从键盘输入一个字符串,保证字符串中的元素仅由英文单词构成(单词之间用英文逗号隔开)。请你先对字符串中的元素进行排序(仅排序,不要改变原本的字符串),然后将字符串中的每个元素替换为它们排序后的序号。请将替换后的字符串以列表的形式输出。
【详细解释】序号代表了一个元素有多大。序号编号的规则如下:
1、序号从 1 开始编号;
2、一个元素越大,那么序号越大;
3、果两个元素相等,那么它们的序号相同;
4、英文字母按照首字母的大小进行排序,如果首字母相同,则按第二个字母进行排序,依次类推;
【输入描述】
输入格式:一行英文单词,单词之间用逗号隔开
【输出描述】
输出格式:一个列表
【输入样例1】
a,a,a
【输出样例1】
[1,1,1]
【输入样例2】
a,a,h,b,c,e,d,f,ab,dd,c,f
【输出样例2】
[1,1,9,3,4,7,5,8,2,6,4,8]
words = input().split(",")
sorted_words = sorted(words)#排序abcdefg.....
word_dict = {}
index = 1
result=[]
for word in sorted_words:
if word not in word_dict: #如果这个单词不在这个单词字典里面,主要是让相同的单词具有相同的序号
word_dict[word] = index #index为排序的位置序号,同时为字典的值,word为键
index += 1
for word in words:
result.append(word_dict[word])#获取下标
#result=','.join(map(str,result)) #因为result为整型列表,需要先变成字符串列表,再使用join函数,变成列表
result=str(result).replace(' ', '')
print(result)