【PTA|Python】浙大版《Python 程序設(shè)計(jì)》題目集:第五章
第五章
5-1 輸出星期名縮寫(xiě) (70 分)
題目
輸入一個(gè)1到7的數(shù)字,輸出對(duì)應(yīng)的星期名的縮寫(xiě)。
?1 Mon
2 Tue
3 Wed
4 Thu
5 Fri
6 Sat
7 Sun
輸入格式:
?輸入1到7之間數(shù)字
輸出格式:
?輸出對(duì)應(yīng)的星期名的縮寫(xiě)
輸入樣例: 在這里給出一組輸入。例如:
?1
輸出樣例: 在這里給出相應(yīng)的輸出。例如:
?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 分)
題目

圖的字典表示。輸入多行字符串,每行表示一個(gè)頂點(diǎn)和該頂點(diǎn)相連的邊及長(zhǎng)度,輸出頂點(diǎn)數(shù),邊數(shù),邊的總長(zhǎng)度。比如上圖0點(diǎn)表示:{'O':{'A':2,'B':5,'C':4}}。
用eval函數(shù)處理輸入,eval函數(shù)具體用法見(jiàn)第六章內(nèi)置函數(shù)。
輸入格式:
?第一行表示輸入的行數(shù) 下面每行輸入表示一個(gè)頂點(diǎn)和該頂點(diǎn)相連的邊及長(zhǎng)度的字符串
輸出格式:
?在一行中輸出頂點(diǎn)數(shù),邊數(shù),邊的總長(zhǎng)度
輸入樣例: 在這里給出一組輸入。例如:
?4
{'a':{'b':10,'c':6}}
{'b':{'c':2,'d':7}}
{'c':{'d':10}} {'d':{}}
輸出樣例: 在這里給出相應(yīng)的輸出。例如:
?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+=1
length+=temp[k]
print("{} {} {}".format(n,sum,length))

5-3 四則運(yùn)算(用字典實(shí)現(xiàn)) (30 分)
題目
四則運(yùn)算(用字典實(shí)現(xiàn)),比較c語(yǔ)言的switch語(yǔ)句。
輸入格式:
?在一行中輸入一個(gè)數(shù)字 在一行中輸入一個(gè)四則運(yùn)算符(+,-,*,/) 在一行中輸入一個(gè)數(shù)字
輸出格式:
?在一行中輸出運(yùn)算結(jié)果(小數(shù)保留2位)
輸入樣例1: 在這里給出一組輸入。例如:
?7 / 3
輸出樣例1: 在這里給出相應(yīng)的輸出。例如:
?2.33
輸入樣例2: 在這里給出一組輸入。例如:
?10 / 0
輸出樣例2: 在這里給出相應(yīng)的輸出。例如:
?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]) 除零返回字符串,其余返回?cái)?shù)字類(lèi)型
r = eval(res[operation])
if type(r) != str:
print(format(r, '.2f'))
else:
print(r)

