PTA|Python浙大版《Python 程序设计》题目集:第五章

Posted 海轰Pro

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PTA|Python浙大版《Python 程序设计》题目集:第五章相关的知识,希望对你有一定的参考价值。

前言

Hello!小伙伴!
非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出~
 
自我介绍 ଘ(੭ˊᵕˋ)੭
昵称:海轰
标签:程序猿|C++选手|学生
简介:因C语言结识编程,随后转入计算机专业,有幸拿过国奖、省奖等,已保研。目前正在学习C++/Linux(真的真的太难了~)
学习经验:扎实基础 + 多做笔记 + 多敲代码 + 多思考 + 学好英语!

第五章

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)

结语

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

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

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

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

谢谢支持 ❤️

以上是关于PTA|Python浙大版《Python 程序设计》题目集:第五章的主要内容,如果未能解决你的问题,请参考以下文章

PTA|Python浙大版《Python 程序设计》题目集:第六章

PTA|Python浙大版《Python 程序设计》题目集:函数练习

PTA|Python浙大版《Python 程序设计》题目集:第二章

PTA|Python浙大版《Python 程序设计》题目集:第三章

PTA|Python浙大版《Python 程序设计》题目集:第七章

PTA|Python浙大版《Python 程序设计》题目集:第四章(适合Pythno新手的基础练习题集)