PTA-MOOC《Python程序设计浙江大学》拼题题目集第五章编程题题目及代码答案

7-1 输出星期名缩写 (70分)

输入一个1到7的数字,输出对应的星期名的缩写。
1 Mon
2 Tue
3 Wed
4 Thu
5 Fri
6 Sat
7 Sun

输入格式:
输入1到7之间数字

输出格式:
输出对应的星期名的缩写

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

1

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

Mon

代码

n=input()
data={'1':'Mon','2':'Tue','3':'Wed','4':'Thu','5':'Fri','6':'Sat','7':'Sun'}
print(data[n])

7-2 图的字典表示 (20分)

捕获.JPG

图的字典表示。输入多行字符串,每行表示一个顶点和该顶点相连的边及长度,输出顶点数,边数,边的总长度。比如上图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())
data={}
count1,count2=0,0
for i in range(n):
    a=eval(input())
    for each in a:
        data[each]=a[each]
for i in data:
    count1+=len(data[i])
    for j in data[i]:
        count2+=data[i][j]
print("%d %d %d"%(len(data),count1,count2))

7-3 四则运算(用字典实现) (30分)

四则运算(用字典实现),比较c语言的switch语句。

输入格式:
在一行中输入一个数字 在一行中输入一个四帜运算符(+,-,*,/) 在一行中输入一个数字

输出格式:
在一行中输出运算结果(小数保留2位)

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

7
/
3

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

2.33

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

10
/
0

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

divided by zero

代码

a = float(input())
m = input()
b = float(input())

try:
    res = {'+': a + b, '-': a - b, '*': a * b, '/': a / b}
    print(f"{res[m]:.2f}")
except:
    print("divided by zero")

ps:

这道题目有个小坑,题目并未说明如结果为整数则输出整数,题目默认整数也保留两位小数。
故下面为输出是整数则不保留小数的代码

n=input()
a=input()
m=input()
if "." in m:
    m=float(m)
else:
    m=int(m)
if "." in n:
    n=float(n)
else:
    n=int(n)       
data={'+':1,'-':2,'*':3,'/':4}
if m == 0 and data[a] ==4:
    print("divided by zero")
else:
    if isinstance(m,int) and isinstance(n,int):
        if data[a] == 1:
            print(n+m)
        elif data[a] == 2:
            print(n-m)
        elif data[a] == 3:
            print(n*m)
        elif data[a] == 4:
            if int(n/m) == (n/m):
                print(int(n/m))
            else:
                print("%.2f"%(n/m))
    else:
        if data[a] == 1:
            print("%.2f"%(n+m))
        elif data[a] == 2:
            print("%.2f"%(n-m))
        elif data[a] == 3:
            print("%.2f"%(n*m))
        elif data[a] == 4:
            print("%.2f"%(n/m))

7-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

代码

s=list(map(int,input().split(",")))
data=set()
num=[]
j=0
for i in range(len(s)):
    data.add(s[i])
for i in range(6,11):
    if i not in data:
        num.append(i)
if len(num) !=0:
    for i in range(len(num)):
        if i != len(num)-1:
            print("%d "%num[i],end="")
        else:
            print(num[i])

7-5 统计字符出现次数 (20分)

本题要求编写程序,统计并输出某给定字符在给定字符串中出现的次数。

输入格式:
输入第一行给出一个以回车结束的字符串(少于80个字符);第二行输入一个字符。

输出格式:
在一行中输出给定字符在给定字符串中出现的次数。

输入样例:

programming is More fun!
m

输出样例:

2

代码

s=input()
a=input()
print(s.count(a))

7-6 统计工龄 (20分)

给定公司N名员工的工龄,要求按工龄增序输出每个工龄段有多少员工。

输入格式:
输入首先给出正整数N(≤10
​5
​​ ),即员工总人数;随后给出N个整数,即每个员工的工龄,范围在[0, 50]。