5-4 分析活動(dòng)投票情況 (20 分)
題目
利用集合分析活動(dòng)投票情況。第一小隊(duì)有五名隊(duì)員,序號(hào)是1,2,3,4,5;第二小隊(duì)也有五名隊(duì)員,序號(hào)6,7,8,9,10。輸入一個(gè)得票字符串,求第二小隊(duì)沒(méi)有得票的隊(duì)員
輸入格式:
?在一行中輸入得票的隊(duì)員的序列號(hào),用逗號(hào)隔開(kāi)。
輸出格式:
?一行中輸出第二小隊(duì)沒(méi)有得票的隊(duì)員序號(hào)。
輸入樣例: 在這里給出一組輸入。例如:
?1,5,9,3,9,1,1,7,5,7,7,3,3,1,5,7,4,4,5,4,9,5,10,9
輸出樣例: 在這里給出相應(yīng)的輸出。例如:
?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 統(tǒng)計(jì)字符出現(xiàn)次數(shù) (20 分)
題目
本題要求編寫(xiě)程序,統(tǒng)計(jì)并輸出某給定字符在給定字符串中出現(xiàn)的次數(shù)。
輸入格式:
?輸入第一行給出一個(gè)以回車(chē)結(jié)束的字符串(少于80個(gè)字符);第二行輸入一個(gè)字符。
輸出格式:
?在一行中輸出給定字符在給定字符串中出現(xiàn)的次數(shù)。
輸入樣例:
?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 統(tǒng)計(jì)工齡 (20 分)
題目
給定公司N名員工的工齡,要求按工齡增序輸出每個(gè)工齡段有多少員工。
輸入格式:
?輸入首先給出正整數(shù)N(≤105),即員工總?cè)藬?shù);隨后給出N個(gè)整數(shù),即每個(gè)員工的工齡,范圍在[0, 50]。
輸出格式:
?按工齡的遞增順序輸出每個(gè)工齡的員工個(gè)數(shù),格式為:“工齡:人數(shù)”。每項(xiàng)占一行。如果人數(shù)為0則不輸出該項(xiàng)。
輸入樣例:
?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 分)
題目
輸入一個(gè)列表,去掉列表中重復(fù)的數(shù)字,按原來(lái)次序輸出!
輸入格式:
?在一行中輸入列表
輸出格式:
?在一行中輸出不重復(fù)列表元素
輸入樣例: 在這里給出一組輸入。例如:
?[4,7,5,6,8,6,9,5]
輸出樣例: 在這里給出相應(yīng)的輸出。例如:
?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整除的數(shù)的個(gè)數(shù)(用集合實(shí)現(xiàn)) (30 分)
題目
求指定區(qū)間內(nèi)能被3,5和7整除的數(shù)的個(gè)數(shù)
輸入格式:
?在一行中從鍵盤(pán)輸入2個(gè)正整數(shù)a,b(1<=a<b<=10000000),用空格隔開(kāi)。
輸出格式:
?在一行輸出大于等于a且小于等于b的能被3,5和7整除的數(shù)的個(gè)數(shù)。
輸入樣例1: 在這里給出一組輸入。例如:
?10 100
輸出樣例1: 在這里給出相應(yīng)的輸出。例如:
?0
輸入樣例2: 在這里給出一組輸入。例如:
?1000 100000
輸出樣例: 在這里給出相應(yīng)的輸出。例如:
?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 求矩陣鞍點(diǎn)的個(gè)數(shù) (30 分)
題目
一個(gè)矩陣元素的“鞍點(diǎn)”是指該位置上的元素值在該行上最大、在該列上最小。
本題要求編寫(xiě)程序,求一個(gè)給定的n階方陣的鞍點(diǎn)。
輸入格式:
?輸入第一行給出一個(gè)正整數(shù)n(1≤n≤6)。隨后n行,每行給出n個(gè)整數(shù),其間以空格分隔。
輸出格式:
?鞍點(diǎn)的個(gè)數(shù)
輸入樣例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)]
# 轉(zhuǎ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 兩數(shù)之和 (30 分)
題目
給定一組整數(shù),還有一個(gè)目標(biāo)數(shù),在給定這組整數(shù)中找到兩個(gè)數(shù)字,使其和為目標(biāo)數(shù),如找到,解是唯一的。找不到則顯示 "no answer"。輸出的下標(biāo)按從小到大排序。用一重循環(huán)加字典實(shí)現(xiàn)。
輸入格式:
?在一行中給出這組數(shù)。在下一行輸入目標(biāo)數(shù)
輸出格式:
?在一行中輸出這兩個(gè)數(shù)的下標(biāo),用一個(gè)空格分開(kāi)。
輸入樣例1: 在這里給出一組輸入。例如:
?2,7,11,15 9
輸出樣例1: 在這里給出相應(yīng)的輸出。例如:
?0 1
輸入樣例2: 在這里給出一組輸入。例如:
?3,6,9 10
輸出樣例2: 在這里給出相應(yīng)的輸出。例如:
?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 分)
題目
輸入用字符串表示兩個(gè)字典,輸出合并后的字典。字典的鍵用一個(gè)字母或數(shù)字表示。注意:1和‘1’是不同的關(guān)鍵字!
輸入格式:
?在第一行中輸入第一個(gè)字典字符串;
在第二行中輸入第二個(gè)字典字符串。
輸出格式:
?在一行中輸出合并的字典,輸出按字典序。
"1" 的 ASCII 碼為 49,大于 1,排序時(shí) 1 在前,"1" 在后。其它的字符同理。
輸入樣例1: 在這里給出一組輸入。例如:
?{1:3,2:5}
{1:5,3:7}
輸出樣例1: 在這里給出相應(yīng)的輸出。例如:
?{1:8,2:5,3:7}
輸入樣例2: 在這里給出一組輸入。例如:
?{"1":3,1:4} {"a":5,"1":6}
輸出樣例2: 在這里給出相應(yīng)的輸出。例如:
?{1:4,"1":9,"a":5}
解答
注意:
字典的鍵用一個(gè)字母或數(shù)字表示!
這道題簡(jiǎn)單的合并兩個(gè)字典比較簡(jiǎn)單,難點(diǎn)在輸出時(shí)需要對(duì)字典的鍵值進(jìn)行一個(gè)排序
題目中給出鍵只能是一個(gè)字母或者一個(gè)數(shù)字(??這里其實(shí)有歧義 一個(gè)數(shù)字是指一位的數(shù)字還是任意數(shù)字)
這里假設(shè)的是為一個(gè)一位的數(shù)字,認(rèn)為int型數(shù)字比字符排在前面
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)


