浙大PTA-Python题库 编程题第三章(3-1~3-22)题解

其他各章题解链接如下
浙大PTA-Python题库 编程题第一章(1-1~1-3)题解
https://blog.csdn.net/zimuzi2019/article/details/107020657

浙大PTA-Python题库编程题 第二章(2.1~2.14)题解
https://blog.csdn.net/zimuzi2019/article/details/106984549

浙大PTA-Python题库 编程题第三章(3-1~3-22)题解
https://blog.csdn.net/zimuzi2019/article/details/107040596

浙大PTA-Python题库 编程题第四章(4-1~4-30)题解
https://blog.csdn.net/zimuzi2019/article/details/107040603

浙大PTA-Python题库 编程题第五章(5-1~5-11)题解
https://blog.csdn.net/zimuzi2019/article/details/107020929

浙大PTA-Python题库 编程题第六章(6-1~6-8)题解
https://blog.csdn.net/zimuzi2019/article/details/107020979

浙大PTA-Python题库 编程题第七章(7-1)题解
https://tuenity.blog.csdn.net/article/details/102723092

注:第七章只有一道题,因为正则表达式学校尚不要求我就还没看,所以这道题解的链接是另一个大佬的

浙大PTA-Python题库 函数题(6-1~6-6)题解
https://blog.csdn.net/zimuzi2019/article/details/107021024

题目列表

浙大PTA-Python题库 编程题第三章(3-1~3-22)题解_第1张图片
浙大PTA-Python题库 编程题第三章(3-1~3-22)题解_第2张图片

3-1 大于身高的平均值

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

输入格式:

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

输出格式:

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

输入样例:

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

143 174 119 127 117 164 110 128

输出样例:

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

143 174 164 

题解

peplist=list(map(eval,input().split()))
aver=sum(peplist)/len(peplist)
for i in peplist:
    if i>aver:
        print(i,end=' ')

3-2 查验身份证

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

题解

weight=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
Mlist=["1","0","X","9","8","7","6","5","4","3","2"]
unpassset=set()
N=eval(input())
numlist=[input() for i in range(0,N)]
for i in range(0,N):
    sum=0
    for j,k in enumerate(numlist[i][:-1]):
        if k.isdigit()!=True:
            unpassset.add(numlist[i])
            break
        sum+=eval(k)*weight[j]
    if Mlist[sum%11]!=numlist[i][-1]:
        unpassset.add(numlist[i])
if len(unpassset)==0:
    print("All passed")
else:
    for i in numlist:
        if i in unpassset:
            print(i)

3-3 输出字母在字符串中位置索引

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

输入格式:

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

输出格式:

反向输出字符和索引,即最后一个最先输出。每行一个。

输入样例:

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

mississippi
s p

输出样例:

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

9 p
8 p
6 s
5 s
3 s
2 s

题解

str=input()
char1,char2=input().split()
num1,num2=0,0
for index,char in enumerate(reversed(str)):
    if char==char1 or char==char2:
        print("{} {}".format(len(str)-index-1,char))

3-4 查找指定字符

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

输入格式:

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

输出格式:

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

输入样例1:

m
programming

输出样例1:

index = 7

输入样例2:

a
1234

输出样例2:

Not Found

题解

char=input()
strinput=input()
print("index = {:d}".format(strinput.rfind(char))) if strinput.rfind(char)!=-1 else print('Not Found')

3-5 字符转换

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

输入格式:

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

输出格式:

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

输入样例:

free82jeep5

输出样例:

825

题解

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

3-6 求整数序列中出现次数最多的数

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

输入格式:

