Python [必刷64道 基础程序题]

目录

1. (程序题)【求圆柱体的体积】

2. (程序题)【时间计算】 

3. (程序题)【利息计算】 

4. (程序题)【BMI指数计算】 

 5. (程序题)【烧热水】 

6. (程序题)【三角形面积】 

7. (程序题)【节约用电】 

8. (程序题)【四位数逆序输出】 

9. (程序题)【计算年薪】 

10. (程序题)【三个数必有最大——part 1】 

 11. (程序题)【三个数必有最大——part 2】 

12. (程序题)【简单计算2】 

13. (程序题)【计算字符个数】 

 14. (程序题)【判断回文字符串】 

15. (程序题)【字符串截取】 

16. (程序题)【克莱姆法则求解方程】 

17. (程序题)【数列求和 - part one】 

18. (程序题)【删除字符串中连续的重复字符】 

19. (程序题)【温度转换】 

 20. (程序题)【字符串循环左移】 

21. (程序题)【字符串替换】 

22. (程序题)【字符串基本操作】 

23. (程序题)【字符串逆序】 

24. (程序题)【列表合并去重】 

25. (程序题)【列表的基本操作】 

26. (程序题)【列表排列】 

27. (程序题)【列表求平均值】

28. (程序题)【有序列表插入元素】

29. (程序题)【字符子串下标匹配】 

30. (程序题)【查验身份证】

31. (程序题)【又见字符统计】 

32. (程序题)【不常见的单词】 

33. (程序题)【打印空心三角形】 

34. (程序题)【字符串的重新排列】

35. (程序题)【在区间范围内统计回文数字的数目】

36. (程序题)【单词的区域】

37. (程序题)【你好,分段函数】 

38. (程序题)【矩阵相加】 

39. (程序题)【字符统计】

 40.【单词统计 — part one】

41. (程序题)【列表求平均值】 

42. (程序题)【乘积的列表】 

43. (程序题)【寻找不一样的约数】 

44. (程序题)【亲和数】 

45. (程序题)【有序列表的重复项删除】 

46. (程序题)【身份证提取信息】 

47. (程序题)【最常见的单词】 

48. (程序题【列表下标转换】 



Python [必刷64道 基础程序题]_第1张图片

愿你我都能在彼此看不到的地方褶褶生辉 


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''  {变量}

 Python [必刷64道 基础程序题]_第2张图片

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}秒')

 Python [必刷64道 基础程序题]_第3张图片

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}')

Python [必刷64道 基础程序题]_第4张图片

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}')

Python [必刷64道 基础程序题]_第5张图片

 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}')

 Python [必刷64道 基础程序题]_第6张图片

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}')

Python [必刷64道 基础程序题]_第7张图片

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}')

 Python [必刷64道 基础程序题]_第8张图片

Python [必刷64道 基础程序题]_第9张图片  

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字符串用空格分隔连接

Python [必刷64道 基础程序题]_第10张图片

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元

 Python [必刷64道 基础程序题]_第11张图片

 Python [必刷64道 基础程序题]_第12张图片

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)

 Python [必刷64道 基础程序题]_第13张图片

 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)

Python [必刷64道 基础程序题]_第14张图片

13. (程序题)【计算字符个数】 

Description

通过输入,在一行内接收一个仅由字母和数字组成的字符串,还有一个单一字符,然后输出“输入的字符串”中含有该字符的个数。不区分大小写。输入格式:输入一个由字母和数字组成的字符串,和一个字符,以空格隔开。输出格式:输出“输入的字符串”中含有该字符的个数。

【提示】:1、必须使用字符串处理方法str.lower()或str.upper()。2、输入数据仅占一行,获取输入的字符串和字符必须使用str.split()分别获取。

Input

输入样例:

a1234bAcdeAf a

Output

输出样例:

3

Sample Input 1 

Plain Text

a1234bAcdeAf a

Sample Output 1

Plain Text

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)

Python [必刷64道 基础程序题]_第15张图片

 14. (程序题)【判断回文字符串】 

Description

