【PTA|Python】浙大版《Python 程序设计》题目集:第五章
第五章
5-1 输出星期名缩写 (70 分)
题目
输入一个1到7的数字,输出对应的星期名的缩写。
❝1 Mon
2 Tue
3 Wed
4 Thu
5 Fri
6 Sat
7 Sun
输入格式:
❝输入1到7之间数字
输出格式:
❝输出对应的星期名的缩写
输入样例: 在这里给出一组输入。例如:
❝1
输出样例: 在这里给出相应的输出。例如:
❝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 分)
题目
图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度。比如上图0点表示:{'O':{'A':2,'B':5,'C':4}}。
用eval函数处理输入,eval函数具体用法见第六章内置函数。
输入格式:
❝第一行表示输入的行数 下面每行输入表示一个顶点和该顶点相连的边及长度的字符串
输出格式:
❝在一行中输出顶点数,边数,边的总长度
输入样例: 在这里给出一组输入。例如:
❝4
{'a':{'b':10,'c':6}}
{'b':{'c':2,'d':7}}
{'c':{'d':10}} {'d':{}}
输出样例: 在这里给出相应的输出。例如:
❝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 四则运算(用字典实现) (30 分)
题目
四则运算(用字典实现),比较c语言的switch语句。
输入格式:
❝在一行中输入一个数字 在一行中输入一个四则运算符(+,-,*,/) 在一行中输入一个数字
输出格式:
❝在一行中输出运算结果(小数保留2位)
输入样例1: 在这里给出一组输入。例如:
❝7 / 3
输出样例1: 在这里给出相应的输出。例如:
❝2.33
输入样例2: 在这里给出一组输入。例如:
❝10 / 0
输出样例2: 在这里给出相应的输出。例如:
❝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]) 除零返回字符串,其余返回数字类型
r = eval(res[operation])
if type(r) != str:
print(format(r, '.2f'))
else:
print(r)
5-4 分析活动投票情况 (20 分)
题目
利用集合分析活动投票情况。第一小队有五名队员,序号是1,2,3,4,5;第二小队也有五名队员,序号6,7,8,9,10。输入一个得票字符串,求第二小队没有得票的队员
输入格式:
❝在一行中输入得票的队员的序列号,用逗号隔开。
输出格式:
❝一行中输出第二小队没有得票的队员序号。
输入样例: 在这里给出一组输入。例如:
❝1,5,9,3,9,1,1,7,5,7,7,3,3,1,5,7,4,4,5,4,9,5,10,9
输出样例: 在这里给出相应的输出。例如:
❝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 统计字符出现次数 (20 分)
题目
本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。
输入格式:
❝输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。
输出格式:
❝在一行中输出给定字符在给定字符串中出现的次数。
输入样例:
❝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 统计工龄 (20 分)
题目
给定公司N名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。
输入格式:
❝输入首先给出正整数N(≤105),即员工总人数;随后给出N个整数,即每个员工的工龄,范围在[0, 50]。
输出格式:
❝按工龄的递增顺序输出每个工龄的员工个数,格式为:“工龄:人数”。每项占一行。如果人数为0则不输出该项。
输入样例:
❝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 分)
题目
输入一个列表,去掉列表中重复的数字,按原来次序输出!
输入格式:
❝在一行中输入列表
输出格式:
❝在一行中输出不重复列表元素
输入样例: 在这里给出一组输入。例如:
❝[4,7,5,6,8,6,9,5]
输出样例: 在这里给出相应的输出。例如:
❝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整除的数的个数(用集合实现) (30 分)
题目
求指定区间内能被3,5和7整除的数的个数
输入格式:
❝在一行中从键盘输入2个正整数a,b(1<=a<b<=10000000),用空格隔开。
输出格式:
❝在一行输出大于等于a且小于等于b的能被3,5和7整除的数的个数。
输入样例1: 在这里给出一组输入。例如:
❝10 100
输出样例1: 在这里给出相应的输出。例如:
❝0
输入样例2: 在这里给出一组输入。例如:
❝1000 100000
输出样例: 在这里给出相应的输出。例如:
❝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 求矩阵鞍点的个数 (30 分)
题目
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。
本题要求编写程序,求一个给定的n阶方阵的鞍点。
输入格式:
❝输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
❝鞍点的个数
输入样例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)]
# 转置矩阵
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 两数之和 (30 分)
题目
给定一组整数,还有一个目标数,在给定这组整数中找到两个数字,使其和为目标数,如找到,解是唯一的。找不到则显示 "no answer"。输出的下标按从小到大排序。用一重循环加字典实现。
输入格式:
❝在一行中给出这组数。在下一行输入目标数
输出格式:
❝在一行中输出这两个数的下标,用一个空格分开。
输入样例1: 在这里给出一组输入。例如:
❝2,7,11,15 9
输出样例1: 在这里给出相应的输出。例如:
❝0 1
输入样例2: 在这里给出一组输入。例如:
❝3,6,9 10
输出样例2: 在这里给出相应的输出。例如:
❝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 分)
题目
输入用字符串表示两个字典,输出合并后的字典。字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!
输入格式:
❝在第一行中输入第一个字典字符串;
在第二行中输入第二个字典字符串。
输出格式:
❝在一行中输出合并的字典,输出按字典序。
"1" 的 ASCII 码为 49,大于 1,排序时 1 在前,"1" 在后。其它的字符同理。
输入样例1: 在这里给出一组输入。例如:
❝{1:3,2:5}
{1:5,3:7}
输出样例1: 在这里给出相应的输出。例如:
❝{1:8,2:5,3:7}
输入样例2: 在这里给出一组输入。例如:
❝{"1":3,1:4} {"a":5,"1":6}
输出样例2: 在这里给出相应的输出。例如:
❝{1:4,"1":9,"a":5}
解答
注意:
字典的键用一个字母或数字表示!
这道题简单的合并两个字典比较简单,难点在输出时需要对字典的键值进行一个排序
题目中给出键只能是一个字母或者一个数字(??这里其实有歧义 一个数字是指一位的数字还是任意数字)
这里假设的是为一个一位的数字,认为int型数字比字符排在前面
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)