输入在一行中给出序列中整数个数N(0

输出格式:

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

输入样例:

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

输出样例:

3 4

题解

numlist=list(map(eval,input().split()))
maxnum,maxcount=numlist[1],numlist.count(numlist[1])
for i in numlist[2:]:
    if(numlist.count(i)>maxnum):
        maxnum,maxcount=i,numlist.count(i)
print(maxnum,maxcount)    

3-7 求最大值及其下标

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

输入格式:

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

输出格式:

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

输入样例:

6
2 8 10 1 9 10

输出样例:

10 2

题解

n=input()
numlist=list(map(eval,input().split()))
print(max(numlist),numlist.index(max(numlist)))

3-8 字符串逆序

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

输入格式:

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

输出格式:

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

输入样例:

Hello World!

输出样例:

!dlroW olleH

题解

print(input()[::-1])

3-9 字符串转换成十进制整数

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

输入格式:

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

输出格式:

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

输入样例:

+-P-xf4+-1!#

输出样例:

-3905

题解

strlist=input()
numlist=[]
for i in strlist:
    if(i.isdigit() or 'A'<=i<='F' or 'a'<=i<='f'):
        break
    if(i=='-'):
        numlist.append('-')
        break
numlist.extend(list(filter(lambda x:x.isdigit() or 'A'<=x<='F' or 'a'<=x<='f' ,strlist)))
num="".join(numlist)
print("0") if num=='' or num=='-' else print(int(num,16))

3-10 统计大写辅音字母

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

输入格式:

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

输出格式:

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

输入样例:

HELLO World!

输出样例:

4

题解

strinput=input()
sum=0
for i in strinput:
    if i.isupper() and i!='A' and i!='E' and i!='I' and i!='O' and i!='U' :
       sum+=1
print(sum)

3-11 字符串排序

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

输入格式:

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

输出格式:

按照以下格式输出排序后的结果:

After sorted:
每行一个字符串

输入样例:

red yellow blue green white

输出样例:

After sorted:
blue
green
red
white
yellow

题解

strlist=input().split()
strlist.sort()
print("After sorted:")
for i in strlist:
    print(i)

3-12 求整数的位数及各位数字之和

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

输入格式:

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

输出格式:

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

输入样例:

321

输出样例:

3 6

题解

num=input()
print(len(num),sum([eval(i) for i in num]))

3-13 字符串替换

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

原字母 对应字母
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.

题解

strinput=input()
stroutput=""
for index,i in enumerate(strinput):
    if i.isupper():
        stroutput+=chr(ord('A')+ord('Z')-ord(strinput[index]))
    else:
        stroutput+=strinput[index]
print(stroutput)

3-14 字符串字母大小写转换

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

输入格式:

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

输出格式:

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

输入样例:

Hello World! 123#

输出样例:

hELLO wORLD! 123

题解

print(input()[:-1].swapcase())

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

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

输入格式:

输入给出一行字符。

输出格式:

在一行中输出单词个数。

输入样例:

Let's go to room 209.

输出样例:

5

题解

print(len(input().split()))

3-16 删除重复字符

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

输入格式:

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

输出格式:

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

输入样例:

ad2f3adjfeainzzzv

输出样例:

23adefijnvz

题解

print(*sorted(list(set([i for i in input()]))),sep="")

3-17 删除字符

输入一个字符串 str,再输入要删除字符 c,大小写不区分,将字符串 str 中出现的所有字符 c 删除。

输入格式:

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

输出格式:

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

输入样例:

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

        Bee
   E

输出样例:

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

result: B

题解

strin=input().strip()
delch=input().strip()
print("result: ",*list(filter(lambda i:i!=delch and i!=delch.swapcase(),strin)),sep="")

3-18 输出10个不重复的英文字母

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

输入格式:

在一行中输入字符串

输出格式:

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

输入样例1:

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

poemp134

输出样例1:

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

not found

输入样例2

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

This is a test example

输出样例2:

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

Thisaexmpl

题解

string1=''.join(list(filter(lambda ch:ch.isalpha(),input())))
charlist=set()
indexlist=[]
for i in string1:
    if len(charlist)==10:
        break
    if (i  not in charlist) and (i.swapcase() not in charlist):
        charlist.add(i)
        indexlist.append(i)
if len(indexlist)<10:
    print('not found')
else:
    print(*indexlist,sep='')

3-19 找最长的字符串

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

输入格式:

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

输出格式:

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

The longest is: 最长的字符串

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

输入样例:

5
li
wang
zhang
jin
xiang

输出样例:

The longest is: zhang

题解

N=eval(input())
strlist=[input() for i in range(0,N)]
maxlenlist=max([len(i) for i in strlist])
for index,i in enumerate(strlist):
    if(len(i)==maxlenlist):
        print("The longest is: {}".format(strlist[index]))
        break

3-20 逆序的三位

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

输入格式:

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

输出格式:

输出按位逆序的数。

输入样例:

123

输出样例:

321

题解

print(input()[::-1].lstrip('0'))

3-21 判断回文字符串

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

输入格式:

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

输出格式:

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

输入样例1:

level

输出样例1:

level
Yes

输入样例2:

1 + 2 = 2 + 1 =

输出样例2:

1 + 2 = 2 + 1 =
No

题解

s=input()
print("{:s}\nYes".format(s)) if s==s[::-1] else print("{:}\nNo".format(s))

3-22 输出大写英文字母

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

输入格式:

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

输出格式:

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

输入样例1:

FONTNAME and FILENAME

输出样例1:

FONTAMEIL

输入样例2:

fontname and filrname

输出样例2:

Not Found

题解

strin=input()
charlist=[i for i in strin if i.isalpha()]
examset=set()
outlist=[]
for ch in charlist:
    if ch.isupper() and ch not in examset:
        outlist.append(ch)
        examset.add(ch)
if outlist==[]:
    print("Not Found")
else:
    print(*outlist,sep="")

你可能感兴趣的:(Python学习,python,字符串)