输入一个字符串,判断该字符串是否为回文。回文就是字符串中心对称,从左向右读和从右向左读的内容是一样的。

Input

输入格式:

输入在一行中给出一个不超过80个字符长度的、以回车结束的非空字符串。

Output

输出格式:

输出在第1行中输出字符串。如果它是回文字符串,在第2行中输出Yes,否则输出No。

Sample Input 1 

Plain Text

level

Sample Output 1

Plain Text

level

Yes

s1=input()
s2=s1[::-1]  #逆序
print(s1)
if s1==s2:
    print('Yes') #字符串加引号
else:
    print('No')

 Python [必刷64道 基础程序题]_第16张图片

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)

Python [必刷64道 基础程序题]_第17张图片

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.0

Sample Output 1

Plain Text

The equation has no solution

Sample Input 2 

Plain Text

2,4,1,8,3,2

Sample 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}')

Python [必刷64道 基础程序题]_第18张图片

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)

Python [必刷64道 基础程序题]_第19张图片

18. (程序题)【删除字符串中连续的重复字符】 

Description

通过键盘输入一串小写字母(a~z)组成的字符串,编写一个测试程序,将字符串中连续出现的重复字符删去(即在一个字符串中,如果遇到连续重复的字符只出现一次),然后输出处理后的字符串。例如:str1="aabbccddaabbccdd",输出结果为:"abcdabcd"。

Input

输入格式:共一行,为一个字符串

Output

输出格式:共一行,为删除连续的重复字符后得到的新字符串

Sample Input 1 

 
   

Plain Text

aabcccccaaa

Sample 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返回值是一个地址

 Python [必刷64道 基础程序题]_第20张图片

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('输入格式错误!')

 Python [必刷64道 基础程序题]_第21张图片

 Python [必刷64道 基础程序题]_第22张图片

 Python [必刷64道 基础程序题]_第23张图片

 20. (程序题)【字符串循环左移】 

Description

给定一个字符串S,要求把S的前k个字符移动到S的尾部,如把字符串“abcdef”前面的2个字符‘a’、‘b’移动到字符串的尾部,得到新字符串“cdefab”,称作字符串循环左移k位。

Input

输入格式:输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。

Output

输出格式:在一行中输出循环左移N次后的字符串。

Sample Input 1 

Plain Text

abcd 

2

Sample Output 1

Plain Text

cdab

s=input()
n=eval(input())
s1=s[0:n:]
s2=s[n::]
st=s2+s1
print(st)

 Python [必刷64道 基础程序题]_第24张图片

21. (程序题)【字符串替换】 

Description

将给定字符串中的大写字母和小写英文字母都按以下对应规则替换:

Python [必刷64道 基础程序题]_第25张图片

Input

输入格式:输入在一行中给出一个不超过80个字符、并以回车结束的字符串。

Output

输出格式:输出在一行中给出替换完成后的字符串。

Sample Input 1 

 
   

Plain Text

CAPItaL LeTtERS

Sample 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)}')  #转字符串

 Python [必刷64道 基础程序题]_第26张图片

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)

Python [必刷64道 基础程序题]_第27张图片

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(' ',''))

Python [必刷64道 基础程序题]_第28张图片

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])

Python [必刷64道 基础程序题]_第29张图片

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)

 Python [必刷64道 基础程序题]_第30张图片

27. (程序题)【列表求平均值】

Description

依次输入1到多个整数,并保存在列表中,求此列表的平均值。

Input

1到多个整数,以空格隔开。

Output

输出此列表的平均值,四舍五入保留一位小数。

Sample Input 1 

Plain Text

1 2 3 4 5

Sample 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)

 Python [必刷64道 基础程序题]_第31张图片

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]

 Python [必刷64道 基础程序题]_第32张图片

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()函数,如果有返回开始索引值,如果没有抛出异常

 Python [必刷64道 基础程序题]_第33张图片

Python [必刷64道 基础程序题]_第34张图片

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') #全部合格

Python [必刷64道 基础程序题]_第35张图片

 Python [必刷64道 基础程序题]_第36张图片

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)

