前言

Hello!小伙伴!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
 
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,有幸拿过一些国奖、省奖…已保研。目前正在学习C++/Linux/Python
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
 
初学Python 小白阶段
文章仅作为自己的学习笔记 用于知识体系建立以及复习
题不在多 学一题 懂一题
知其然 知其所以然!

第1章

1-1 从键盘输入两个数,求它们的和并输出 (30 分)

题目

本题目要求读入2个整数A和B,然后输出它们的和。

输入格式:

在一行中给出一个被加数
在另一行中给出一个加数

输出格式:

在一行中输出和值。

输入样例:
在这里给出一组输入。例如:

18
-48

输出样例:
在这里给出相应的输出。例如:

-30

解答

a=int(input())
b=int(input())
print(a+b)

1-2 从键盘输入三个数到a,b,c中,按公式值输出 (30 分)

题目

在同一行依次输入三个值a,b,c,用空格分开,输出 bb-4a*c的值

输入格式:

在一行中输入三个数。

输出格式:

在一行中输出公式值。

输入样例:
在这里给出一组输入。例如:

3 4 5

输出样例:
在这里给出相应的输出。例如:

-44

解答

a,b,c = map(int,input().split())
print(b*b - 4*a*c)

1-3 输出“人生苦短,我学Python” (10 分)

题目

输入格式:

输出格式:

人生苦短,我学Python

输入样例:

输出样例:

人生苦短,我学Python

解答

l='人生苦短,我学Python'
print(l)

第二章习题

2-1 计算 11+12+13+…+m (30 分)

题目

输入一个正整数m(20<=m<=100),计算 11+12+13+…+m 的值。

输入格式:

在一行输入一个正整数m。

输出格式:

在一行中按照格式“sum = S”输出对应的和S.

输入样例:
在这里给出一组输入。例如:

90

输出样例:
在这里给出相应的输出。例如:

sum = 4040

解答

m=int(input())
res=sum(list(range(11,m+1)))
print("sum =",res)

2-2 计算分段函数[1] (10 分)

题目

本题目要求计算下列分段函数_f_(x)的值:

输入格式:

输入在一行中给出实数x。

输出格式:

在一行中按“f(x) = result”的格式输出,其中x与result都保留一位小数。

输入样例1:

10

输出样例1:

f(10.0) = 0.1

输入样例2:

0

输出样例2:

f(0.0) = 0.0

解答

提交代码-1

x=float(input())
if x==0:print("f({:.1f}) = {:.1f}".format(x,x))
else:print("f({:.1f}) = {:.1f}".format(x,1/x))


提交代码-2

x=float(input())
if x==0:print('f(%.1f) = %.1f'%(x,x))
else:print('f(%.1f) = %.1f' % (x, 1/x))

2-3 阶梯电价 (15 分)

题目

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

输入格式:

输入在一行中给出某用户的月用电量(单位:千瓦时)。

输出格式:

在一行中输出该用户应支付的电费(元),结果保留两位小数,格式如:“cost = 应付电费值”;若用电量小于0,则输出"Invalid Value!"。

输入样例1:

10

输出样例1:

cost = 5.30

输入样例2:

100

输出样例2:

cost = 55.50

解答

m=int(input())
if m<0:print("Invalid Value!")
elif m<=50:cost=m*0.53print("cost = {:.2f}".format(cost))
else:cost=50*0.53+(m-50)*(0.53+0.05)print("cost = {:.2f}".format(cost))

2-4 特殊a串数列求和 (20 分)

题目

给定两个均不超过9的正整数_a_和_n_,要求编写程序求_a_+aa+aaa++⋯+aa_⋯_an_个_a)之和。

输入格式:

输入在一行中给出不超过9的正整数a和n。

输出格式:

在一行中按照“s = 对应的和”的格式输出。

输入样例:

2 3

输出样例:

s = 246

解答

a,n=map(int,input().split())
num=0
sum=0
for i in range(1,n+1):num=num*10+asum+=num
print("s =",sum)

2-5 求奇数分之一序列前N项和 (15 分)

题目

本题要求编写程序,计算序列 1 + 1/3 + 1/5 + … 的前N项之和。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后6位。题目保证计算结果不超过双精度范围。

输入样例:

23

输出样例:

sum = 2.549541

解答

n=int(input())
sum=0
for i in range(1,2*n,2):sum+=1/i
print("sum = {:.6f}".format(sum))

2-6 求交错序列前N项和 (15 分)

题目

本题要求编写程序,计算交错序列 1-2/3+3/5-4/7+5/9-6/11+… 的前N项之和。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中输出部分和的值,结果保留三位小数。

输入样例:

5

输出样例:

0.917

解答

n=int(input())
sum=0
for i in range(1,n+1):if i%2==0:sum-=(i/(2*i-1))else:sum+=(i/(2*i-1))
print("{:.3f}".format(sum))

2-7 产生每位数字相同的n位数 (30 分)

题目

读入2个正整数A和B,1<=A<=9, 1<=B<=10,产生数字AA…A,一共B个A

输入格式:

在一行中输入A和B。

输出格式:

在一行中输出整数AA…A,一共B个A

输入样例1:
在这里给出一组输入。例如:

1, 5

输出样例1:
在这里给出相应的输出。例如:

11111

输入样例2:
在这里给出一组输入。例如:

3 ,4

输出样例2:
在这里给出相应的输出。例如:

3333

解答

a,b=map(int,input().split(','))
res=0
for i in range(1,b+1):res=(res*10)+a
print(res)

2-8 转换函数使用 (30 分)

题目

输入一个整数和进制,转换成十进制输出

输入格式:

在一行输入整数和进制

输出格式:

在一行十进制输出结果

输入样例:

在这里给出一组输入。例如:
45,8

输出样例:

在这里给出相应的输出。例如:
37

解答

提交代码-1

m,n=map(int,input().split(','))
count=0
ans=0
while(m>0):ans=ans+(m%10)*pow(n,count)count=count+1m=int(m/10)
print(int(ans))


提交代码-2

m,n=input().split(',')
ans=int(m,int(n))
print(ans)

2-9 比较大小 (10 分)

题目

本题要求将输入的任意3个整数从小到大输出。

输入格式:

输入在一行中给出3个整数,其间以空格分隔。

输出格式:

在一行中将3个整数从小到大输出,其间以“->”相连。

输入样例:

4 2 8

输出样例:

2->4->8

解答

提交代码 - 1

a,b,c=map(int,input().split())
if(a>b):temp=aa=bb=temp
if(a>c):temp=aa=cc=temp
if(b>c):temp=bb=cc=temp
print("%d->%d->%d" %(a,b,c))


提交代码 - 2

print(*sorted(map(int,input().split())),sep="->")

提交代码 - 3

#!/usr/bin/python3
print(*sorted(map(int,input().split(','))),sep="->")

2-10 输出华氏-摄氏温度转换表 (15 分)

题目

输入2个正整数lower和upper(lower≤upper≤100),请输出一张取值范围为[lower,upper]、且每次增加2华氏度的华氏-摄氏温度转换表。
温度转换的计算公式:C=5×(_F_−32)/9,其中:_C_表示摄氏温度,_F_表示华氏温度。

输入格式:

在一行中输入2个整数,分别表示lower和upper的值,中间用空格分开。

输出格式:

第一行输出:“fahr celsius”
接着每行输出一个华氏温度fahr(整型)与一个摄氏温度celsius(占据6个字符宽度,靠右对齐,保留1位小数)。
若输入的范围不合法,则输出"Invalid."。

输入样例1:

32 35

输出样例1:

fahr celsius
32 0.0
34 1.1

输入样例2:

40 30

输出样例2:

Invalid.

解答

#!/usr/bin/python3
m,n=map(int,input().split())
if(n<m):print('Invalid.')
else:print('fahr celsius')for i in range(m,n+1,2):print("{:d}{:>6.1f}".format(i,5*(i-32)/9))

2-11 求平方与倒数序列的部分和 (15 分)

题目

输入格式:

输入在一行中给出两个正整数m和n(m≤n),其间以空格分开。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。

输入样例:

5 10

输出样例:

sum = 355.845635

解答

提交代码 - 1

m,n=map(int,input().split())
sum=0
for i in range(m,n+1):sum=sum+i*i+1/i
print("sum = {:.6f}".format(sum))


提交代码 - 2

m,n=map(int,input().split())
print("sum = %.6f"% sum([(m*m+1/m) for m in range(m,n+1)]))

2-12 输出三角形面积和周长 (15 分)

题目

本题要求编写程序,根据输入的三角形的三条边_a_、bc,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√_s_(s_−_a)(s_−_b)(s_−_c),其中_s_=(a+b+c)/2。

输入格式:

输入为3个正整数,分别代表三角形的3条边a、b、c。

输出格式:

如果输入的边能构成一个三角形,则在一行内,按照
area = 面积; perimeter = 周长
的格式输出,保留两位小数。否则,输出
These sides do not correspond to a valid triangle

输入样例1:

5 5 3

输出样例1:

area = 7.15; perimeter = 13.00

输入样例2:

1 4 1

输出样例2:

These sides do not correspond to a valid triangle

解答

a,b,c=map(int,input().split())
if(a+b<=c or a+c<=b or b+c<=a):print("These sides do not correspond to a valid triangle")
else:s=(a+b+c)/2print("area = {:.2f}; perimeter = {:.2f}".format((s*(s-a)*(s-b)*(s-c))**0.5,a+b+c))

2-13 分段计算居民水费 (10 分)

题目

为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费_y_(元)与月用水量_x_(吨)相关:当_x_不超过15吨时,y=4_x_/3;超过后,y=2.5_x_−17.5。请编写程序实现水费的计算。

输入格式:

输入在一行中给出非负实数x。

输出格式:

在一行输出应交的水费,精确到小数点后2位。

输入样例1:

12

输出样例1:

16.00

输入样例2:

16

输出样例2:

22.50

解答

m=float(input())
if(m<=15):print("{:.2f}".format((4*m)/3))
else:print("{:.2f}".format(2.5*m-17.5))

2-14 求整数段和 (15 分)

题目

