【PTA|Python】浙大版《Python 程序设计》题目集:第三章
前言
Hello!小伙伴!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,有幸拿过国奖、省奖等,已保研。目前正在学习C++/Linux(真的真的太难了~)
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!
第三章习题
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=0
index=0#辅助索引
# 前17位
freWords=id[:17]
# 第18位上的字符
lastWord=id[-1]
for i in freWords:
if(i<'0' or i>'9'):
return False
else:
sum=sum+weight[index]*int(i)
index=index+1
sum=sum%11
if checkCode[sum] == lastWord:
return True
else:
return False
m=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))
break
count-=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+=i
checked=True
elif 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=s
counts-=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%10
sum=sum*10+m
num=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)
结语
文章仅作为学习笔记,记录从0到1的一个过程
希望对您有所帮助,如有错误欢迎小伙伴指正~
我是 海轰ଘ(੭ˊᵕˋ)੭
如果您觉得写得可以的话,请点个赞吧
谢谢支持❤️
更多推荐
所有评论(0)