Python [必刷64道 基础程序题]_第37张图片

Python [必刷64道 基础程序题]_第38张图片

32. (程序题)【不常见的单词】 

Description

给定两个字符串 S1 和 S2 ,确保 S1 与 S2 都只有空格和单词组成。且保证每个单词仅由小写字母组成。

如果某个单词在其中一个句子中恰好出现一次,在另一个句子中却没有出现 ,那么这个单词就是 不常见的 。

给你两个 句子s1和s2 ,返回所有不常用单词的列表。返回列表中单词要求按 S1 中出现,S2中出现的顺序组织。

Input

输入格式:
两行,一行代表一个字符串

Output

输出格式:
一行,不常见单词列表

Sample Input 1 

Plain Text

this apple is sweet this apple is sour

Sample 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)

 Python [必刷64道 基础程序题]_第39张图片

33. (程序题)【打印空心三角形】 

Description

输入任意一个大于零的整数N,根据输入的整数不同打印出不同行数的空心三角形。

Input

输入格式:一个大于0的整数

Output

输出格式:一个空心三角形

Sample Input 1 

Plain Text

6

Sample 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)#最后一行

Python [必刷64道 基础程序题]_第40张图片

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))

 Python [必刷64道 基础程序题]_第41张图片

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)

Python [必刷64道 基础程序题]_第42张图片

Python [必刷64道 基础程序题]_第43张图片

36. (程序题)【单词的区域】

Description

输入一个列表 words ,列表中的元素全部为由字符串组成的单词,遍历整个列表,将所有可以使用键盘中同一区域字母打印出来的单词,和其所对应的颜色区域组成”键值对“存入字典当中,并输出。键盘如下图所示。

Python [必刷64道 基础程序题]_第44张图片

美式键盘 中:

  • 红色区域由字符 "qweasdzxc" 组成。

  • 蓝色区域由字符 "rtyfghvbn" 组成。

  • 黄色区域由字符 "uiopjklm" 组成。

Input

输入格式:

一行仅由单词组成的字符串,单词之间用空格隔开

Output

输出格式:
一行,单词区域的字典

Sample Input 1 

sea hello Dad Peace try pop

Sample Output 1

{'Red': ['sea', 'Dad'], 'Blue': ['try'], 'Yellow': ['pop']}

Sample Input 2 

BLUE red yellow pink

Sample 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)

Python [必刷64道 基础程序题]_第45张图片

Python [必刷64道 基础程序题]_第46张图片

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

0

Sample 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}')

Python [必刷64道 基础程序题]_第47张图片

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 #恢复初始计数
'''

Python [必刷64道 基础程序题]_第48张图片

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}')

 Python [必刷64道 基础程序题]_第49张图片

 Python [必刷64道 基础程序题]_第50张图片

 40.【单词统计 — part one】

【题目描述】

本题目要求编写程序统计一行字符中单词的个数。所谓“单词”是指连续不含空格的字符串,各单词之间用空格分隔,空格数可以是多个。

【输入描述】

    输入格式:输入给出一行字符。

【输出描述】

    输出格式:在一行中输出单词个数。

【输入样例1】 

    Let's go to room 209.

【输出样例1】

    5

s=input().split()#列表统计元素个数
n=len(s)
print(n)

Python [必刷64道 基础程序题]_第51张图片

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)

Python [必刷64道 基础程序题]_第52张图片

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)

Python [必刷64道 基础程序题]_第53张图片

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' ')

 Python [必刷64道 基础程序题]_第54张图片

 Python [必刷64道 基础程序题]_第55张图片

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')

 Python [必刷64道 基础程序题]_第56张图片

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))
'''

 Python [必刷64道 基础程序题]_第57张图片

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('输入错误!')

 Python [必刷64道 基础程序题]_第58张图片

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)

 Python [必刷64道 基础程序题]_第59张图片

Python [必刷64道 基础程序题]_第60张图片

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)

Python [必刷64道 基础程序题]_第61张图片

你可能感兴趣的:(Python,python,开发语言)