给定两个整数_A_和_B_,输出从_A_到_B_的所有整数以及这些数的和。

输入格式:

输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。

​输出格式:

首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。

输入样例:
-3 8

输出样例:

-3 -2 -1 0 1
2 3 4 5 6
7 8 Sum = 30

解答

a,b=map(int,input().split())
sum=0
count=0
for i in range(a,b+1):print("{:>5d}".format(i),end="")sum+=icount=count+1if(count==5):print("\n",end="")count=0elif(i==b):print("\n",end="")
print("Sum = {:d}".format(sum))

第三章习题

3-1 大于身高的平均值 (10 分)

题目

中小学生每个学期都要体检,要量身高,因为身高可以反映孩子的生长状况。现在,一个班的身高已经量好了,请输出其中超过平均身高的那些身高。程序的输入为一行数据,其中以空格分隔,每个数据都是一个正整数。程序要输出那些超过输入的正整数的平均数的输入值,每个数后面有一个空格,输出的顺序和输入的相同。

输入格式:

在一行输入中一个班的身高值,以空格分隔。

输出格式:

在一行输出超过输入的平均数的输入值,以空格分隔。

输入样例:

在这里给出一组输入。例如:
143 174 119 127 117 164 110 128

输出样例:

在这里给出相应的输出。例如:
143 174 164

解答

grades=list(map(int,input().split()))
sum=0
for i in grades:sum+=i
average_grade=sum/len(grades)
for i in grades:if(i>average_grade):print("{:d} ".format(i),end="")

3-2 查验身份证 (15 分)

题目

一个合法的身份证号码由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

现在给定一些身份证号码,请你验证校验码的有效性,并输出有问题的号码。

输入格式:

输入第一行给出正整数N(≤100)是输入的身份证号码的个数。随后N行,每行给出1个18位身份证号码。

输出格式:

按照输入的顺序每行输出1个有问题的身份证号码。这里并不检验前17位是否合理,只检查前17位是否全为数字且最后1位校验码计算准确。如果所有号码都正常,则输出All passed。

输入样例1:

4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X

输出样例1:

12010X198901011234
110108196711301866
37070419881216001X

输入样例2:

2
320124198808240056
110108196711301862

输出样例2:

All passed

解答

def judge(id,weight,checkCode):sum=0index=0#辅助索引# 前17位freWords=id[:17]# 第18位上的字符lastWord=id[-1]for i in freWords:if(i<'0' or i>'9'):return Falseelse:sum=sum+weight[index]*int(i)index=index+1sum=sum%11if checkCode[sum] == lastWord:return Trueelse:return Falsem=int(input())
# 统计正确身份证号码的数量
count=0
# 权重
weight=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
# 校验码
checkCode=['1','0','X','9','8','7','6','5','4','3','2']for i in range(m):id=input()if judge(id,weight,checkCode) == False:print(id)else:count=count+1
if(count == m):print("All passed")

3-3 输出字母在字符串中位置索引 (20 分)

题目

输入一个字符串,再输入两个字符,求这两个字符在字符串中的索引。

输入格式:

第一行输入字符串
第二行输入两个字符,用空格分开。

输出格式:

从右向左输出字符和索引,即下标最大的字符最先输出。每行一个。

输入样例:

在这里给出一组输入。例如:
pmispsissippi s p

输出样例:

在这里给出相应的输出。例如:
11 p
10 p
8 s
7 s
5 s
4 p
3 s
0 p

解答

str=input()
s1,s2=input().split()
count=len(str)-1
while count>=0:if str[count]==s1 or str[count]==s2:print("{:d} {:s}".format(count,str[count]))count=count-1

3-4 查找指定字符 (15 分)

题目

本题要求编写程序,从给定字符串中查找某指定的字符。

输入格式:

输入的第一行是一个待查找的字符。第二行是一个以回车结束的非空字符串(不超过80个字符)。

输出格式:

如果找到,在一行内按照格式“index = 下标”输出该字符在字符串中所对应的最大下标(下标从0开始);否则输出"Not Found"。

输入样例1:

m
programming

输出样例1:

index = 7

输入样例2:

a
1234

输出样例2:

Not Found

解答

提交代码 - 1

word=input()
words=input()
count=len(words)-1
while count>=0:if words[count] == word:print("index = {:d}".format(count))breakcount-=1
if count == -1:print("Not Found")


提交代码 - 2

word=input()
words=input()
if words.find(word) != -1:# 反转words=words[::-1]print("index = {:d}".format(len(words)-words.find(word)-1))
else:print("Not Found")

3-5 字符转换 (15 分)

题目

本题要求提取一个字符串中的所有数字字符(‘0’……‘9’),将其转换为一个整数输出。

输入格式:

输入在一行中给出一个不超过80个字符且以回车结束的字符串。

输出格式:

在一行中输出转换后的整数。题目保证输出不超过长整型范围。

输入样例:

free82jeep5

输出样例:

825

解答

提交代码 - 1

str=input()
ans=0
for i in str:if i>='0' and i<= '9':ans=ans*10+int(i)
print(ans)


提交代码 - 2

str=input()
ans=[]
for i in str:if i.isdigit():ans.append(i)
print(int("".join(ans)))

3-6 求整数序列中出现次数最多的数 (15 分)

题目

本题要求统计一个整型序列中出现次数最多的整数及其出现次数。

输入格式:

输入在一行中给出序列中整数个数N(0<N≤1000),以及N个整数。数字间以空格分隔。

输出格式:

在一行中输出出现次数最多的整数及其出现次数,数字间以空格分隔。题目保证这样的数字是唯一的。

输入样例:

10 3 2 -1 5 3 4 3 0 3 2

输出样例:

3 4

解答

a = input().split()[1:]#???
d = {}
for b in set(a):d[a.count(b)]=b
max_count = max(d.keys())
max_number = d.get(max_count)
print('{} {}'.format(max_number,max_count))

3-7 求最大值及其下标 (20 分)

题目

本题要求编写程序,找出给定的_n_个数中的最大值及其对应的最小下标(下标从0开始)。

输入格式:

输入在第一行中给出一个正整数n(1<n≤10)。第二行输入n个整数,用空格分开。

输出格式:

在一行中输出最大值及最大值的最小下标,中间用一个空格分开。

输入样例:

6 2 8 10 1 9 10

输出样例:

10 2

解答

m=int(input())
integers=list(map(int,input().split()))
max_interger=max(integers)
print("{:d} {:d}".format(max_interger,integers.index(max_interger)))

3-8 字符串逆序 (15 分)

题目

输入一个字符串,对该字符串进行逆序,输出逆序后的字符串。

输入格式:

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

输出格式:

在一行中输出逆序后的字符串。

输入样例:

Hello World!

输出样例:

!dlroW olleH

解答

str=input()
print("{}".format(str[::-1]))

3-9 字符串转换成十进制整数 (15 分)

题目

输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换为十进制数后输出。如果在第一个十六进制字符之前存在字符“-”,则代表该数是负数。

输入格式:

输入在一行中给出一个以#结束的非空字符串。

输出格式:

在一行中输出转换后的十进制数。题目保证输出在长整型范围内。

输入样例:

±P-xf4±1!#

输出样例:

-3905

解答

提交代码 - 1

str=input()
flag=1
res=""
checked=False
for i in str:if (i>='0' and i<='9') or (i>='A' and i<='F') or (i>='a' and i<='f'):res+=ichecked=Trueelif i=='-' and checked==False:flag=-1
if res == '':print(0)
else:print(flag*int(res,16))


提交代码 - 2

str=input()
s="123456789abcdefABCDEF"
res=""
for i in str:if i in s:res+=i
if res == "":print(0)
elif str.find(res[0])>str.find('-'):print(-int(res,16))
else:print(int(res,16))

3-10 统计大写辅音字母 (15 分)

题目

英文辅音字母是除A、E、I、O、U以外的字母。本题要求编写程序,统计给定字符串中大写辅音字母的个数。

输入格式:

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

输出格式:

输出在一行中给出字符串中大写辅音字母的个数。

输入样例:

HELLO World!

输出样例:

4

解答

提交代码 - 1

str=input()
s="AEIOU"
count=0
for i in str:if (i>='A' and i<='Z') and (i not in s):count+=1
print(count)


提交代码 - 2

str=input()
s="AEIOU"
count=0
for i in str:if (i.isupper() == 1) and (i not in s):count+=1
print(count)

3-11 字符串排序 (20 分)

题目

本题要求编写程序,读入5个字符串,按由小到大的顺序输出。

输入格式:

输入为由空格分隔的5个非空字符串,每个字符串不包括空格、制表符、换行符等空白字符,长度小于80。

输出格式:

按照以下格式输出排序后的结果:
After sorted:
每行一个字符串

输入样例:

red yellow blue green white

输出样例:

After sorted:
blue
green
red
white
yellow

解答

lst = list(map(str,input().split()))
lst.sort()
print("After sorted:")
for i in lst:print(i)

3-12 求整数的位数及各位数字之和 (15 分)

题目

对于给定的正整数N,求它的位数及其各位数字之和。

输入格式:

输入在一行中给出一个不超过109的正整数N。

输出格式:

在一行中输出N的位数及其各位数字之和,中间用一个空格隔开。

输入样例:

321

输出样例:

3 6

解答

str=input()
m=len(str)
sum=0
for i in str:sum=sum+int(i)
print("{:d} {:d}".format(m,sum))

3-13 字符串替换 (15 分)

题目

本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:

原字母 对应字母
A Z
B Y
C X
D W
X C
Y B
Z A

输入格式:

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

输出格式:

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

输入样例:

Only the 11 CAPItaL LeTtERS are replaced.

输出样例:

Lnly the 11 XZKRtaO OeGtVIH are replaced.

解答

提交代码 - 1

def change(word):return chr(ord('A')+25-(ord(word)-ord('A')))
s=input()
ans=""
for i in s:if i>='A' and i<='Z':ans+=change(i)else:ans+=i
print(ans)


提交代码 - 2

s=input()
ans=[]
for i in s:if 'A'<=i<='Z':ans.append(chr(155-ord(i)))else:ans.append(i)
print("".join(ans))


注意:

