【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="")

pta未开始的题可以查看吗(菜鸟学习记第十六天)(1)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(2)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(3)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(4)

提交代码 - 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")

pta未开始的题可以查看吗(菜鸟学习记第十六天)(5)

image.png

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)

pta未开始的题可以查看吗(菜鸟学习记第十六天)(6)

提交代码 - 2

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(7)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(8)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(9)

image.png

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

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

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

输出格式:

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

输入样例:

Hello World!

输出样例:

!dlroW olleH

解答

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(10)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(11)

提交代码 - 2

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(12)

image.png

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)

pta未开始的题可以查看吗(菜鸟学习记第十六天)(13)

提交代码 - 2

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(14)

image.png

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)

pta未开始的题可以查看吗(菜鸟学习记第十六天)(15)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(16)

image.png

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)

pta未开始的题可以查看吗(菜鸟学习记第十六天)(17)

提交代码 - 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))

pta未开始的题可以查看吗(菜鸟学习记第十六天)(18)

注意:

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)

pta未开始的题可以查看吗(菜鸟学习记第十六天)(19)

image.png

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

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

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5

解答

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(20)

image.png

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

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

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

输出格式:

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

输入样例:

ad2f3adjfeainzzzv

输出样例:

23adefijnvz

解答

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(21)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(22)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(23)

提交代码 - 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="")

pta未开始的题可以查看吗(菜鸟学习记第十六天)(24)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(25)

image.png

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

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

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

输出格式:

输出按位逆序的数。

输入样例:

123

输出样例:

321

解答

提交代码 - 1

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(26)

提交代码 - 2

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(27)

image.png

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

pta未开始的题可以查看吗(菜鸟学习记第十六天)(28)

image.png

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)

pta未开始的题可以查看吗(菜鸟学习记第十六天)(29)

image.png

结语

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

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

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

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

谢谢支持❤️

pta未开始的题可以查看吗(菜鸟学习记第十六天)(30)

在这里插入图片描述

,