【PTA|Python】浙大版《Python 程序設計》題目集:第三章
第三章習題
3-1 大于身高的平均值 (10 分)
題目
中小學生每個學期都要體檢,要量身高,因為身高可以反映孩子的生長狀況?,F(xiàn)在,一個班的身高已經(jīng)量好了,請輸出其中超過平均身高的那些身高。程序的輸入為一行數(shù)據(jù),其中以空格分隔,每個數(shù)據(jù)都是一個正整數(shù)。程序要輸出那些超過輸入的正整數(shù)的平均數(shù)的輸入值,每個數(shù)后面有一個空格,輸出的順序和輸入的相同。
輸入格式:
?在一行輸入中一個班的身高值,以空格分隔。
輸出格式:
?在一行輸出超過輸入的平均數(shù)的輸入值,以空格分隔。
輸入樣例:
?在這里給出一組輸入。例如:
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位地區(qū)、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規(guī)則如下:
首先對前17位數(shù)字加權(quán)求和,權(quán)重分配為:{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
現(xiàn)在給定一些身份證號碼,請你驗證校驗碼的有效性,并輸出有問題的號碼。
輸入格式:
?輸入第一行給出正整數(shù)N(≤100)是輸入的身份證號碼的個數(shù)。隨后N行,每行給出1個18位身份證號碼。
輸出格式:
?按照輸入的順序每行輸出1個有問題的身份證號碼。這里并不檢驗前17位是否合理,只檢查前17位是否全為數(shù)字且最后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())
# 統(tǒng)計正確身份證號碼的數(shù)量
count=0
# 權(quán)重
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 分)
題目
本題要求編寫程序,從給定字符串中查找某指定的字符。
輸入格式:
?輸入的第一行是一個待查找的字符。第二行是一個以回車結(jié)束的非空字符串(不超過80個字符)。
輸出格式:
?如果找到,在一行內(nèi)按照格式“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:
# 反轉(zhuǎn)
words=words[::-1]
print("index = {:d}".format(len(words)-words.find(word)-1))
else:
print("Not Found")
3-5 字符轉(zhuǎn)換 (15 分)
題目
本題要求提取一個字符串中的所有數(shù)字字符('0'……'9'),將其轉(zhuǎn)換為一個整數(shù)輸出。
輸入格式:
?輸入在一行中給出一個不超過80個字符且以回車結(jié)束的字符串。
輸出格式:
?在一行中輸出轉(zhuǎn)換后的整數(shù)。題目保證輸出不超過長整型范圍。
輸入樣例:
?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 求整數(shù)序列中出現(xiàn)次數(shù)最多的數(shù) (15 分)
題目
本題要求統(tǒng)計一個整型序列中出現(xiàn)次數(shù)最多的整數(shù)及其出現(xiàn)次數(shù)。
輸入格式:
?輸入在一行中給出序列中整數(shù)個數(shù)N(0<N≤1000),以及N個整數(shù)。數(shù)字間以空格分隔。
輸出格式:
?在一行中輸出出現(xiàn)次數(shù)最多的整數(shù)及其出現(xiàn)次數(shù),數(shù)字間以空格分隔。題目保證這樣的數(shù)字是唯一的。
輸入樣例:
?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_個數(shù)中的最大值及其對應的最小下標(下標從0開始)。
輸入格式:
?輸入在第一行中給出一個正整數(shù)n(1<n≤10)。第二行輸入n個整數(shù),用空格分開。
輸出格式:
?在一行中輸出最大值及最大值的最小下標,中間用一個空格分開。
輸入樣例:
?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個字符長度的、以回車結(jié)束的非空字符串。
輸出格式:
?在一行中輸出逆序后的字符串。
輸入樣例:
?Hello World!
輸出樣例:
?!dlroW olleH
解答
str=input()
print("{}".format(str[::-1]))
3-9 字符串轉(zhuǎn)換成十進制整數(shù) (15 分)
題目
輸入一個以#結(jié)束的字符串,本題要求濾去所有的非十六進制字符(不分大小寫),組成一個新的表示十六進制數(shù)字的字符串,然后將其轉(zhuǎn)換為十進制數(shù)后輸出。如果在第一個十六進制字符之前存在字符“-”,則代表該數(shù)是負數(shù)。
輸入格式:
?輸入在一行中給出一個以#結(jié)束的非空字符串。
輸出格式:
?在一行中輸出轉(zhuǎn)換后的十進制數(shù)。題目保證輸出在長整型范圍內(nèi)。
輸入樣例:
?+-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 統(tǒng)計大寫輔音字母 (15 分)
題目
英文輔音字母是除A、E、I、O、U以外的字母。本題要求編寫程序,統(tǒng)計給定字符串中大寫輔音字母的個數(shù)。
輸入格式:
?輸入在一行中給出一個不超過80個字符、并以回車結(jié)束的字符串。
輸出格式:
?輸出在一行中給出字符串中大寫輔音字母的個數(shù)。
輸入樣例:
?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。
輸出格式:
?按照以下格式輸出排序后的結(jié)果:
?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 求整數(shù)的位數(shù)及各位數(shù)字之和 (15 分)
題目
對于給定的正整數(shù)N,求它的位數(shù)及其各位數(shù)字之和。
輸入格式:
?輸入在一行中給出一個不超過109的正整數(shù)N。
輸出格式:
?在一行中輸出N的位數(shù)及其各位數(shù)字之和,中間用一個空格隔開。
輸入樣例:
?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 分)
題目
本題要求編寫程序,將給定字符串中的大寫英文字母按以下對應規(guī)則替換:
| 原字母 | 對應字母 |
|---|---|
| A | Z |
| B | Y |
| C | X |
| D | W |
| … | … |
| X | C |
| Y | B |
| Z | A |
輸入格式:
?輸入在一行中給出一個不超過80個字符、并以回車結(jié)束的字符串。
輸出格式:
?輸出在一行中給出替換完成后的字符串。
輸入樣例:
?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 字符串字母大小寫轉(zhuǎn)換 (15 分)
題目
本題要求編寫程序,對一個以“#”結(jié)束的字符串,將其小寫字母全部轉(zhuǎn)換成大寫字母,把大寫字母全部轉(zhuǎn)換成小寫字母,其他字符不變輸出。
輸入格式:
?輸入為一個以“#”結(jié)束的字符串(不超過30個字符)。
輸出格式:
?在一行中輸出大小寫轉(zhuǎn)換后的結(jié)果字符串。
輸入樣例:
?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 統(tǒng)計一行文本的單詞個數(shù) (15 分)
題目
本題目要求編寫程序統(tǒng)計一行字符中單詞的個數(shù)。所謂“單詞”是指連續(xù)不含空格的字符串,各單詞之間用空格分隔,空格數(shù)可以是多個。
輸入格式:
?輸入給出一行字符。
輸出格式:
?在一行中輸出單詞個數(shù)。
輸入樣例:
?Let's go to room 209.
輸出樣例:
?5
解答
str = input().split()
print(len(str))
3-16 刪除重復字符 (20 分)
題目
本題要求編寫程序,將給定字符串去掉重復的字符后,按照字符ASCII碼順序從小到大排序后輸出。
輸入格式:
?輸入是一個以回車結(jié)束的非空字符串(少于80個字符)。
輸出格式:
?輸出去重排序后的結(jié)果字符串。
輸入樣例:
?ad2f3adjfeainzzzv
輸出樣例:
?23adefijnvz
解答
s = list(set(input()))
s.sort()
for i in s:
print(i,end="")
3-17 刪除字符 (30 分)
題目
輸入一個字符串 str,再輸入要刪除字符 c,大小寫不區(qū)分,將字符串 str 中出現(xiàn)的所有字符 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個不重復的英文字母(不區(qū)分大小寫)挑選出來。如沒有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個字符串,輸出其中最長的字符串。
輸入格式:
?輸入第一行給出正整數(shù)N;隨后N行,每行給出一個長度小于80的非空字符串,其中不會出現(xiàn)換行符,空格,制表符。
輸出格式:在一行中用以下格式輸出最長的字符串:
?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 逆序的三位數(shù) (10 分)
題目
程序每次讀入一個正3位數(shù),然后輸出按位逆序的數(shù)字。注意:當輸入的數(shù)字含有結(jié)尾的0時,輸出不應帶有前導的0。比如輸入700,輸出應該是7。
輸入格式:
?每個測試是一個3位的正整數(shù)。
輸出格式:
?輸出按位逆序的數(shù)。
輸入樣例:
?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 分)
題目
輸入一個字符串,判斷該字符串是否為回文?;匚木褪亲址行膶ΨQ,從左向右讀和從右向左讀的內(nèi)容是一樣的。
輸入格式:
?輸入在一行中給出一個不超過80個字符長度的、以回車結(jié)束的非空字符串。
輸出格式:
?輸出在第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 分)
題目
本題要求編寫程序,順序輸出給定字符串中所出現(xiàn)過的大寫英文字母,每個字母只輸出一遍;若無大寫英文字母則輸出“Not Found”。
輸入格式:
?輸入為一個以回車結(jié)束的字符串(少于80個字符)。
輸出格式:
?按照輸入的順序在一行中輸出所出現(xiàn)過的大寫英文字母,每個字母只輸出一遍。若無大寫英文字母則輸出“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)
結(jié)語
希望對您有所幫助,如有錯誤歡迎小伙伴指正~
我是 海轟?(?ˊ?ˋ)?
如果您覺得寫得可以的話,請點個贊吧
謝謝支持??






