ord(‘A’)+25-(ord(word)-ord(‘A’))=ord(‘A’)+25+ord(word)+ord(‘A’) ​

ord(‘A’)=65 ​

65+65+25=155 ​

所以为 155-ord(word)

3-14 字符串字母大小写转换 (15 分)

题目

本题要求编写程序,对一个以“#”结束的字符串,将其小写字母全部转换成大写字母,把大写字母全部转换成小写字母,其他字符不变输出。

输入格式:

输入为一个以“#”结束的字符串(不超过30个字符)。

输出格式:

在一行中输出大小写转换后的结果字符串。

输入样例:

Hello World! 123#

输出样例:

hELLO wORLD! 123

解答

s=input()
s=s.replace('#','')
ans=""
for i in s:if i.islower():ans+=i.upper()elif i.isupper():ans+=i.lower()else:ans+=i
print(ans)

3-15 统计一行文本的单词个数 (15 分)

题目

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

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let’s go to room 209.

输出样例:

5

解答

str = input().split()
print(len(str))

3-16 删除重复字符 (20 分)

题目

本题要求编写程序,将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。

输入格式:

输入是一个以回车结束的非空字符串(少于80个字符)。

输出格式:

输出去重排序后的结果字符串。

输入样例:

ad2f3adjfeainzzzv

输出样例:

23adefijnvz

解答

s = list(set(input()))
s.sort()
for i in s:print(i,end="")

3-17 删除字符 (30 分)

题目

输入一个字符串 str,再输入要删除字符 c,大小写不区分,将字符串 str 中出现的所有字符 c 删除。提示:去掉两端的空格。

输入格式:

在第一行中输入一行字符 在第二行输入待删除的字符

输出格式:

在一行中输出删除后的字符串

输入样例1:
在这里给出一组输入。例如:

    Bee    E

输出样例1:
在这里给出相应的输出。例如:

result: B

输入样例2:
在这里给出一组输入。例如:

7!jdk*!ASyu !

输出样例2:
在这里给出相应的输出。例如:

result: 7jdk*ASyu

解答

str = input().strip()
word = input().strip()
str = str.replace(word.upper(),'').replace(word.lower(),'')
print("result: {}".format(str))

3-18 输出10个不重复的英文字母 (30 分)

题目

随机输入一个字符串,把最左边的10个不重复的英文字母(不区分大小写)挑选出来。 如没有10个英文字母,显示信息“not found”

输入格式:

在一行中输入字符串

输出格式:

在一行中输出最左边的10个不重复的英文字母或显示信息“not found"

输入样例1:
在这里给出一组输入。例如:

poemp134567

输出样例1:
在这里给出相应的输出。例如:

not found

输入样例2
在这里给出一组输入。例如:

This 156is a test example

输出样例2:
在这里给出相应的输出。例如:

Thisaexmpl

解答

提交代码 - 1

string =''.join(input().split())
cont=set()
index=list()
for i in range(0,len(string)):old = len(cont)if str.isalpha(string[i]):cont.add(string[i].lower())new = len(cont)if(old !=new):index.append(i)if len(cont) == 10:print(*list(map(lambda a: string[a],index)),sep="")exit()
print("not found")


提交代码 - 2

s=input()
ans=[]
for i in s:if i.isalpha() and i.upper() not in ans and i.lower() not in ans:ans.append(i)
if len(ans)<10:print("not found")
else:for i in range(10):print(ans[i],end="")

3-19 找最长的字符串 (15 分)

题目

本题要求编写程序,针对输入的N个字符串,输出其中最长的字符串。

输入格式:

输入第一行给出正整数N;随后N行,每行给出一个长度小于80的非空字符串,其中不会出现换行符,空格,制表符。

输出格式:
在一行中用以下格式输出最长的字符串:

The longest is: 最长的字符串

如果字符串的长度相同,则输出先输入的字符串。

输入样例:

5 li wang zhang jin xiang

输出样例:

The longest is: zhang

解答

counts = int(input())-1
ans = 0
str = ""
while counts>=0:s = input()if len(s)>ans:ans=len(s)str=scounts-=1
print("The longest is: {}".format(str))

3-20 逆序的三位数 (10 分)

题目

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

输入格式:

每个测试是一个3位的正整数。

输出格式:

输出按位逆序的数。

输入样例:

123

输出样例:

321

解答

提交代码 - 1

num = int(input())
sum = 0
while num:m=num%10sum=sum*10+mnum=int(num/10)
print(sum)


提交代码 - 2

str = input()
str = str[::-1]
print(int(str))

3-21 判断回文字符串 (15 分)

题目

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

输入格式:

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

输出格式:

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

​输入样例1:

level

​输出样例1:

level
Yes

输入样例2:

1 + 2 = 2 + 1 =

输出样例2:

1 + 2 = 2 + 1 =
No

解答

str1 = input()
str2 = str1[::-1]
if str1 == str2:print(str1)print("Yes")
else:print(str1)print("No")

3-22 输出大写英文字母 (15 分)

题目

本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。

输入格式:

输入为一个以回车结束的字符串(少于80个字符)。

输出格式:

按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母只输出一遍。若无大写英文字母则输出“Not Found”。

输入样例1:

FONTNAME and FILENAME

输出样例1:

FONTAMEIL

输入样例2:

fontname and filrname

输出样例2:

Not Found

解答

str = input()
ans = ""
for i in str:if i.isupper() and ans.find(i) == -1:ans+=i
if len(ans)==0:print("Not Found")
else:print(ans)

第四章

4-1 生成3的乘方表 (15 分)

题目

输入一个非负整数n,生成一张3的乘方表,输出30~3n的值。可调用幂函数计算3的乘方。

输入格式:

输入在一行中给出一个非负整数n。

输出格式:

按照幂的递增顺序输出n+1行,每行格式为“pow(3,i) = 3的i次幂的值”。题目保证输出数据不超过长整型整数的范围。

输入样例:

3

输出样例:

pow(3,0) = 1
pow(3,1) = 3
pow(3,2) = 9
pow(3,3) = 27

解答

m = int(input())
for i in range(m+1):print("pow(3,{:d}) = {:d}".format(i, 3**i))

4-2 统计素数并求和 (20 分)

题目

本题要求统计给定整数_M_和_N_区间内素数的个数并对它们求和。

输入格式:

输入在一行中给出两个正整数M和N(1≤M≤N≤500)。

输出格式:

在一行中顺序输出M和N区间内素数的个数以及它们的和,数字间以空格分隔。

输入样例:

10 31

输出样例:

7 143

解答

def issu(num):if num == 1:return Falsefor i in range(2, num):if num % i == 0:return Falsereturn Truem, n = map(int, input().split())
counts = 0
sum = 0
for i in range(m, n+1):if issu(i):counts += 1sum += i
print("{:d} {:d}".format(counts, sum))

4-3 猴子吃桃问题 (15 分)

题目

一只猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半加一个。到第N天早上想再吃时,见只剩下一个桃子了。问:第一天共摘了多少个桃子?

输入格式:

输入在一行中给出正整数N(1<N≤10)。

输出格式:

在一行中输出第一天共摘了多少个桃子。

输入样例:

3

输出样例:

10

解答

m = int(input())
ans = 1
for i in range(1, m):ans = (ans + 1) * 2
print(ans)

4-4 验证“哥德巴赫猜想” (20 分)

题目

数学领域著名的“哥德巴赫猜想”的大致意思是:任何一个大于2的偶数总能表示为两个素数之和。比如:24=5+19,其中5和19都是素数。本实验的任务是设计一个程序,验证20亿以内的偶数都可以分解成两个素数之和。

输入格式:

输入在一行中给出一个(2, 2 000 000 000]范围内的偶数N。

输出格式:

在一行中按照格式“N = p + q”输出N的素数分解,其中p ≤ q均为素数。又因为这样的分解不唯一(例如24还可以分解为7+17),要求必须输出所有解中p最小的解。

输入样例:

24

输出样例:

24 = 5 + 19

解答

提交代码 - 1

import mathdef issu(num):for i in range(2, int(math.sqrt(num))+1):if num % i == 0:return Falsereturn Truem = int(input())
for i in range(2, m):if issu(i) and issu(m-i):print("{} = {} + {}".format(m, i, m-i))break


提交代码 - 2