输出格式:
按工龄的递增顺序输出每个工龄的员工个数,格式为:“工龄:人数”。每项占一行。如果人数为0则不输出该项。

输入样例:

8
10 2 0 5 7 2 5 2

输出样例:

0:1
2:3
5:2
7:1
10:1

代码

s=int(input())
data=list(map(int,input().split()[:s]))
data.sort()
data=list(map(str,data))
num={}
for i in range(s):
    if data[i] not in num:
        num[data[i]]=1
    else:
        num[data[i]]+=1
for each in num:
    print("%s:%d"%(each,num[each]))

7-7 列表去重 (40分)

输入一个列表,去掉列表中重复的数字,按原来次序输出!

输入格式:
在一行中输入列表

输出格式:
在一行中输出不重复列表元素

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

[4,7,5,6,8,6,9,5] 

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

4 7 5 6 8 9

代码


s=input()
s=eval(s)
s=s[::-1]
for i in s:
    if s.count(i) !=1:
        for j in range(s.count(i)-1):
            s.remove(i)
for i in range(len(s)-1,-1,-1):
    if i !=0:
        print("%d "%s[i],end="")
    else:
        print(s[i])

7-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

代码

a,b=input().split()
a,b=int(a),int(b)
count=0
for i in range(a,b+1):
    if i%3==0 and i%5==0 and i%7==0:
        count+=1
print(count)

7-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
6    6    6
6    6    6
6    6    6

输出样例3:

9

代码

n=int(input())
data=[]
count=0
for i in range(n):
    data.append(list(map(int,input().split())))
for i in range(n):
   for j in range(n):
       if data[i][j] == max(data[i]) and data[i][j] == min([data[k][j] \
                                                           for k in range(n)]):
           count+=1
print(count)

7-10 两数之和 (30分)

给定一组整数,还有一个目标数,在给定这组整数中找到两个数字,使其和为目标数,如找到,解是唯一的。找不到则显示 “no answer”。输出的下标按从小到大排序。用一重循环加字典实现。

输入格式:
在一行中给出这组数。 在下一行输入目标数

输出格式:
在一行中输出这两个数的下标,用一个空格分开。

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

2,7,11,15
9

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

0 1

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

3,6,9
10

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

no answer

代码

s=list(map(int,input().split(",")))
n=int(input())
flag=0
for i in range(len(s)):
    for j in range(i,len(s)):
        if s[i]+s[j] == n:
            flag=1
            print("%d %d"%(i,j))
if flag==0:
    print("no answer")

7-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}

代码

a = dict(eval(input()))
b = dict(eval(input()))
c = {}
for i in a.keys():
    for j in b.keys():
        if i == j:
            c[i] = a.get(i) + b.get(j)
        if i not in c.keys():
            c[i] = a.get(i)
        if j not in c.keys():
            c[j] = b.get(j)
c1 = {}
c2 = {}
for key in c.keys():
    if type(key) == str:
        c1[key] = c.get(key)
    elif type(key) == int:
        c2[key] = c.get(key)
c11 = sorted(c1.keys())
c22 = sorted(c2.keys())
ans1 = {}  #str
ans2 = {}  #int
ans3 = {}
for i in c11:
    ans1[i] = c1.get(i)
for i in c22:
    ans2[i] = c2.get(i)

num = 0
num1 = 0
print("{", end='')
if len(ans2) != 0:
    for k, v in ans2.items():
        if len(ans1) == 0 and num1 == len(ans2) - 1:
            print("{}:{}".format(k, v), end='')
        else:
            print("{}:{},".format(k, v), end='')
        num1 = num1 + 1
if len(ans1) != 0:
    for k, v in ans1.items():
        if num == len(ans1) - 1:
            print(("\""+"%c"+"\""+":"+"%d") % (k, v), end='')
        else:
            print(("\"" + "%c" + "\"" + ":" + "%d,") % (k, v), end='')
        num = num + 1
print("}", end='')
  • 7
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值