import mathdef issu(num):for i in range(2, int(math.sqrt(num))+1):if num % i == 0:return Falsereturn Truem = int(input())
for i in range(2, m//2+1):if issu(i) and issu(m-i):print("{} = {} + {}".format(m, i, m-i))break

4-5 求e的近似值 (15 分)

题目

自然常数 e 可以用级数 1+1/1!+1/2!+⋯+1/n!+⋯ 来近似计算。本题要求对给定的非负整数 n,求该级数的前 n+1 项和。

输入格式:

输入第一行中给出非负整数 n(≤1000)。

输出格式:

在一行中输出部分和的值,保留小数点后八位。

输入样例:

10

输出样例:

2.71828180

解答

提交代码 - 1

def factorial(num):ans = 1for i in range(1, num+1):ans *= ireturn ansN = int(input())
sum = 1
for i in range(1, N+1):sum += 1/factorial(i)
print("{:.8f}".format(sum))


提交代码 - 2

N = int(input())
num = 1
sum = 1
for i in range(1, N+1):num *= isum += 1/num
print("{:.8f}".format(sum))

4-6 输出前 n 个Fibonacci数 (15 分)

题目

本题要求编写程序,输出菲波那契(Fibonacci)数列的前_N_项,每行输出5个,题目保证输出结果在长整型范围内。Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,例如:1,1,2,3,5,8,13,…。

输入格式:

输入在一行中给出一个整数N(1≤N≤46)。

输出格式:

输出前N个Fibonacci数,每个数占11位,每行输出5个。如果最后一行输出的个数不到5个,也需要换行。如果N小于1,则输出"Invalid."

输入样例1:

7

输出样例1:

      1          1          2          3          5           8         13

输入样例2:

0

输出样例2:

Invalid.

解答

n = int(input())
if n < 1:print("Invalid.")
a = 0
b = 1
c = 1
count = 0
for i in range(n):print("{:>11d}".format(c), end="")c = a + ba = bb = ccount += 1if count == 5 or i == n-1:print("\n", end="")count = 0

4-7 统计学生平均成绩与及格人数 (15 分)

题目

本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。

输入格式:

输入在第一行中给出非负整数N,即学生人数。第二行给出N个非负整数,即这N位学生的成绩,其间以空格分隔。

输出格式:
按照以下格式输出:

average = 成绩均值
count = 及格人数

其中平均值精确到小数点后一位。

输入样例:

5 77 54 92 73 60

输出样例:

average = 71.2
count = 4

解答

nums = int(input())
if(nums == 0):print('average = 0.0')print('count = 0')exit()
grades = list(map(int, input().split()))
average = 0
count = 0
for i in grades:average += iif i >= 60:count += 1
print("average = {:.1f}".format(average/nums))
print("count = {:d}".format(count))

4-8 求分数序列前N项和 (15 分)

题目

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

本题要求编写程序,计算序列 2/1+3/2+5/3+8/5+… 的前N项之和。注意该序列从第2项起,每一项的分子是前一项分子与分母的和,分母是前一项的分子。

输入格式:

输入在一行中给出一个正整数N。

输出格式:

在一行中输出部分和的值,精确到小数点后两位。题目保证计算结果不超过双精度范围。

输入样例:

20

输出样例:

32.66

解答

提交代码 - 1

n = int(input())
a = 2
b = 1
sum = 2
for i in range(n-1):t = aa = a + bb = tsum += a/b
print("{:.2f}".format(sum))


提交代码 - 2

n = int(input())
a = 2
b = 1
sum = 2
for i in range(n-1):a, b = a+b, asum += a/b
print("{:.2f}".format(sum))

4-9 查询水果价格 (15 分)

题目

给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。

首先在屏幕上显示以下菜单:

[1] apple
[2] pear
[3] orange
[4] grape
[0] exit

用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。

输入格式:

输入在一行中给出用户连续输入的若干个编号。

输出格式:

首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。

输入样例1:

3 -1 0 2

输出样例1:

[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 4.10
price = 0.00

​输入样例2:

1 2 3 3 4 4 5 6 7 8

输出样例2:

[1] apple
[2] pear
[3] orange
[4] grape
[0] exit
price = 3.00
price = 2.50
price = 4.10
price = 4.10
price = 10.20

解答

goods = ["[1] apple", "[2] pear", "[3] orange", "[4] grape", "[0] exit"]
prices = ["3.00", "2.50", "4.10", "10.20"]
for i in goods:print(i)
lst = list(map(int, input().split()))
count = 0
for i in lst:count += 1if count > 5:exit()if 1 <= i <= 4:print("price = {}".format(prices[i-1]))elif i == 0:exit()else:print("price = 0.00")

4-10 最大公约数和最小公倍数 (15 分)

题目

本题要求两个给定正整数的最大公约数和最小公倍数。

输入格式:

输入在一行中给出两个正整数M和N(≤1000)。

输出格式:

在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。

输入样例:

511 292

输出样例:

73 2044

解答

def gcd(a, b):if a % b == 0:return belse:return gcd(b, a % b)n, m = input().split()
n = int(n)
m = int(m)
print('{:d} {:d}'.format(gcd(n, m), n*m//gcd(n, m)))

4-11 判断素数 (20 分)

题目

判断一个给定的正整数是否素数

输入格式:

输入在第一行给出一个正整数N(≤ 10),随后N行,每行给出一个小于1000000 的需要判断的正整数

输出格式:

对每个需要判断的正整数,如果它是素数,则在一行中输出Yes,否则输出No

输入样例:
在这里给出一组输入。例如:

2
11
111

输出样例:
在这里给出相应的输出。例如:

Yes
No

解答

import mathdef judge(num):if num == 1:return Falsefor i in range(2, int(math.sqrt(num))+1):if num % i == 0:return Falsereturn Truen = int(input())
while n > 0:num = int(input())if judge(num):print("Yes")else:print("No")n -= 1

4-12 求满足条件的斐波那契数 (30 分)

题目

斐波那契数,亦称之为斐波那契数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……,这个数列从第3项开始,每一项都等于前两项之和。求大于输入数的最小斐波那契数。

输入格式:

在一行输人一个正整数n(n>=10)。

输出格式:

在一行输出大于n的最小斐波那契数。

输入样例:
在这里给出一组输入。例如:

10

输出样例:
在这里给出相应的输出。例如:

13

解答

num = int(input())
a = 1
b = 1
c = a + b
while c < num:a, b = b, a+bc = a+b
print(c)

num = int(input())
a = 1
b = 1
while b < num:a, b = b, a+b
print(b)

4-13 求误差小于输入值的e的近似值 (20 分)

题目

自然常数e可以用级数1+1/1!+1/2!+⋯+1/n!来近似计算。ei代表前i项求和。输入误差范围error,当
ei+1-ei<error,则表示e的近似值满足误差范围。

输入格式:

在一行输入误差范围,误差小于等于0.01。

输出格式:

在一行输出e的近似值(保留6位小数)。

输入样例1:
在这里给出一组输入。例如:

0.01

输出样例1:
在这里给出相应的输出。例如:

2.716667

输入样例2:
在这里给出一组输入。例如:

0.000000001

输出样例2:
在这里给出相应的输出。例如:

2.718282

解答

error = float(input())
sum = 1
count = 1
n = 1
while True:n = n*countcount += 1sum += 1/nif 1/n < error:print("{:.6f}".format(sum))break

4-14 统计字符 (15 分)

题目

本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。
本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

输入格式:

输入为10个字符。最后一个回车表示输入结束,不算在内。

输出格式:
在一行内按照

letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数

的格式输出。

输入样例:

aZ &
09 Az

输出样例:

letter = 4, blank = 3, digit = 2, other = 1

解答

letter_nums = 0
blank_nums = 0
digit_nums = 0
other_nums = 0
count = 0
str = ""
while True:s = input()count += 1str += sif len(str)+count > 10:count -= 1break
blank_nums += count
for i in str:if i.isalpha():letter_nums += 1elif i.isspace():blank_nums += 1elif i.isdigit():digit_nums += 1else:other_nums += 1
print("letter = {}, blank = {}, digit = {}, other = {}".format(letter_nums, blank_nums, digit_nums, other_nums))

4-15 换硬币 (20 分)

题目

将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?

输入格式:

输入在一行中给出待换的零钱数额x∈(8,100)。

输出格式:

要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量, fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。

输入样例:

13

输出样例:

fen5:2, fen2:1, fen1:1, total:4
fen5:1, fen2:3, fen1:2, total:6
fen5:1, fen2:2, fen1:4, total:7
fen5:1, fen2:1, fen1:6, total:8
count = 4

解答

num = int(input())
count = 0
for i in range(num//5, 0, -1):for j in range(num//2, 0, -1):for k in range(num, 0, -1):if 5*i+2*j+k == num:print("fen5:{}, fen2:{}, fen1:{}, total:{}".format(i, j, k, i+j+k))count += 1
print("count = {}".format(count))

4-16 jmu-python-判断是否构成三角形 (10 分)

题目

输入三角形的三边,判断是否能构成三角形。若能构成输出yes,否则输出no。

输入格式:

在一行中直接输入3个整数,3个整数之间各用一个空格间隔,没有其他任何附加字符。

输出格式:

直接输出yes或no,没有其他任何附加字符。

输入样例1:

3 4 5

输出样例1:

yes

输入样例2:

1 2 3

输出样例2:

no

解答

a, b, c = map(int, input().split())
if a+b > c and a+c > b and b+c > a:print("yes")
else:print("no")

4-17 水仙花数(20 分) (20 分)

题目

水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。 例如:153=1×1×1+5×5×5+3×3×3。

本题要求编写程序,计算所有N位水仙花数。
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。 例如:153=1×1×1+5×5×5+3×3×3。
本题要求编写程序,计算所有N位水仙花数。

输入格式:

输入在一行中给出一个正整数N(3≤N≤5)

输出格式:

按递增顺序输出所有N位水仙花数,每个数字占一行。

输入样例:
在这里给出一组输入。例如:

3

输出样例:
在这里给出相应的输出。例如:

153
370
371
407

解答

提交代码 - 1

def judge(num, n):sum = 0i = numwhile i > 0:sum += pow(i % 10, n)i //= 10if sum == num:return Trueelse:return Falsen = int(input())
for i in range(pow(10, n-1), pow(10, n)):if judge(i, n):print(i)

提交代码 - 2

n = int(input())
for num in range(10**(n-1), 10**n):lists = map(int, str(num))sum = 0for i in lists:sum += i**nif sum == num:print(num)

4-18 猴子选大王 (20 分)

题目

一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

输入格式:

输入在一行中给一个正整数N(≤1000)。

输出格式:

在一行中输出当选猴王的编号。

输入样例:

11

输出样例:

7

解答

n = int(input())
ans = 0
for i in range(2, n+1):ans = (ans+3) % i
print(ans+1)

4-19 矩阵运算 (20 分)

题目

给定一个_n_×_n_的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。

输入格式:

输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。

输入样例:

4
2 3 4 1
5 6 1 1
7 1 8 1
1 1 1 1

输出样例:

35

解答

n = int(input())
index = n-1
ans = 0
while n > 1:lst = list(map(int, input().split()))for i, num in enumerate(lst):if i != len(lst)-1 and i != index:ans += numindex -= 1n -= 1
print(ans)

4-20 求矩阵各行元素之和 (15 分)

题目

本题要求编写程序,求一个给定的_m_×_n_矩阵各行元素之和。

输入格式:

输入第一行给出两个正整数m和n(1≤m,n≤6)。随后m行,每行给出n个整数,其间以空格分隔。

输出格式:

每行输出对应矩阵行元素之和。

​输入样例:

3 2
6 3
1 -8
3 12

输出样例:

9
-7
15

解答

m, n = map(int, input().split())
while m:lst = list(map(int, input().split()))sum = 0for i in lst:sum += im -= 1print(sum)

4-21 判断上三角矩阵 (15 分)

题目

上三角矩阵指主对角线以下的元素都为0的矩阵;主对角线为从矩阵的左上角至右下角的连线。
本题要求编写程序,判断一个给定的方阵是否上三角矩阵。

输入格式:

输入第一行给出一个正整数T,为待测矩阵的个数。接下来给出T个矩阵的信息:每个矩阵信息的第一行给出一个不超过10的正整数n。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

每个矩阵的判断结果占一行。如果输入的矩阵是上三角矩阵,输出“YES”,否则输出“NO”。

输入样例:

3
3
1 2 3
0 4 5
0 0 6
2
1 0
-8 2
3
1 2 3
1 4 5
0 -1 6

输出样例:

YES
NO
NO

解答

def judge(a):for i in range(len(a)):for j in range(len(a)):if i > j and a[i][j] != 0:return Falsereturn Truet = int(input())
while t:n = int(input())a = []while n:s = input()a.append([int(i) for i in s.split()])n -= 1if judge(a):print("YES")else:print("NO")t -= 1

4-22 找鞍点 (20 分)

题目

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:

输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

​输入样例1:

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

​输出样例1:

2 1

​输入样例2:

2 1 7 4 1

​输出样例2:

NONE

解答

n = int(input())
a = []
for i in range(n):a.append(list(map(int, input().split())))
for i in range(n):max_num_row = max(a[i][k] for k in range(n))for j in range(n):max_num_col = min(a[k][j] for k in range(n))if max_num_row == max_num_col:print("{} {}".format(i, j))exit()
print("NONE")

4-23 求矩阵的局部极大值 (15 分)

题目

给定_M_行_N_列的整数矩阵_A_,如果_A_的非边界元素_A_[i][j]大于相邻的上下左右4个元素,那么就称元素_A_[i][j]是矩阵的局部极大值。本题要求给定矩阵的全部局部极大值及其所在的位置。

输入格式:

输入在第一行中给出矩阵A的行数M和列数N(3≤M,N≤20);最后M行,每行给出A在该行的N个元素的值。数字间以空格分隔。

输出格式:

每行按照“元素值 行号 列号”的格式输出一个局部极大值,其中行、列编号从1开始。要求按照行号递增输出;若同行有超过1个局部极大值,则该行按列号递增输出。若没有局部极大值,则输出“None 总行数 总列数”。

输入样例1:

4 5
1 1 1 1 1
1 3 9 3 1
1 5 3 5 1
1 1 1 1 1

输出样例1:

9 2 3
5 3 2
5 3 4

输入样例2:

3 5
1 1 1 1 1
9 3 9 9
1 1 5 3 5 1

输出样例2:

None 3 5

解答

m, n = map(int, input().split())
a = []
count = 0
for i in range(m):a.append(list(map(int, input().split())))
for i in range(1, m-1):for j in range(1, n-1):if a[i][j] > a[i-1][j] and a[i][j] > a[i][j+1] and a[i][j] > a[i+1][j] and a[i][j] > a[i][j-1]:print("{} {} {}".format(a[i][j], i+1, j+1))count += 1
if count == 0:print("None {} {}".format(m, n))

4-24 打印九九口诀表 (15 分)

题目

下面是一个完整的下三角九九口诀表:

11=1
1
2=2 22=4
1
3=3 23=6 33=9
14=4 24=8 34=12 44=16
15=5 25=10 35=15 45=20 55=25
1
6=6 26=12 36=18 46=24 56=30 66=36
1
7=7 27=14 37=21 47=28 57=35 67=42 77=49
18=8 28=16 38=24 48=32 58=40 68=48 78=56 88=64
19=9 29=18 39=27 49=36 59=45 69=54 79=63 89=72 9*9=81

本题要求对任意给定的一位正整数N,输出从11到NN的部分口诀表。

输入格式:

输入在一行中给出一个正整数N(1≤N≤9)。

输出格式:

输出下三角N*N部分口诀表,其中等号右边数字占4位、左对齐。

输入样例:

4

输出样例:

11=1
1
2=2 22=4
1
3=3 23=6 33=9
14=4 24=8 34=12 44=16

解答

n = int(input())
for i in range(1, n+1):for j in range(1, n+1):if i >= j:print("{}*{}={:<4d}".format(j, i, i*j), end="")print()

4-25 输出三角形字符阵列 (15 分)

题目

本题要求编写程序,输出n行由大写字母A开始构成的三角形字符阵列。

输入格式:

输入在一行中给出一个正整数n(1≤n<7)。

输出格式:

输出n行由大写字母A开始构成的三角形字符阵列。格式见输出样例,其中每个字母后面都有一个空格。

输入样例:

4

输出样例:

A B C D
E F G
H I
J

解答

n = int(input())
count = 0
while n:for i in range(1, n+1):print("{} ".format(chr(ord('A')+count)), end="")count += 1print()n -= 1

4-26 求1!+3!+5!+……+n! (10 分)

题目

求1!+3!+5!+……+n!的和,要求用循环嵌套设计,n<12。

输入格式:

输入在一行中给出一个不超过12的正整数n。

输出格式:

在一行中按照格式“n=n值,s=阶乘和”的顺序输出,其中阶乘和是正整数。

输入样例:

5

输出样例:

n=5,s=127

解答

n = int(input())
t = 1
sum = 1
for i in range(1, n+1, 2):if i != 1:for j in range(i-1, i+1):t *= jsum += t
print("n={},s={}".format(n, sum))

4-27 二维数组中每行最大值和每行和 (10 分)

题目

求一个3*3二维数组中每行的最大值和每行的和。

输入格式:

在一行中输入9个小于100的整数,其间各以一个空格间隔

输出格式:

输出3行3列的二维数组,并在每行后面分别输出每行最大值和每行元素的和,每个数据输出占4列。

输入样例:

3 6 5 9 8 2 1 4 5

输出样例:

3 6 5 6 14
9 8 2 9 19
1 4 5 5 10

解答

lst = list(map(int, input().split()))
for i in range(3):max_num = lst[i*3]sum = 0for j in range(3):max_num = max(max_num, lst[i*3+j])sum += lst[i*3+j]print("{:4d}".format(lst[i*3+j]), end="")print("{:4d}{:4d}".format(max_num, sum))

4-28 矩阵转置 (10 分)

题目

将一个3×3矩阵转置(即行和列互换)。

输入格式:

在一行中输入9个小于100的整数,其间各以一个空格间隔。

​输出格式:

输出3行3列的二维数组,每个数据输出占4列。

输入样例:

1 2 3 4 5 6 7 8 9

输出样例:

1 4 7
2 5 8
3 6 9

解答

lst = list(map(int, input().split()))
for i in range(3):for j in range(3):print("{:4d}".format(lst[i+j*3]), end="")print()

4-29 找出不是两个数组共有的元素 (20 分)

题目

给定两个整型数组,本题要求找出不是两者共有的元素。

输入格式:

输入分别在两行中给出两个整型数组,每行先给出正整数N(≤20),随后是N个整数,其间以空格分隔。

输出格式:

在一行中按照数字给出的顺序输出不是两数组共有的元素,数字间以空格分隔,但行末不得有多余的空格。题目保证至少存在一个这样的数字。同一数字不重复输出。

输入样例:

10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1

输出样例:

3 5 -15 6 4 1

解答

注意:返回答案的顺序也是有要求的
暴力解法

lst1 = list(map(int, input().split()))
lst2 = list(map(int, input().split()))
lst1 = lst1[1:]
lst2 = lst2[1:]
ans = []
for i in lst1:if i not in lst2 and i not in ans:ans.append(i)
for i in lst2:if i not in lst1 and i not in ans:ans.append(i)
for i, num in enumerate(ans):if i != len(ans)-1:print("{} ".format(num), end="")else:print("{}".format(num))

4-30 找完数 (20 分)

题目

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

输入格式:

输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。

输出格式:

逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + … + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

输入样例:

2 30

​输出样例:

6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14

解答

暴力

import math
m, n = map(int, input().split())
count = 0
for i in range(m, n+1):ans = []for j in range(1, i):if i % j == 0:ans.append(j)if sum(ans) == i:count += 1print("{} = ".format(i), end="")print(' + '.join('%s' % id for id in ans))
if count == 0:print("None")


优化后

import math
m, n = map(int, input().split())
count = 0
for i in range(m, n+1):ans = []ans.append(1)for j in range(2, int(math.sqrt(i)+1)):if i % j == 0:ans.append(j)if j*j != i:ans.append(i//j)if sum(ans) == i:count += 1ans.sort()print("{} = ".format(i), end="")print(' + '.join('%s' % id for id in ans))
if count == 0:print("None")

第五章

5-1 输出星期名缩写 (70 分)

题目

输入一个1到7的数字,输出对应的星期名的缩写。

1 Mon
2 Tue
3 Wed
4 Thu
5 Fri
6 Sat
7 Sun

输入格式:

输入1到7之间数字

输出格式:

输出对应的星期名的缩写

输入样例:
在这里给出一组输入。例如:

1

输出样例:
在这里给出相应的输出。例如:

Mon

解答

days = {1:'Mon',2:'Tue',3:'Wed',4:'Thu',5:'Fri',6:'Sat',7:'Sun'}
index = int(input())
print(days[index])

5-2 图的字典表示 (20 分)

题目


图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度。比如上图0点表示:{‘O’:{‘A’:2,‘B’:5,‘C’:4}}。

用eval函数处理输入,eval函数具体用法见第六章内置函数。

输入格式:

第一行表示输入的行数 下面每行输入表示一个顶点和该顶点相连的边及长度的字符串

输出格式:

在一行中输出顶点数,边数,边的总长度

输入样例:
在这里给出一组输入。例如:

4
{‘a’:{‘b’:10,‘c’:6}}
{‘b’:{‘c’:2,‘d’:7}}
{‘c’:{‘d’:10}} {‘d’:{}}

输出样例:
在这里给出相应的输出。例如:

4 5 35

解答

n=int(input())
sum=0
length=0
for i in range(n):dic=eval(input())for j in dic:temp=dic[j]for k in temp:sum+=1length+=temp[k]
print("{} {} {}".format(n,sum,length))

5-3 四则运算(用字典实现) (30 分)

题目

四则运算(用字典实现),比较c语言的switch语句。

输入格式:

在一行中输入一个数字 在一行中输入一个四则运算符(+,-,*,/) 在一行中输入一个数字

输出格式:

在一行中输出运算结果(小数保留2位)

输入样例1:
在这里给出一组输入。例如:

7 / 3

输出样例1:
在这里给出相应的输出。例如:

2.33

输入样例2:
在这里给出一组输入。例如:

10 / 0

输出样例2:
在这里给出相应的输出。例如:

divided by zero

解答

参考:https://blog.csdn.net/chen_zan_yu_/article/details/103406089

res = {'+': 'x+y', '-': 'x-y', '*': 'x*y','/': "x/y if y!=0  else 'divided by zero'"}
# 除法部分分三元式表示
x = int(input())
operation = input()
y = int(input())
# print(res[operation]) 除零返回字符串,其余返回数字类型
r = eval(res[operation])
if type(r) != str:print(format(r, '.2f'))
else:print(r)

5-4 分析活动投票情况 (20 分)

题目

利用集合分析活动投票情况。第一小队有五名队员,序号是1,2,3,4,5;第二小队也有五名队员,序号6,7,8,9,10。输入一个得票字符串,求第二小队没有得票的队员

输入格式:

在一行中输入得票的队员的序列号,用逗号隔开。

输出格式:

一行中输出第二小队没有得票的队员序号。

输入样例:
在这里给出一组输入。例如:

1,5,9,3,9,1,1,7,5,7,7,3,3,1,5,7,4,4,5,4,9,5,10,9

输出样例:
在这里给出相应的输出。例如:

6 8

解答

提交代码 - 1

tickets=list(set(map(int,input().split(','))))
a=[]
for i in range(6,11):if i not in tickets:a.append(i)
print(' '.join('%s' %id for id in a))


提交代码 - 2

tickets=list(set(map(str,input().split(','))))
a=[]
for i in range(6,11):if str(i) not in tickets:a.append(str(i))
ans=' '.join(a)
print(ans)

5-5 统计字符出现次数 (20 分)

题目

本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。

输入格式:

输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。

输出格式:

在一行中输出给定字符在给定字符串中出现的次数。

输入样例:

programming is More fun! m

输出样例:

2

解答

str1=input()
a=input()
count=0
for i in str1:if i==a:count+=1
print(count)

5-6 统计工龄 (20 分)

题目

给定公司N名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。

输入格式:

输入首先给出正整数N(≤105),即员工总人数;随后给出N个整数,即每个员工的工龄,范围在[0, 50]。

输出格式:

按工龄的递增顺序输出每个工龄的员工个数,格式为:“工龄:人数”。每项占一行。如果人数为0则不输出该项。

输入样例:

8 10 2 0 5 7 2 5 2

输出样例:

0:1 2:3 5:2 7:1 10:1

解答

n=int(input())
ages=list(map(int,input().split()))
dic={}
for i in ages:dic[i]=dic.get(i,0)+1
for i in sorted(dic):print("{}:{}".format(i,dic[i]))

5-7 列表去重 (40 分)

题目

输入一个列表,去掉列表中重复的数字,按原来次序输出!

输入格式:

在一行中输入列表

​输出格式:

在一行中输出不重复列表元素

输入样例:
在这里给出一组输入。例如:

[4,7,5,6,8,6,9,5]

​输出样例:
在这里给出相应的输出。例如:

4 7 5 6 8 9

解答

lst1=eval(input())
lst2=list(set(lst1))
print(' '.join(map(str,sorted(lst2,key=lst1.index))))

5-8 能被3,5和7整除的数的个数(用集合实现) (30 分)

题目

求指定区间内能被3,5和7整除的数的个数

输入格式:

在一行中从键盘输入2个正整数a,b(1<=a<b<=10000000),用空格隔开。

​输出格式:

在一行输出大于等于a且小于等于b的能被3,5和7整除的数的个数。

输入样例1:
在这里给出一组输入。例如:

10 100

​输出样例1:
在这里给出相应的输出。例如:

0

​输入样例2:
在这里给出一组输入。例如:

1000 100000

​输出样例:
在这里给出相应的输出。例如:

943

解答

m,n=map(int,input().split())
set_1=set()
set_2=set()
set_3=set()
for i in range(m,n+1):if i%3==0:set_1.add(i)if i%5==0:set_2.add(i)if i%7==0:set_3.add(i)
print(len(set_1 & set_2 & set_3))

5-9 求矩阵鞍点的个数 (30 分)

题目

一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:

输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

​输出格式:

鞍点的个数

​输入样例1:

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

​输出样例1:

1

输入样例2:

2 1 7 4 1

输出样例2:

0

​输入样例3:

3
4 7 8
1 3 3
2 3 1

输出样例3:

2

解答

n=int(input())
a=[]
count=0
for i in range(n):a.append(list(map(int,input().split())))
for i in range(n):max_num_row=max(a[i][k] for k in range(n))for j in range(n):max_num_col=min(a[k][j] for k in range(n))if max_num_row == max_num_col:count+=1
print(count)

n = int(input())
# 原矩阵
lis = [list(map(int, input().split()))for i in range(n)]
# 转置矩阵
lis_1 = [[lis[j][i] for j in range(n)]for i in range(n)]
print(lis_1)
# 依次遍历lis max(lis[i]):原矩阵行最大值 min(lis_1[j]):原矩阵列最大值
print(len([0 for i in range(n)for j in range(n) if lis[i][j] == max(lis[i]) == min(lis_1[j])]))

5-10 两数之和 (30 分)

题目

给定一组整数,还有一个目标数,在给定这组整数中找到两个数字,使其和为目标数,如找到,解是唯一的。找不到则显示 “no answer”。输出的下标按从小到大排序。用一重循环加字典实现。

输入格式:

在一行中给出这组数。 在下一行输入目标数

输出格式:

在一行中输出这两个数的下标,用一个空格分开。

输入样例1:
在这里给出一组输入。例如:

2,7,11,15 9

输出样例1:
在这里给出相应的输出。例如:

0 1

输入样例2:
在这里给出一组输入。例如:

3,6,9 10

输出样例2:
在这里给出相应的输出。例如:

no answer

解答

lst=list(map(int,input().split(',')))
target=int(input())
m=dict()
for i,num in enumerate(lst):if target-num in m:print("{} {}".format(m[target-num],i))exit()m[num]=i
print("no answer")

5-11 字典合并 (40 分)

题目

输入用字符串表示两个字典,输出合并后的字典。字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!

输入格式:

在第一行中输入第一个字典字符串;
在第二行中输入第二个字典字符串。

输出格式:

在一行中输出合并的字典,输出按字典序。
“1” 的 ASCII 码为 49,大于 1,排序时 1 在前,“1” 在后。其它的字符同理。

输入样例1:
在这里给出一组输入。例如:

{1:3,2:5}
{1:5,3:7}

输出样例1:
在这里给出相应的输出。例如:

{1:8,2:5,3:7}

输入样例2:
在这里给出一组输入。例如:

{“1”:3,1:4} {“a”:5,“1”:6}

输出样例2:
在这里给出相应的输出。例如:

{1:4,“1”:9,“a”:5}

解答

注意:**字典的键用一个字母或数字表示! **

这道题简单的合并两个字典比较简单,难点在输出时需要对字典的键值进行一个排序

题目中给出键只能是一个字母或者一个数字(??这里其实有歧义 一个数字是指一位的数字还是任意数字)

这里假设的是为一个一位的数字,认为int型数字比字符排在前面

dict1=dict(eval(input()))
dict2=dict(eval(input()))
for i in dict2:if i in dict1:dict1[i]+=dict2[i]else:dict1[i]=dict2[i]
intKeys=[]
strKeys=[]
for i in dict1.keys():if type(i)==int:intKeys.append(i)else:strKeys.append(i)
intKeys.sort()
strKeys.sort()
ans=[]
for i in intKeys+strKeys:temp=""if type(i)==int:temp=str(i)+":"+str(dict1[i])else:temp='"'+i+'"'+":"+str(dict1[i])ans.append(temp)
s1=','.join(ans)
s1='{'+s1+'}'
print(s1)

第六章

6-1 输入列表,求列表元素和(eval输入应用) (10 分)

题目

在一行中输入列表,输出列表元素的和。

输入格式:

一行中输入列表。

输出格式:

在一行中输出列表元素的和。

输入样例:

[3,8,-5]

输出样例:

6

解答

提交代码 - 1

lst=eval(input())
print(eval('+'.join('%s' %id for id in lst)))


提交代码 - 2

print(sum(eval(input())))

6-2 一帮一 (15 分)

题目

“一帮一学习小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。
本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式:

输入第一行给出正偶数N(≤50),即全班学生的人数。此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),其间以1个空格分隔。这里保证本班男女比例是1:1,并且没有并列名次。

输出格式:

每行输出一组两个学生的姓名,其间以1个空格分隔。名次高的学生在前,名次低的学生在后。小组的输出顺序按照前面学生的名次从高到低排列。

输入样例:

8
0 Amy
1 Tom
1 Bill
0 Cindy
0 Maya
1 John
1 Jack
0 Linda

输出样例:

Amy Jack
Tom Linda
Bill Maya
Cindy John

解答

#!/usr/bin/python3
# 存储所有学生的名字 根据名次排序
students = []
# 存储女孩的名字 根据名次排序
girl = []
# 存储男孩的名字 根据名次排序
boy = []
n = int(input())
for i in range(n):student = input().split()students.append(student[1])if student[0] == '0':boy.append(student[1])else:girl.append(student[1])
# 遍历前4名
for i in range(n//2):# 如果是男孩if students[i] in boy:# 找到该孩子在男孩中的名次 与index对应 比如在第1名index为0# 男孩中的第一个应该与女孩中的最后一个组合# 所以 男孩的索引为index 那么女孩的索引就是-1-index# -1表示最后一个 再-index表示往前几个# 例如:-1-1 表示再最后一个的基础上再前进2个元素index = boy.index(students[i])print("{} {}".format(students[i], girl[-1-index]))else:index = girl.index(students[i])print("{} {}".format(students[i], boy[-1-index]))

6-3 列表或元组的数字元素求和 (20 分)

题目

求列表中数字和,列表中嵌套层次不限2层

输入格式:

在一行中输入列表或元组

输出格式:

在一行中输出数字的和

输入样例:
在这里给出一组输入。例如:

[11,2,[3,7],(68,-1),“123”,9]

输出样例:
在这里给出相应的输出。例如:

99

解答

注意题目中只需要求的是数字和

例子:[11,2,[3,7],(68,-1),“123”,9] 中“123”属于字符串,不再计算范围内

正确计算是:11+2+3+7+68+(-1)+9=99

编写代码时注意不要将字符串也纳入计算范围内了,注意提取正确的数字,避开字符串(开始还没有注意到)

#!/usr/bin/python3
s = input()
# s为字符串
# 首先将[]()替换
s = s.replace('[', '')
s = s.replace(']', '')
s = s.replace('(', '')
s = s.replace(')', '')
# 注意”123“属于字符串 不属于数字 我们是不需要的
s2 = ""
# 记录”的个数
count = 0
# 遍历s
# 统计“的个数 如果为偶数且不为” 说明为数字
for i in s:if i == '"':count += 1if count % 2 == 0 and i != '"':s2 += i
# 替换逗号
s2 = s2.replace(',', ' ')
# 注意可能两个数中间原来有两个逗号 替换后就有两个空格
# 再利用split() 提取元素 转化为list类型
s2 = s2.split()
ans = 0
# 遍历s2 list类型
for i in s2:ans += int(i)
print(ans)

6-4 列表数字元素加权和(1) (40 分)

题目

输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。第一层每个元素 的值为:元素值1,第二层每个元素的值为:元素值2,第三层每个元素的值为:元素值*3, …,以此类推!

输入格式:

在一行中输入列表

​输出格式:

在一行中输出加权和

输入样例:
在这里给出一组输入。例如:

[1,2,[3,4,[5,6],7],8]

输出样例:
在这里给出相应的输出。例如:

72

解答

有几个需要注意的地方:

  • 其中的数字可以为两位数、三位数
  • 数字也可以为负数

提供的一些测试数据

  • [1]
  • [-1]
  • [1,[19,1],2]

踩坑:如果开始以字符串读取,再逐一读取字符,需要注意每次读取只得到一个字符。比如字符串“234”,读取是2、3、4 这个地方易错

# 以字符串类型读入数据
s = input()
# count:统计[、]字符的个数 遇到[ +1 遇到] -1
count = 0
# ans:最后结果
ans = 0
# 字符串索引
index = 0
# 判断一个数是负数还是正数
flag = 1# 遍历字符串
while index < len(s):# 遇到[ 层级+1if s[index] == '[':count += 1# 遇到] 层级-1elif s[index] == ']':count -= 1# 遇到 '-' 说明之后的数字为负数elif s[index] == '-':flag = -1# 如果是一个数字 则需要判断后面是否接着为数字# 如果是 还得拼接数字 比如23# 因为是逐个字符读取# 每次只读一个字符# 读到2时 还需要判断后面是否还是数字# 如果是 需要拼接为23elif s[index].isdigit():index2 = indexnum = 0while s[index2].isdigit():num = num*10+int(s[index2])index2 += 1# 更新indexindex = index2-1# 更新ans 注意正负号ans = ans+count*num*flag# 最后需要将flag再次设置为1flag = 1index += 1
print(ans)

6-5 列表元素个数的加权和(1) (40 分)

题目

输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权个数和。第一层每个元素算一个元素,第二层每个元素算2个元素,第三层每个元素算3个元素,第四层每个元素算4个元素,…,以此类推!

输入格式:

在一行中输入一个列表。

输出格式:

在一行中输出加权元素个数值。

输入样例:
在这里给出一组输入。例如:

[1,2,[3,4,[5,6],7],8]

输出样例:
在这里给出相应的输出。例如:

15

解答

在上一题思路上简化即可

s = input()
count = 0
ans = 0
index = 0
while index < len(s):if s[index] == '[':count += 1elif s[index] == ']':count -= 1
#    elif s[index]=='-':
#       flag=-1elif s[index].isdigit():index2 = indexwhile s[index2].isdigit():index2 += 1index = index2-1ans = ans+countindex += 1
print(ans)

第6章-6 求指定层的元素个数 (40 分)

题目

输入一个嵌套列表,再输入层数,求该层的数字元素个数。

输入格式:

第一行输入列表 第二行输入层数

输出格式:

在一行中输出元素个数

输入样例:
在这里给出一组输入。例如:

[1,2,[3,4,[5,6],7],8] 3

输出样例:
在这里给出相应的输出。例如:

2

解答

s = input()
n=int(input())
count = 0
ans = {}
index = 0
while index < len(s):if s[index] == '[':count += 1elif s[index] == ']':count -= 1elif s[index].isdigit():index2 = indexwhile s[index2].isdigit():index2 += 1index = index2-1ans[count]=ans.get(count,0)+1index += 1
print(ans[n])

6-7 找出总分最高的学生 (15 分)

题目

给定N个学生的基本信息,包括学号(由5个数字组成的字符串)、姓名(长度小于10的不包含空白字符的非空字符串)和3门课程的成绩([0,100]区间内的整数),要求输出总分最高学生的姓名、学号和总分。

输入格式:

输入在一行中给出正整数N(≤10)。随后N行,每行给出一位学生的信息,格式为“学号 姓名 成绩1 成绩2 成绩3”,中间以空格分隔。

输出格式:

在一行中输出总分最高学生的姓名、学号和总分,间隔一个空格。题目保证这样的学生是唯一的。

输入样例:

5
00001 huanglan 78 83 75
00002 wanghai 76 80 77
00003 shenqiang 87 83 76
10001 zhangfeng 92 88 78
21987 zhangmeng 80 82 75

输出样例:

zhangfeng 10001 258

解答

n = int(input())
maxSumGrades = 0
maxSumGradesIndex = 0
students = []
for i in range(n):student = list(input().split())sumGrades = 0for j in range(2, 5):sumGrades += int(student[j])if sumGrades > maxSumGrades:maxSumGrades = sumGradesmaxSumGradesIndex = istudents.append(student)
print("{} {} {}".format(students[maxSumGradesIndex][1], students[maxSumGradesIndex][0], maxSumGrades))

6-8 输出全排列 (20 分)

题目

输入整数n(3<=n<=7),编写程序输出1,2,…,n整数的全排列,按字典序输出。

输入格式:

一行输入正整数n。

输出格式:

按字典序输出1到n的全排列。每种排列占一行,数字间无空格。

输入样例:
在这里给出一组输入。例如:

3

输出样例:
在这里给出相应的输出。例如:

123
132
213
231
312
321

解答

1-n的全排列(3<=n<=7)
最小数一定是:123…45…n
最大数是:n…54…321
思路(暴力循环):

  • 从123…n 到 n…321 依次遍历
  • 对其进行set操作
  • 当set(num)==set(“123…n”)时
  • 说明是符合条件的全排列
n = int(input())
ls = [str(i) for i in range(1, n+1)]
s = "1234567"
# beg=123...n
beg = int(s[:n])
# end=n...321
end = int(s[n-1::-1])
for x in range(beg, end+1):if set(str(x)) == set(ls):print(x)

第七章

第7章-1 词频统计 (30 分)

题目

请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。

所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。

输入格式:

输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。

输出格式:

在第一行中输出文本中所有不同单词的个数。注意“单词”不区分英文大小写,例如“PAT”和“pat”被认为是同一个单词。
随后按照词频递减的顺序,按照词频:单词的格式输出词频最大的前10%的单词。若有并列,则按递增字典序输出。

输入样例:

This is a test. The word “this” is the word with the highest frequency. Longlonglonglongword should be cut off, so is considered as the same as longlonglonglonee. But this_8 is different than this, and this, and this…# this line should be ignored.结尾无空行

输出样例:(注意:虽然单词the也出现了4次,但因为我们只要输出前10%(即23个单词中的前2个)单词,而按照字母序,the排第3位,所以不输出。)

23
5:this
4:is

解答

之前忘了做这道题 这次没有做出来 对一些库的函数掌握的还是不好 记不住
代码参考 :https://blog.csdn.net/qq_43733499/article/details/102723092

# 导入库
import re
import collections
import syswords = "".join([line for line in sys.stdin]) # 标准输入sys.stdin读入文本
words = re.compile(r"\w+", re.I).findall(words.lower().split('#')[0]) # 正则表达式将文本处理成全小写并读到符号#
words = [each.strip() for each in words] # 去除空格
words = list(map(lambda each: each[0:15] if len(each) > 15 else each, words)) # 长度超过15的单词将只截取保留前15个单词字符
counter = collections.Counter(words) # 使用Counter统计词频
rank = sorted(counter.items(), key=lambda each: (-each[1], each[0]), reverse=False) # 按照词频递减排序
print(len(rank)) # 输出不同单词的个数
for each in rank[0:int(0.1*len(rank))]: # 输出词频最大的前10%的单词print("{}:{}".format(each[1], each[0]))

函数练习题

第6章函数-1 使用函数求特殊a串数列和 (10 分)

题目

给定两个均不超过9的正整数a和n,要求编写函数fn(a,n) 求a+aa+aaa++⋯+aa⋯aa(n个a)之和,fn须返回的是数列和

函数接口定义:

fn(a,n)
其中 a 和 n 都是用户传入的参数。 a 的值在[1, 9]范围;n 是[1, 9]区间内的个位数。函数须返回级数和

裁判测试程序样例:

/* 请在这里填写答案 */
a,b=input().split()
s=fn(int(a),int(b))
print(s)

输入样例:
在这里给出一组输入。例如:

2 3

输出样例:
在这里给出相应的输出。例如:

246

解答

def fn(a,n):ans=0num=0while n:num=num*10+aans+=numn-=1return ans

第6章函数-2 使用函数求素数和 (20 分)

题目

使用函数求素数和

prime§, 其中函数prime当用户传入参数p为素数时返回True,否则返回False. PrimeSum(m,n),函数PrimeSum返回区间[m, n]内所有素数的和。题目保证用户传入的参数1<=m<n。

函数接口定义:

在这里描述函数接口:
prime§,返回True表示p是素数,返回False表示p不是素数
PrimeSum(m,n),函数返回素数和

裁判测试程序样例:

/* 请在这里填写答案 */
m,n=input().split()
m=int(m)
n=int(n)
print(PrimeSum(m,n))

输入样例:
在这里给出一组输入。例如:

1 10

输出样例:
在这里给出相应的输出。例如:

17

解答

import mathdef prime(p):p = int(p)if p == 1:return Falsefor i in range(2, int(math.sqrt(p))+1):if p % i == 0:return Falsereturn Truedef PrimeSum(m, n):ans = 0for i in range(m, n+1):if prime(i):ans += ireturn ans

第6章函数-3 使用函数统计指定数字的个数 (20 分)

题目

本题要求实现一个统计整数中指定数字的个数的简单函数。
CountDigit(number,digit )

其中number是整数,digit为[1, 9]区间内的整数。函数CountDigit应返回number中digit出现的次数。

函数接口定义:

在这里描述函数接口。例如: CountDigit(number,digit ),返回digit出现的次数

裁判测试程序样例:

/* 请在这里填写答案 */
number,digit=input().split()
number=int(number)
digit=int(digit)
count=CountDigit(number,digit )
print(“Number of digit 2 in “+str(number)+”:”,count)

输入样例:
在这里给出一组输入。例如:

-21252 2

输出样例:
在这里给出相应的输出。例如:

Number of digit 2 in -21252: 3

解答

def CountDigit(number, digit):count = 0number = abs(number)while number != 0:if number % 10 == digit:count += 1number = number//10return count

第6章函数-4 使用函数输出指定范围内Fibonacci数的个数 (20 分)

题目

本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m<n≤100000)之间的所有Fibonacci数的数目。

所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列,fib(0)=fib(1)=1。其中函数fib(n)须返回第n项Fibonacci数;函数PrintFN(m,n)用列表返回[m, n]中的所有Fibonacci数。

函数接口定义:

在这里描述函数接口。
例如:
fib(n),返回fib(n)的值
PrintFN(m,n),用列表返回[m, n]中的所有Fibonacci数。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。
例如:
/* 请在这里填写答案 */
m,n,i=input().split()
n=int(n)
m=int(m)
i=int(i)
b=fib(i)
print(“fib({0}) = {1}”.format(i,b))
fiblist=PrintFN(m,n) print(len(fiblist))

输入样例:
在这里给出一组输入。例如:

20 100 6

输出样例:
在这里给出相应的输出。例如:

fib(6) = 13 4

解答

def fib(n):a = 0b = 1while n:a, b = b, a+bn -= 1return bdef PrintFN(m, n):count = []index = 1while fib(index) <= n:if fib(index) >= m:count.append(fib(index))index += 1return count

第6章函数-5 使用函数求余弦函数的近似值 (20 分)

题目

本题要求实现一个函数,用下列公式求cos(x)近似值,精确到最后一项的绝对值小于eps(绝对值小于eps的项不要加):
cos(x)=0!x0−2!x2+4!x4−6!x6+…


函数接口定义:funcos(eps,x ),其中用户传入的参数为eps和x;函数funcos应返回用给定公式计算出来,保留小数4位。

函数接口定义:

函数接口: funcos(eps,x ),返回cos(x)的值。

裁判测试程序样例:

在这里给出函数被调用进行测试的例子。
例如:
/* 请在这里填写答案 */
eps=float(input())
x=float(input())
value=funcos(eps,x )
print(“cos({0}) = {1:.4f}”.format(x,value))

输入样例:
在这里给出一组输入。例如:

0.0001 -3.1

输出样例:
在这里给出相应的输出。例如:

cos(-3.1) = -0.9991

解答

def funcos(eps, x):n = 1a = 1b = 1flag = -1ans = 1while a/b >= eps:n += 1count = (n-1)*2a = math.pow(x, count)b = math.factorial(count)if a/b >= eps:ans = ans+flag*(a/b)flag *= -1return ans

第6章函数-6 缩写词 (20 分)

题目

缩写词是由一个短语中每个单词的第一个字母组成,均为大写。例如,CPU是短语“central processing unit”的缩写。

函数接口定义:

acronym(phrase); phrase是短语参数,返回短语的缩写词

裁判测试程序样例:

/* 请在这里填写答案 */
phrase=input()
print(acronym(phrase))

输入样例:

central processing unit

输出样例:

CPU

解答

def acronym(phrase):lst=list(phrase.split())ans=""for i in lst:ans+=i[0].upper()return ans

结语

题目来自PTA平台

文章仅作为学习笔记,记录从0到1的一个过程

希望对您有所帮助,如有错误欢迎小伙伴指正~

我是 海轰ଘ(੭ˊᵕˋ)੭

如果您觉得写得可以的话,请点个赞吧

谢谢支持 ❤️

【总结一下|PTA】浙大版《Python 程序设计》题目集相关推荐

  1. PTA浙大版python程序设计题目集--第2章-2 计算分段函数[1] (10 分)

    本题目要求计算下列分段函数f(x)的值: 公式 输入格式: 输入在一行中给出实数x. 输出格式: 在一行中按"f(x) = result"的格式输出,其中x与result都保留一位 ...

  2. PTA浙大版python程序设计题目集--第3章-5 字符转换 (15 分)

    本题要求提取一个字符串中的所有数字字符('0'--'9'),将其转换为一个整数输出. 输入格式: 输入在一行中给出一个不超过80个字符且以回车结束的字符串. 输出格式: 在一行中输出转换后的整数.题目 ...

  3. PTA浙大版python程序设计题目集--第1章-3 输出“Python语言简单易学” (10 分)

    输入格式: 无 输出格式: 输出一句短语,Python语言简单易学. 如果包含汉字,用"print(s.encode("utf-8"))"输出. 如: s=&q ...

  4. PTA浙大版python程序设计题目集--第1章-1 从键盘输入两个数,求它们的和并输出 (30 分)

    本题目要求读入2个整数A和B,然后输出它们的和. 输入格式: 在一行中给出一个被加数 在另一行中给出一个加数 输出格式: 在一行中输出和值. 输入样例: 在这里给出一组输入.例如: 18 -48 输出 ...

  5. PTA浙大版python程序设计题目集--第2章-4 特殊a串数列求和 (20 分)

    给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和. 输入格式: 输入在一行中给出不超过9的正整数a和n. 输出格式: 在一行中按照"s = 对应 ...

  6. PTA浙大版python程序设计题目集--第2章-3 阶梯电价 (15 分)

    为了提倡居民节约用电,某省电力公司执行"阶梯电价",安装一户一表的居民用户电价分为两个"阶梯":月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦 ...

  7. PTA浙大版python程序设计题目集--第2章-1 计算 11+12+13+...+m (30 分)

    输入一个正整数m(20<=m<=100),计算 11+12+13+-+m 的值. 输入格式: 在一行输入一个正整数m. 输出格式: 在一行中按照格式"sum = S"输 ...

  8. PTA浙大版python程序设计题目集--第1章-2 从键盘输入三个数到a,b,c中,按公式值输出 (30 分)

    在同一行依次输入三个值a,b,c,用空格分开,输出 bb-4a*c的值 输入格式: 在一行中输入三个数. 输出格式: 在一行中输出公式值. 输入样例: 在这里给出一组输入.例如: 3 4 5 输出样例 ...

  9. python哥德巴赫猜想证明要求其中一个素数最小_第4-4章“哥德巴赫猜想”的验证(20分),浙大,版,Python,程序设计,题目,集第...

    题目 数学领域著名的"哥德巴赫猜想"的大致意思是:任何一个大于2的偶数总能表示为两个素数之和.比如:24=5+19,其中5和19都是素数.本实验的任务是设计一个程序,验证20亿以内 ...

  10. 100例C语言经典编程题 | 浙大版C语言题目集第三版,助力你C语言从入门到精通

    获取每道题详细解答请在公众号[C you again]"C语言题目集"栏目查看. 下载pdf版本请在公众号[C you again]回复"c-pdf"自行获取. ...

最新文章

  1. 优达学城python项目P1:搜索和探索近地天体(NEOs)
  2. 智源研究院发布“知识疫图-全球新冠疫情智能驾驶舱”,一键预测、跟踪和决策辅助...
  3. altium designer 绘制pcb时漏线检查
  4. rhel7 http实例3
  5. 多态部分作业 1.按要求编写Java程序:(1)编写一个接口:InterfaceA,只含有一个方法int method(int n);
  6. System类的常用方法
  7. leetcode -- 515. Find Largest Value in Each Tree Row
  8. 华为服务器sn号查询网站,linux 查询服务器sn
  9. 提交文件至服务器的设置——表单属性中的 enctype
  10. vue如何加载html字符串_vue如何给html字符串添加指令?
  11. 使用模板部署的Linux虚拟机网卡不可用的处理方法
  12. spring awre的理解
  13. 在线生成 html 页面,细说在线版H5页面生成器
  14. 根据数据文件sql生成报告rpt
  15. 四、回归分析之线性回归模型构建
  16. 向淘宝学运营:移动MM速长成
  17. python词云图(以斗破苍穹为例)
  18. 【Pyhton TurtleArt】画一幅极简渐变风景图
  19. 基于分数阶傅里叶变换的车载多用户雷达通信一体化系统
  20. 抖音小程序实践二:常用权限申请

热门文章

  1. 博客项目学习笔记十七:用户中心(我发布的帖子)
  2. LaTex论文作者过多需换行:你只需一步
  3. Rabbitmq RPC请求报出rabbitmq no correlation header in reply
  4. 正交试验设计法是什么意思?【软件测试培训】
  5. 【IT名人堂】专访高级架构师:京东双11背后的NoSQL数据库与分布式存储内幕
  6. 十一:python 零时区转成东八区两种方式
  7. JQuery: slideDown与slideUp
  8. RT-Thread线程管理以及内核裁剪
  9. linux初学基本命令,Linux初学者一定要知道的12个基本命令
  10. 在手机上面安装fiddler证书